[
  {
    "path": ".github/workflows/nix.yaml",
    "content": "name: Build Eurydice and run tests\n\non:\n  push:\n    branches:\n      - main\n  pull_request:\n  workflow_dispatch:\n\n# Cancel previous versions of this job that are still running.\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}\n  cancel-in-progress: true\n\njobs:\n  check:\n    runs-on: self-hosted\n    steps:\n      - uses: actions/checkout@v3\n      - name: Build and test\n        run: nix flake check -L\n\n  charon-pin-is-forward:\n    runs-on: self-hosted\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0 # deep clone in order to get access to other commits\n      - run: nix develop '.#ci' --command ./scripts/ci-check-charon-pin-is-forward.sh\n\n  charon-pin-is-merged:\n    runs-on: self-hosted\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0 # deep clone in order to get access to other commits\n      - run: nix develop '.#ci' --command ./scripts/ci-check-charon-pin-is-merged.sh\n"
  },
  {
    "path": ".gitignore",
    "content": "/karamel\n/charon\n/libcrux\n\n_build\ntest/*/target\nout/*/a.out\n*.DS_Store\n*.orig\n*.llbc\neurydice\n/.vscode\n.charon_version\n\ntest/libcrux-*/build\n_opam\n.cache\n"
  },
  {
    "path": ".ocamlformat",
    "content": "profile = default\nversion = 0.27.0\nmargin = 100\n\nbreak-cases = fit-or-vertical\nexp-grouping = preserve\nif-then-else = vertical\nparens-tuple = multi-line-only\nparens-tuple-patterns = multi-line-only\n"
  },
  {
    "path": ".ocamlformat-ignore",
    "content": "lib/charon/**\nlib/krml/**\n"
  },
  {
    "path": "LICENSE-APACHE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2024 Eurydice Contributors\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "LICENSE-MIT",
    "content": "MIT License\n\nCopyright (c) 2024 Eurydice Contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Makefile",
    "content": "CHARON_HOME \t?= $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/charon\nKRML_HOME \t?= $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/karamel\nLIBCRUX_HOME \t?= $(dir $(abspath $(lastword $(MAKEFILE_LIST))))/libcrux\nEURYDICE\t?= ./eurydice $(EURYDICE_FLAGS)\nCHARON\t\t?= $(CHARON_HOME)/bin/charon\n\nBROKEN_TESTS\t\t= where_clauses println chunks mutable_slice_range issue_99 issue_14 issue_311\nTEST_DIRS\t\t= $(filter-out $(BROKEN_TESTS),$(basename $(notdir $(wildcard test/*.rs))))\n\n# Warn on old versions of bash\n_ := $(shell bash -c '(( $${BASH_VERSION%%.*} >= 4 ))')\nifneq ($(.SHELLSTATUS),0)\n_: $(error \"bash version is too old; hint: brew install bash\")\nendif\n\n# Warn on old versions of make\nifeq (3.81,$(MAKE_VERSION))\n  $(error You seem to be using the OSX antiquated Make version. Hint: brew \\\n    install make, then invoke gmake instead of make)\nendif\n\n# Enable `foo/**` glob syntax\nSHELL := bash -O globstar \n\nifeq ($(shell uname -s),Darwin)\n  ifeq (,$(shell which gsed))\n    $(error gsed not found; try brew install gnu-sed)\n  endif\n  SED=gsed\nelse\n  SED=sed\nendif\n\nifneq ($(shell $(CHARON) version), $(shell cat .charon_version &>/dev/null || true))\n  _ := $(shell $(CHARON) version > .charon_version)\nendif\n\n.PHONY: all\nall: format-check\n\t@ocamlfind list | grep -q charon || test -L lib/charon || echo \"⚠️⚠️⚠️ Charon not found; we suggest run 'make setup-charon'\"\n\t@ocamlfind list | grep -q krml || test -L lib/krml || echo \"⚠️⚠️⚠️ krml not found; we suggest run 'make setup-karamel'\"\n\t$(MAKE) build\n\n.PHONY: build\nbuild: check-karamel check-charon\n\tdune build && ln -sf _build/default/bin/main.exe eurydice\n\nCFLAGS\t\t:= -Wall -Werror -Wno-unused-variable -Wno-unused-but-set-variable $(CFLAGS) -I$(KRML_HOME)/include\nCXXFLAGS\t:= -std=c++17\n\ntest: $(addprefix test-,$(TEST_DIRS)) custom-test-libcrux-ml-kem-no-const custom-test-array custom-test-for testxx-result check-charon check-libcrux test-libcrux-ml-kem\n\nclean-and-test:\n\t$(MAKE) clean-llbc\n\t$(MAKE) test\n\n.PRECIOUS: %.llbc\n%.llbc: %.rs .charon_version\n\t# --mir elaborated --add-drop-bounds \n\t$(CHARON) rustc --preset=eurydice --dest-file \"$@\" $(CHARON_EXTRA) -- -Aunused $<\n\nout/test-%/main.c: test/main.c\n\tmkdir -p out/test-$*\n\tsed 's/__NAME__/$*/g' $< > $@\n\ntest/issue_99.llbc: CHARON_EXTRA = \\\n  --include=core::option::*::as_ref\n\ntest/issue_105.llbc: CHARON_EXTRA = \\\n  --include=core::result::*::branch \\\n  --include=core::result::*::from_residual \\\n  --include=core::result::*::eq \\\n  --include=core::cmp::* \\\n  --include=core::convert::*\n\ntest/array2d.llbc: CHARON_EXTRA = --include=core::array::equality::*\n\ntest/core_num.llbc: CHARON_EXTRA = \\\n  --include=core::num::*::BITS \\\n  --include=core::num::*::MAX\n\ntest/println.llbc: CHARON_EXTRA = \\\n  --include=core::fmt::Arguments --include=core::fmt::rt::*::new_const \\\n  --include=core::fmt::rt::Argument\n\ntest/option.llbc: CHARON_EXTRA = \\\n  --include=core::option::*\n\ntest/lvalue.llbc: CHARON_EXTRA = \\\n  --mir elaborated\n\ntest-substr: EXTRA_C = -I../../test ../../test/substr_impl.c\ntest-substr: EXTRA = --config test/substr.yaml\ntest-partial_eq: EXTRA_C = ../../test/partial_eq_stubs.c\ntest-nested_arrays: EXTRA = -funroll-loops 0\ntest-array: EXTRA = -fcomments\ntest-symcrust: CFLAGS += -Wno-unused-function\ntest-more_str: EXTRA_C = ../../test/core_str_lib.c\ntest-more_primitive_types: EXTRA = --config test/more_primitive_types.yaml\ntest-global_ref: EXTRA_C = ../../test/core_cmp_lib.c\ntest-lvalue: CFLAGS += -Wno-unused-but-set-variable\ntest-issue_shift: CFLAGS += -fsanitize=undefined\n\n\ntest-%: test/%.llbc out/test-%/main.c | all\n\t$(EURYDICE) $(EXTRA) --output out/test-$* $<\n\t$(SED) -i 's/  KaRaMeL version: .*//' out/test-$*/**/*.{c,h} # This changes on every commit\n\t$(SED) -i 's/  KaRaMeL invocation: .*//' out/test-$*/**/*.{c,h} # This changes between local and CI\n\tcd out/test-$* && $(CC) $(CFLAGS) -I. -I../../include $(EXTRA_C) $*.c main.c && ./a.out\n\n# C++ tests\n\nout/testxx-%/main.cc: test/main.c\n\tmkdir -p out/testxx-$*\n\tsed 's/__NAME__/$*/g' $< > $@\n\ntestxx-%: test/%.llbc out/testxx-%/main.cc | all\n\t$(EURYDICE) $(EXTRA) -fc++17-compat --output out/testxx-$* $<\n\t$(SED) -i 's/  KaRaMeL version: .*//' out/testxx-$*/**/*.{c,h} # This changes on every commit\n\t$(SED) -i 's/  KaRaMeL invocation: .*//' out/testxx-$*/**/*.{c,h} # This changes between local and CI\n\tmv out/testxx-$*/$*.c out/testxx-$*/$*.cc\n\tcd out/testxx-$* && $(CXX) $(CXXFLAGS) $(CFLAGS) -I. -I../../include $(EXTRA_C) $*.cc main.cc && ./a.out\n\ncustom-test-array: test-array\n\tgrep -q XXX1 out/test-array/array.c && \\\n\tgrep -q XXX2 out/test-array/array.c && \\\n\ttrue\n\ncustom-test-for: test-for\n\t! grep -q while out/test-for/for.c\n\n# libcrux tests\n\ncustom-test-libcrux-ml-kem-no-const: test/libcrux-ml-kem.llbc\n\tmkdir -p out/test-libcrux-ml-kem-no-const\n\t$(EURYDICE) --config test/libcrux-ml-kem/c.yaml -funroll-loops 16 \\\n\t  $< --keep-going --output out/test-libcrux-ml-kem-no-const --no-const\n\t$(SED) -i 's/  KaRaMeL version: .*//' out/test-libcrux-ml-kem-no-const/**/*.{c,h} # This changes on every commit\n\t$(SED) -i 's/  KaRaMeL invocation: .*//' out/test-libcrux-ml-kem-no-const/**/*.{c,h} # This changes between local and CI\n\ntest-libcrux-%: test/libcrux-%.llbc\n\tmkdir -p out/test-libcrux-$*\n\t$(EURYDICE) --config test/libcrux-$*/c.yaml -funroll-loops 16 \\\n\t  $< --keep-going --output out/test-libcrux-$*\n\t$(SED) -i 's/  KaRaMeL version: .*//' out/test-libcrux-$*/**/*.{c,h} # This changes on every commit\n\t$(SED) -i 's/  KaRaMeL invocation: .*//' out/test-libcrux-$*/**/*.{c,h} # This changes between local and CI\n\tcd test/libcrux-$*/ && cmake $(CMAKE_FLAGS) -B build -G \"Ninja Multi-Config\" && cmake --build build --config Debug\n\tcd test/libcrux-$*/ && ./build/Debug/$(subst -,_,$*)_test\n\tcd test/libcrux-$*/ && if [ -x ./build/Debug/sha3_test ]; then ./build/Debug/sha3_test; fi\n\n\n.PHONY: .FORCE\n\ntest/libcrux-%.llbc: .FORCE\n\t@# Use our committed `Cargo.lock` by default.\n\tcp libcrux-Cargo.lock $(LIBCRUX_HOME)/Cargo.lock\n\tRUSTFLAGS=\"-Cdebug-assertions=no --cfg eurydice\" $(CHARON) cargo --preset eurydice \\\n\t  --include 'libcrux_sha3' \\\n\t  --include 'libcrux_secrets' \\\n\t  --include=core::option::* \\\n\t  --rustc-arg='-Aunused' \\\n\t  --start-from libcrux_$(subst -,_,$*) --start-from libcrux_sha3 \\\n\t  --include 'core::num::*::BITS' --include 'core::num::*::MAX' \\\n\t  --dest-file $$PWD/$@ -- \\\n\t  --manifest-path $(LIBCRUX_HOME)/libcrux-$*/Cargo.toml \\\n\t  --target=x86_64-apple-darwin\n\t@# Commit the `Cargo.lock` so that the nix CI can use it\n\tcp $(LIBCRUX_HOME)/Cargo.lock libcrux-Cargo.lock\n\n.PRECIOUS: out/%\nout/%:\n\tmkdir -p $@\n\n.PHONY: check-dependencies\ncheck-dependencies: check-karamel check-charon check-libcrux\n# % can be \"charon\", \"karamel\" or \"libcrux\".\n.PHONY: check-%\ncheck-%:\n\t@bash ./scripts/check-dependency.sh \"$*\"\n.PHONY: setup-%\nsetup-%:\n\tbash ./scripts/check-dependency.sh \"$*\" --force\n\n.PHONY: nix-magic\nnix-magic:\n\tnix flake update karamel charon libcrux --extra-experimental-features nix-command --extra-experimental-features flakes\n\nnix-update-%:\n\tPROJECT_REMOTE=$(shell cd $* && git config --get remote.origin.url | cut -d ':' -f 2 | sed s/.git//g); \\\n\tPROJECT_REV=$(shell cd $* && git rev-parse head); \\\n\tnix flake update $* --override-input $* \"github:$$PROJECT_REMOTE/$$PROJECT_REV\"\n\n# Updates `flake.lock` with the latest commit from our local charon clone (the one that is symlinked into `lib/charon`).\n.PHONY: update-charon-pin\nupdate-charon-pin:\n\tnix-shell -p jq --run ./scripts/update-charon-pin.sh\n\nFORMAT_FILE=include/eurydice_glue.h\n\n.PHONY: format-check\nformat-check:\n\tFORMAT_FILE=$(FORMAT_FILE) ./scripts/format.sh check\n\n.PHONY: format-apply\nformat-apply:\n\tFORMAT_FILE=$(FORMAT_FILE) ./scripts/format.sh apply\n\n.PHONY: clean-llbc\nclean-llbc:\n\trm test/*.llbc || true\n\ndebug-ppx-%: lib/%\n\tdune describe pp $<\n"
  },
  {
    "path": "README.md",
    "content": "<p><div style=\"text-align: center\">\n<img src=\"static/poussin.jpg\"\n     alt=\"Orphée et Eurydice\" title=\"Orphée et Eurydice\"\n     style=\"\"/>\n<figcaption>\nNicolas Poussin, <i>Orphée et Eurydice</i>.\nMusée du Louvre.\n<a href=\"https://commons.wikimedia.org/wiki/File:Orph%C3%A9e_et_Eurydice_-_Nicolas_Poussin_-_Mus%C3%A9e_du_Louvre_Peintures_INV_7307.jpg\">Source</a>\n</figcaption>\n</div></p>\n\n# Eurydice\n\nEurydice is a compiler from Rust to C. The purpose of Eurydice is to provide a\nbackwards-compatibility story as the verification ecosystem gradually\ntransitions to Rust. New programs can be written in Rust, in turn making them\nsafer and easier to verify; but for legacy environments that cannot yet take a\ndependency on the Rust toolchain, Eurydice allows generating C code as a stopgap\nmeasure.\n\n## Guarantee\n\nEurydice's informal guarantee is: if the Rust program terminates without\npanicking, then the Eurydice-compiled C code computes the same result without\nundefined behavior. If the Rust program panics (e.g., on signed integer\noverflow, out-of-bounds array access), no guarantees are made about the behavior\nof the generated C code.\n\nCurrently (late 2023), the flagship example for Eurydice is Kyber, a\nPost-Quantum cryptographic algorithm authored and\nverified in Rust for the general public, and [compiled to C via\nEurydice](https://github.com/cryspen/hacl-packages/tree/7a7bfbb17d1d912bdb1a80e86a917e1eec8b6264/libcrux/src)\nfor Mozilla's NSS library.\n\nIn terms of software architecture, Eurydice consumes Rust programs via the\n[Charon](https://github.com/AeneasVerif/charon) infrastructure, then extracts\nRust to [KaRaMeL](https://github.com/FStarLang/karamel)'s internal AST via a\ntype-driven translation. Once in the KaRaMeL AST, 30+ nano-passes allow going\nfrom Rust down to C code. About half of these passes were already implemented\nfor KaRaMeL, the rest of the passes reuse the KaRaMeL infrastructure but were\nfreshly written for Eurydice.\n\nIf you want to contribute or ask questions, we strongly encourage you to join\nthe [Zulip](https://aeneas-verif.zulipchat.com/).\n\n# Install\n\nWe recommend using Nix to easily ensure you are running the right versions of the tools and\nlibraries. With nix, you can run:\n```bash\n$ nix run 'github:aeneasverif/eurydice#charon' -- [CHARON_OPTIONS]\n$ nix run 'github:aeneasverif/eurydice' -- [EURYDICE_OPTIONS] <llbc_file>\n```\n\nAlternatively, you can do a local setup as follows.\n\n```bash\n# Step 1: install OCaml environment. Follow instructions, reload your shell, and make sure \n# `eval $(opam env)` has been suitably added to your shell profile.\nsudo apt install opam cargo # or brew on OSX\nopam init\n\n# Step 2: clone eurydice\ngit clone https://github.com/AeneasVerif/eurydice\ncd eurydice\n\n# Step 3: install dependent projects\n# This will clone karamel, charon and libcrux. If you intend to also develop on one of these\n# projects, you can symlink your working copy (e.g. `ln -s ../my-charon charon`) instead.\n# Note: the invocation for karamel might fail, in which case you want to install all the packages\n# in the `depends` field of karamel.opam except fstar. At the time of writing, this means typing:\n# opam install ocamlfind batteries zarith stdint yojson ocamlbuild fileutils menhir pprint ulex process fix visitors wasm ppx_deriving ppx_deriving_yojson uucp\nmake setup-karamel\nmake setup-charon\nmake setup-libcrux\n\n# Step 4: ready!\nmake test\n```\n\n# Submitting a successful PR\n\nThe C output of the test suite is under version control, and your PR will fail CI if running `make\ntest` generates a diff for the C files in `out/`. The reason for this is that we need to assess the\nimpact of a PR on the shape of the generated C code. To make sure the output of the tests is\nup-to-date, you can run `make -B test` to force regeneration of the C files.\n\nOur CI will also check that your OCaml and C files have proper formatting -- the target `make\nformat-apply` reformats your source code to conform to our style guide. It might sometimes be\ndifficult to have the exact right versions of ocamlformat and clang-format -- in case your PR still\nfails, we recommend running `nix develop` followed by `make format-apply`.\n"
  },
  {
    "path": "bin/dune",
    "content": "(executable\n (public_name eurydice)\n (name main)\n (libraries eurydice terminal))\n\n(env\n (_\n  (flags\n   (:standard -w @1-2@3-7@8..12@14..21@23..29-30@31..38-39-40-41@43@57))))\n"
  },
  {
    "path": "bin/main.ml",
    "content": "let () =\n  let usage =\n    Printf.sprintf\n      {|Eurydice: from Rust to C\n\nUsage: %s [OPTIONS] FILES\n\nFILES are .llbc files produced by Charon. Eurydice will generate one C file per\nllbc file.\n\nSupported options:|}\n      Sys.argv.(0)\n  in\n  let module O = Eurydice.Options in\n  let debug s =\n    Krml.Options.debug_modules := Krml.KString.split_on_char ',' s @ !Krml.Options.debug_modules;\n    if List.mem \"backtrace\" !Krml.Options.debug_modules then\n      Krml.Options.backtrace := true\n  in\n  let funroll_loops = ref 16 in\n  let spec =\n    [\n      \"--log\", Arg.Set_string O.log_level, \" log level, use * for everything\";\n      \"--debug\", Arg.String debug, \" debug options, to be passed to krml\";\n      \"--output\", Arg.Set_string Krml.Options.tmpdir, \" output directory in which to write files\";\n      ( \"--header\",\n        Arg.Set_string Krml.Options.header,\n        \" path to a header file to be prepended to the generated C\" );\n      \"--config\", Arg.Set_string O.config, \" YAML configuration file\";\n      ( \"--keep-going\",\n        Arg.Set O.keep_going,\n        \" keep going even though extracting some definitions might fail\" );\n      \"--no-const\", Arg.Set O.no_const, \" do not introduce the const keyword for pointers\";\n      \"-fcomments\", Arg.Set O.comments, \" keep inline comments\";\n      \"-funroll-loops\", Arg.Set_int funroll_loops, \" unrool loops up to N\";\n      ( \"-fc++17-compat\",\n        Arg.Set Krml.Options.cxx17_compat,\n        \" instead of generating C11/C++20 code (default), generate C++17-only code\" );\n    ]\n  in\n  let spec = Arg.align spec in\n  let files = ref [] in\n  let fatal_error =\n    Printf.ksprintf (fun s ->\n        print_endline s;\n        exit 255)\n  in\n  let anon_fun f =\n    if Filename.check_suffix f \".llbc\" then\n      files := f :: !files\n    else\n      fatal_error \"Unknown file extension for %s\" f\n  in\n  begin\n    try Arg.parse spec anon_fun usage\n    with e ->\n      Printf.printf \"Error parsing command-line: %s\\n%s\\n\" (Printexc.get_backtrace ())\n        (Printexc.to_string e);\n      fatal_error \"Incorrect invocation, was: %s\\n\" (String.concat \"␣\" (Array.to_list Sys.argv))\n  end;\n\n  if !files = [] then\n    fatal_error \"%s\" (Arg.usage_string spec usage);\n\n  let terminal_width =\n    Terminal.Size.(\n      match get_dimensions () with\n      | Some d -> d.columns\n      | None -> 80)\n  in\n  let pfiles b files =\n    PPrint.(ToBuffer.pretty 0.95 terminal_width b (Krml.PrintAst.print_files files ^^ hardline))\n  in\n  let fail file line =\n    Printf.printf \"%s:%d exiting\\n\" file line;\n    exit 1\n  in\n\n  (* This is where the action happens *)\n  Eurydice.Logging.enable_logging !O.log_level;\n  (* Type applications are compiled as a regular external type. *)\n  Krml.(\n    Options.(\n      allow_tapps := true;\n      minimal := true;\n      curly_braces := true;\n      add_very_early_include := [ All, \"\\\"eurydice_glue.h\\\"\" ];\n      parentheses := true;\n      no_shadow := true;\n      extern_c := true;\n      cxx_compat := true;\n      unroll_loops := !funroll_loops;\n      static_header :=\n        [\n          Bundle.Prefix [ \"core\"; \"convert\" ];\n          Bundle.Prefix [ \"core\"; \"num\" ];\n          Bundle.Prefix [ \"Eurydice\"; \"Int128\" ];\n        ];\n      Warn.parse_warn_error (!warn_error ^ \"+8\"));\n    Monomorphization.NameGen.short_names := true;\n    Monomorphization.NameGen.distinguished := Eurydice.Cleanup3.distinguished_names;\n    AstToCStar.no_return_type_lids :=\n      [\n        [ \"Eurydice\" ], \"slice_index_shared\";\n        [ \"Eurydice\" ], \"slice_index_mut\";\n        [ \"Eurydice\" ], \"slice_len\";\n        [ \"Eurydice\" ], \"slice_copy\";\n        [ \"Eurydice\" ], \"array_eq\";\n      ]);\n\n  (* Some logic for more precisely tracking readonly functions, so as to remove\n     excessive uu__ variables. *)\n  let readonly_lids = Hashtbl.create 41 in\n  let readonly_map = Hashtbl.create 41 in\n  let fill_readonly_table files =\n    List.iter\n      (fun (_, decls) ->\n        List.iter\n          (function\n            | Krml.Ast.DFunction (_, _, _, _, _, name, _, body) ->\n                Hashtbl.add readonly_map name body\n            | _ -> ())\n          decls)\n      files\n  in\n\n  Krml.(\n    Helpers.is_readonly_builtin_lid_ :=\n      let is_readonly_pure_lid_ = !Helpers.is_readonly_builtin_lid_ in\n      fun lid t ->\n        let ret_t, _ = Helpers.flatten_arrow t in\n        is_readonly_pure_lid_ lid t\n        || (match lid with\n           | \"libcrux_intrinsics\" :: _, _ -> ret_t <> TUnit\n           | [ \"Eurydice\" ], \"vec_len\"\n           | [ \"Eurydice\" ], \"vec_index\"\n           | [ \"Eurydice\" ], \"slice_index_shared\"\n           | [ \"Eurydice\" ], \"slice_index_mut\"\n           | [ \"Eurydice\" ], \"slice_len\"\n           | [ \"Eurydice\" ], \"slice_to_ref_array\"\n           | [ \"Eurydice\" ], \"slice_to_ref_array2\"\n           | [ \"Eurydice\" ], \"slice_subslice_shared\"\n           | [ \"Eurydice\" ], \"slice_subslice_mut\"\n           | [ \"Eurydice\" ], \"slice_subslice_to_shared\"\n           | [ \"Eurydice\" ], \"slice_subslice_to_mut\"\n           | [ \"Eurydice\" ], \"slice_subslice_from_shared\"\n           | [ \"Eurydice\" ], \"slice_subslice_from_mut\"\n           | [ \"Eurydice\" ], \"array_to_slice_shared\"\n           | [ \"Eurydice\" ], \"array_to_slice_mut\"\n           | [ \"Eurydice\" ], \"array_to_subslice_shared\"\n           | [ \"Eurydice\" ], \"array_to_subslice_mut\"\n           | [ \"Eurydice\" ], \"array_repeat\"\n           | [ \"core\"; \"mem\" ], \"size_of\"\n           | \"core\" :: \"slice\" :: _, \"as_mut_ptr\"\n           | \"core\" :: \"num\" :: _, (\"rotate_left\" | \"from_le_bytes\" | \"wrapping_add\") -> true\n           | _ -> false)\n        || Hashtbl.mem readonly_lids lid\n        ||\n        match Hashtbl.find_opt readonly_map lid with\n        | Some body ->\n            let ro = Helpers.is_readonly_c_expression body in\n            if ro then\n              Hashtbl.add readonly_lids lid ();\n            ro\n        | _ -> false);\n\n  let files =\n    Eurydice.Builtin.files\n    @ [\n        Eurydice.PreCleanup.merge\n          (List.map\n             (fun filename ->\n               let llbc = Eurydice.LoadLlbc.load_file filename in\n               Eurydice.AstOfLlbc.file_of_crate llbc)\n             !files);\n      ]\n  in\n\n  if !O.no_const then\n    Printf.printf \"⚠️  Not using 'const' for pointer types\\n\";\n  Printf.printf \"1️⃣ LLBC ➡️  AST\\n\";\n  Eurydice.Logging.log \"Phase0\" \"%a\" pfiles files;\n  let files = Eurydice.PreCleanup.precleanup files in\n\n  Eurydice.Logging.log \"Phase1\" \"%a\" pfiles files;\n  let errors, files = Krml.Checker.check_everything ~warn:true files in\n  if errors then\n    fail __FILE__ __LINE__;\n\n  Printf.printf \"2️⃣ Cleanup\\n\";\n  let config =\n    if !O.config = \"\" then\n      None\n    else\n      Some (Eurydice.Bundles.parse_config (Eurydice.Bundles.load_config !O.config))\n  in\n  let files =\n    match config with\n    | None -> files\n    | Some config ->\n        let files = Eurydice.Bundles.bundle files config in\n        let files = Eurydice.Bundles.libraries files in\n        let files = Krml.Bundles.topological_sort files in\n        Krml.KPrint.bprintf \"File order after topological sort: %s\\n\"\n          (String.concat \", \" (List.map fst files));\n        files\n  in\n  let files = Eurydice.Cleanup1.cleanup files in\n  let files = Eurydice.Cleanup2.rewrite_signed_shifts files in\n\n  Eurydice.Logging.log \"Phase2\" \"%a\" pfiles files;\n  let errors, files = Krml.Checker.check_everything ~warn:true files in\n  if errors then\n    fail __FILE__ __LINE__;\n\n  Printf.printf \"3️⃣ Monomorphization, datatypes\\n\";\n  let files = Eurydice.Cleanup2.cosmetic#visit_files () files in\n  let files = Eurydice.Cleanup2.resugar_loops#visit_files () files in\n  let files = Eurydice.Cleanup1.remove_terminal_returns#visit_files true files in\n  let files = Eurydice.Cleanup1.remove_terminal_continues#visit_files false files in\n  Eurydice.Logging.log \"Phase2.1\" \"%a\" pfiles files;\n  (* Sanity check for the big rewriting above. *)\n  let errors, files = Krml.Checker.check_everything ~warn:true files in\n  if errors then\n    fail __FILE__ __LINE__;\n  Eurydice.Logging.log \"Phase2.11\" \"%a\" pfiles files;\n  let files = Eurydice.Cleanup2.improve_names files in\n  let files = Eurydice.Cleanup2.recognize_asserts#visit_files () files in\n  (* Temporary workaround until Aeneas supports nested loops *)\n  let files = Eurydice.Cleanup2.inline_loops#visit_files () files in\n  (* Following the krml order of phases here *)\n  let files = Krml.Inlining.inline_type_abbrevs files in\n  let files = Krml.Monomorphization.functions files in\n  Eurydice.Logging.log \"Phase2.12\" \"%a\" pfiles files;\n  let files = Krml.Simplify.optimize_lets files in\n  let files = Krml.DataTypes.simplify files in\n  (* Must happen now, before Monomorphization.datatypes, because otherwise\n     MonomorphizationState.state gets filled with lids that later on get eliminated on the basis\n     that they were empty structs to begin with, which would send Checker off the rails *)\n  let files = Krml.DataTypes.remove_empty_structs files in\n  let files = Krml.Monomorphization.datatypes files in\n  (* Cannot use remove_unit_buffers as it is technically incorrect *)\n  let tbl = Hashtbl.create 41 in\n  let files = (Krml.DataTypes.build_unit_field_table tbl)#visit_files () files in\n  let files = (Krml.DataTypes.remove_unit_fields tbl)#visit_files () files in\n  Eurydice.Logging.log \"Phase2.13\" \"%a\" pfiles files;\n  let files = Krml.Inlining.inline files in\n  let files =\n    match config with\n    | None -> files\n    | Some config -> (\n        let files = Eurydice.Bundles.reassign_monomorphizations files config in\n        Eurydice.Logging.log \"Phase2.15\" \"%a\" pfiles files;\n        try\n          let files = Krml.Bundles.topological_sort files in\n          files\n        with e ->\n          flush stdout;\n          flush stderr;\n          Krml.KPrint.bprintf \"Error trying to topologically sort files:\\n%s\\n\\n\"\n            (Printexc.to_string e);\n          Krml.KPrint.bprintf \"Consider passing --log Reassign to Eurydice\\n\";\n          Krml.KPrint.bprintf \"Internal AST before the error:\\n%a\\n\" pfiles files;\n          fail __FILE__ __LINE__)\n  in\n  Eurydice.Logging.log \"Phase2.2\" \"%a\" pfiles files;\n  (* Sanity check for the big rewriting above. *)\n  let errors, files = Krml.Checker.check_everything ~warn:true files in\n  if errors then\n    fail __FILE__ __LINE__;\n  let files = Krml.Inlining.drop_unused files in\n  let files = Eurydice.Cleanup2.remove_array_temporaries#visit_files () files in\n  Eurydice.Logging.log \"Phase2.25\" \"%a\" pfiles files;\n  let files = Eurydice.Cleanup2.remove_array_repeats#visit_files false files in\n  Eurydice.Logging.log \"Phase2.26\" \"%a\" pfiles files;\n  let ((map, _, _) as map3), files = Krml.DataTypes.everything files in\n  Eurydice.Cleanup2.fixup_monomorphization_map map;\n  let files = Eurydice.Cleanup2.remove_discriminant_reads map3 files in\n  Eurydice.Logging.log \"Phase2.3\" \"%a\" pfiles files;\n  let files = Eurydice.Cleanup2.remove_trivial_ite#visit_files () files in\n  Eurydice.Logging.log \"Phase2.4\" \"%a\" pfiles files;\n  let files = Eurydice.Cleanup2.remove_trivial_into#visit_files () files in\n  Eurydice.Logging.log \"Phase2.5\" \"%a\" pfiles files;\n  let files = Eurydice.Cleanup2.remove_literals files in\n  (* Eurydice does something more involved than krml and performs a conservative\n     approximation of functions that are known to be pure readonly (i.e.,\n     functions that do not write to memory). *)\n  fill_readonly_table files;\n  let files = Krml.Simplify.optimize_lets files in\n  Eurydice.Logging.log \"Phase2.55\" \"%a\" pfiles files;\n  let files = Eurydice.Cleanup2.remove_array_from_fn files in\n  Eurydice.Logging.log \"Phase2.6\" \"%a\" pfiles files;\n  (* remove_array_from_fn, above, creates further opportunities for removing unused functions. *)\n  let files = Krml.Inlining.drop_unused files in\n  let files = Eurydice.Cleanup2.remove_implicit_array_copies#visit_files () files in\n  (* Creates opportunities for removing unused variables *)\n  let files = Eurydice.Cleanup2.remove_assign_return#visit_files () files in\n  (* These two need to come before... *)\n  let files = Krml.Inlining.cross_call_analysis files in\n  let files = Krml.Simplify.remove_unused files in\n  Eurydice.Logging.log \"Phase2.7\" \"%a\" pfiles files;\n  (* This chunk which reuses key elements of simplify2 *)\n  let files = Eurydice.Cleanup2.check_addrof#visit_files () files in\n  let files = Krml.Simplify.sequence_to_let#visit_files () files in\n  let files = Eurydice.Cleanup2.hoist#visit_files [] files in\n  let files = Eurydice.Cleanup2.fixup_hoist#visit_files () files in\n  Eurydice.Logging.log \"Phase2.75\" \"%a\" pfiles files;\n  let files = Eurydice.Cleanup2.globalize_global_locals files in\n  Eurydice.Logging.log \"Phase2.8\" \"%a\" pfiles files;\n  let files = Eurydice.Cleanup2.reconstruct_for_loops#visit_files () files in\n  let files = Krml.Simplify.misc_cosmetic#visit_files () files in\n  let files = Krml.Simplify.let_to_sequence#visit_files () files in\n  Eurydice.Logging.log \"Phase2.9\" \"%a\" pfiles files;\n  let files = Eurydice.Cleanup2.float_comments files in\n  Eurydice.Logging.log \"Phase2.95\" \"%a\" pfiles files;\n  let files = Eurydice.Cleanup2.bonus_cleanups#visit_files [] files in\n  (* Macros stemming from globals -- FIXME why is this not Krml.AstToCStar.mk_macros_set? *)\n  let files, macros = Eurydice.Cleanup2.build_macros files in\n\n  Eurydice.Logging.log \"Phase3\" \"%a\" pfiles files;\n  (* debug \"checker\"; *)\n  let errors, files = Krml.Checker.check_everything ~warn:true files in\n  if errors then\n    fail __FILE__ __LINE__;\n\n  let scope_env = Krml.Simplify.allocate_c_env files in\n  Eurydice.Cleanup3.(also_skip_prefix_for_external_types scope_env)#visit_files () files;\n  let files = Eurydice.Cleanup3.decay_cg_externals#visit_files (scope_env, false) files in\n  let files = Eurydice.Cleanup3.remove_builtin_decls files in\n  Eurydice.Logging.log \"Phase3.1\" \"%a\" pfiles files;\n  let c_name_map = Krml.GlobalNames.mapping (fst scope_env) in\n\n  let open Krml in\n  let file_of_map = Bundle.mk_file_of files in\n  let deps = Bundles.direct_dependencies_with_internal files file_of_map in\n  let files =\n    List.map\n      (fun (f, ds) ->\n        let is_fine = function\n          | [ \"LowStar\"; \"Ignore\" ], \"ignore\" | \"Eurydice\" :: _, _ ->\n              (* | \"core\" :: _, _ -> *)\n              true\n          | _ -> false\n        in\n        ( f,\n          List.filter_map\n            (fun d ->\n              match d with\n              | Krml.Ast.DExternal (_, _, _, _, lid, t, _)\n                when Krml.Monomorphization.(\n                       (has_variables [ t ] || has_cg_array [ t ]) && not (is_fine lid)) ->\n                  KPrint.bprintf\n                    \"Warning: %a is a type/const-polymorphic assumed function, must be implemented \\\n                     with a macro, dropping it\\n\"\n                    Krml.PrintAst.Ops.plid lid;\n                  None\n              | _ -> Some d)\n            ds ))\n      files\n  in\n  Eurydice.Logging.log \"Phase3.2\" \"%a\" pfiles files;\n\n  (* The following phase reads the \"target\" parameter for each file, if any, from the config\n     and if set, then it adds the attribute `KRML_ATTRIBUTE_TARGET(target)` to each function\n     in the generated C file. This is used, in particular, to mark certain functions as only\n     to be compiled on target architectures like `avx2` *)\n  let files =\n    List.map\n      (fun (f, ds) ->\n        let open Eurydice.Bundles in\n        let target_attribute =\n          match config with\n          | None -> \"\"\n          | Some c -> (\n              match List.find_opt (fun (x : file) -> x.name = f) c with\n              | None -> \"\"\n              | Some f -> f.target)\n        in\n        ( f,\n          List.filter_map\n            (fun d ->\n              match d with\n              | Krml.Ast.DFunction (cc, fl, x, y, t, l, b, e) when target_attribute <> \"\" ->\n                  Some (Krml.Ast.DFunction (cc, fl @ [ Target target_attribute ], x, y, t, l, b, e))\n              | _ -> Some d)\n            ds ))\n      files\n  in\n\n  Eurydice.Logging.log \"Phase3.3\" \"%a\" pfiles files;\n  let files =\n    List.map\n      (fun (f, ds) ->\n        ( f,\n          List.filter\n            (fun d -> not (Krml.Idents.LidSet.mem (Krml.Ast.lid_of_decl d) Eurydice.Builtin.skip))\n            ds ))\n      files\n  in\n  let files = AstToCStar.mk_files files c_name_map Idents.LidSet.empty macros in\n\n  (* Uncomment to debug C* AST *)\n  (* List.iter *)\n  (*   (fun (f, p) -> *)\n  (*     print_endline f; *)\n  (*     print_endline (CStar.show_program p); *)\n  (*     print_endline \"\") *)\n  (*   files; *)\n  let headers = CStarToC11.mk_headers c_name_map files in\n  let deps = CStarToC11.drop_empty_headers deps headers in\n  let internal_headers =\n    Bundles.StringSet.of_list\n      (List.filter_map\n         (function\n           | name, C11.Internal _ -> Some name\n           | _ -> None)\n         headers)\n  in\n  let public_headers =\n    Bundles.StringSet.of_list\n      (List.filter_map\n         (function\n           | name, C11.Public _ -> Some name\n           | _ -> None)\n         headers)\n  in\n  let files = CStarToC11.mk_files c_name_map files in\n  let files = List.filter (fun (_, decls) -> List.length decls > 0) files in\n  Krml.Output.maybe_create_internal_dir headers;\n  Krml.Driver.fstar := \"dummy\";\n  ignore (Output.write_c files internal_headers deps);\n  ignore (Output.write_h headers public_headers deps);\n\n  Printf.printf \"✅ Done\\n\"\n"
  },
  {
    "path": "cremepat/Lex.ml",
    "content": "open Sedlexing\nopen Parse\n\nlet digit = [%sedlex.regexp? '0' .. '9']\nlet integer = [%sedlex.regexp? Plus digit]\nlet low_alpha = [%sedlex.regexp? 'a' .. 'z']\nlet up_alpha = [%sedlex.regexp? 'A' .. 'Z']\nlet anyident = [%sedlex.regexp? up_alpha | low_alpha | '_' | '-' | digit]\nlet lident = [%sedlex.regexp? low_alpha, Star anyident]\nlet uident = [%sedlex.regexp? up_alpha, Star anyident]\nlet uvar = [%sedlex.regexp? '?', Star anyident]\nlet uvarlist = [%sedlex.regexp? '?', Star anyident, '.', '.']\nlet locate _ tok = tok, Lexing.dummy_pos, Lexing.dummy_pos\n\nlet keywords =\n  [\n    \"match\", MATCH;\n    \"true\", TRUE;\n    \"break\", BREAK;\n    \"false\", FALSE;\n    \"while\", WHILE;\n    \"let\", LET;\n    \"abort\", ABORT;\n  ]\n\nlet lines = ref 1\nlet cur_line = ref 0\n\nlet rec token lexbuf =\n  match%sedlex lexbuf with\n  | integer ->\n      let l = Utf8.lexeme lexbuf in\n      locate lexbuf (INT (int_of_string l))\n  | uident ->\n      let l = Utf8.lexeme lexbuf in\n      locate lexbuf (UIDENT l)\n  | lident ->\n      let l = Utf8.lexeme lexbuf in\n      begin\n        try locate lexbuf (List.assoc l keywords) with Not_found -> locate lexbuf (LIDENT l)\n      end\n  | uvar ->\n      let l = Utf8.lexeme lexbuf in\n      let l = String.sub l 1 (String.length l - 1) in\n      locate lexbuf (UVAR l)\n  | uvarlist ->\n      let l = Utf8.lexeme lexbuf in\n      let l = String.sub l 1 (String.length l - 3) in\n      locate lexbuf (UVARLIST l)\n  | \"&\" -> locate lexbuf AMP\n  | \";\" -> locate lexbuf SEMI\n  | \"->\" -> locate lexbuf ARROW\n  | \",\" -> locate lexbuf COMMA\n  | \"=\" -> locate lexbuf EQUALS\n  | \"[#\" -> locate lexbuf LBRACKHASH\n  | \"[\" -> locate lexbuf LBRACK\n  | \"]\" -> locate lexbuf RBRACK\n  | \"<\" -> locate lexbuf LANGLE\n  | \">\" -> locate lexbuf RANGLE\n  | \"{\" -> locate lexbuf LCURLY\n  | \"}\" -> locate lexbuf RCURLY\n  | \"(#\" -> locate lexbuf LPARENHASH\n  | \"(\" -> locate lexbuf LPAREN\n  | \")\" -> locate lexbuf RPAREN\n  (* | \"_\" -> locate lexbuf UNDERSCORE *)\n  | \"::\" -> locate lexbuf COLONCOLON\n  | \":\" -> locate lexbuf COLON\n  | \"\\n\" ->\n      incr lines;\n      cur_line := fst (loc lexbuf);\n      token lexbuf\n  | eof -> locate lexbuf EOF\n  | white_space -> token lexbuf\n  | any ->\n      let l = Utf8.lexeme lexbuf in\n      failwith (Printf.sprintf \"unhandled token: %s, len=%d\" l (String.length l))\n  | _ -> assert false\n"
  },
  {
    "path": "cremepat/Parse.mly",
    "content": "%{\n  open ParseTree\n%}\n\n%token<int>     INT\n%token<string>  UIDENT LIDENT UVAR UVARLIST\n%token          EOF COMMA EQUALS LBRACK RBRACK LBRACKHASH LANGLE RANGLE LCURLY RCURLY\n%token          COLON COLONCOLON AMP LPAREN RPAREN LPARENHASH SEMI\n%token          MATCH TRUE FALSE LET WHILE BREAK ARROW ABORT\n\n%type <expr> expr\n%type <path_item> path_item\n%type <pat> pat\n%type <typ> typ\n%start <expr> fragment\n\n%%\n\n(* Identifiers *)\n\n%inline\nuident:\n| u = UIDENT\n  { u }\n\n%inline\nlident:\n| l = LIDENT\n  { l }\n\n%inline\nident:\n| s = LIDENT\n  { s }\n| s = UIDENT\n  { s }\n\n(* Paths *)\n\npath_item:\n| i = ident\n  { Name i }\n| p = UVAR\n  { if p = \"\" then Wild else Var p }\n| _p = UVARLIST\n  { failwith \"TODO\" }\n\n%inline\npath:\n| p = iseparated_twoplus_list(COLONCOLON, path_item)\n  { p }\n\n(* Helpers *)\n%inline iseparated_twoplus_list(separator, X):\n  x1 = X; separator; x2 = X\n    { [ x1; x2 ] }\n| x1 = X; separator; x2 = X; separator; xs = separated_nonempty_list(separator, X)\n    { x1 :: x2 :: xs }\n\n%inline\nwith_vars(X):\n| x = UVAR\n  { PatternVar (if x = \"\" then \"_\" ^ gensym () else x) }\n| x = UVARLIST\n  { ListPatternVar (if x = \"\" then \"_\" ^ gensym () else x) }\n| x = X\n  { Fixed x }\n\n%inline\nfixed(X):\n| x = X\n  { Fixed x }\n\n(* Types *)\n\npre_typ:\n| t = typ ts = delimited(LANGLE, separated_list(COMMA, typ), RANGLE)\n  { TApp (t, ts) }\n| p = path\n  { TQualified p }\n\ntyp:\n| t = with_vars(pre_typ)\n  { t }\n\n(* Patterns *)\n\npre_pat:\n| u = uident\n  { Cons (u, []) }\n| u = uident p = delimited(LPAREN, separated_list(COMMA, pat), RPAREN)\n  { Cons (u, p) }\n| u = uident p = pat\n  { Cons (u, [ p ]) }\n\npat:\n| t = with_vars(pre_pat)\n  { t }\n\n(* Expressions *)\n\nexpr:\n| e = fixed(pre_expr)\n  { e }\n| e = seq_expr\n  { e }\n\npre_expr:\n| LET b = lident EQUALS e1 = app_expr SEMI e2 = expr\n  { Let (b, e1, e2) }\n\nseq_expr:\n| e = fixed(pre_seq_expr)\n  { e }\n| e = app_expr\n  { e }\n\npre_seq_expr:\n| e1 = app_expr SEMI e2 = seq_expr\n  { match e2 with Fixed (Sequence e2) -> Sequence (e1 :: e2) | _ -> Sequence [ e1; e2 ] }\n\napp_expr:\n| e = fixed(pre_app_expr)\n  { e }\n| e = index_expr\n  { e }\n\npre_app_expr:\n| head = app_expr\n  cgs = ioption(delimited(LBRACKHASH, separated_list(COMMA, expr), RBRACK))\n  methods = ioption(delimited(LPARENHASH, separated_list(COMMA, expr), RPAREN))\n  ts = ioption(delimited(LANGLE, separated_list(COMMA, typ), RANGLE))\n  args = delimited(LPAREN, separated_list(COMMA, expr), RPAREN)\n  {\n    let cgs = Option.value ~default:[] cgs in\n    let methods = Option.value ~default:[] methods in\n    let ts = Option.value ~default:[] ts in\n    App { head; cgs; methods; ts; args }\n  }\n| AMP e = index_expr\n  { Addr e }\n\nindex_expr:\n| e = fixed(pre_index_expr)\n  { e }\n| e = atomic_expr\n  { e }\n\npre_index_expr:\n| e1 = index_expr e2 = delimited(LBRACK, expr, RBRACK)\n  { Index (e1, e2) }\n\natomic_expr:\n| e = with_vars(pre_atomic_expr)\n  { e }\n| e = delimited(LPAREN, expr, RPAREN)\n  { e }\n\npre_atomic_expr:\n| WHILE e1 = index_expr e2 = delimited(LCURLY, expr, RCURLY)\n  { While (e1, e2) }\n| MATCH e = index_expr bs = delimited(LCURLY, separated_list(COMMA, separated_pair(pat, ARROW, expr)), RCURLY)\n  { Match (e, bs) }\n| e = delimited(LCURLY, separated_nonempty_list(COMMA, separated_pair(lident, COLON, expr)), RCURLY)\n  { Record e }\n| i = INT \n  { Int i }\n| p = path\n  { Qualified p }\n| x = lident\n  { BoundVar x }\n| BREAK\n  { Break }\n| ABORT\n  { Abort }\n| FALSE\n  { Bool false }\n| TRUE\n  { Bool true }\n\n(* Entry point *)\nfragment:\n| e = expr EOF\n  { e }\n\n"
  },
  {
    "path": "cremepat/ParseTree.ml",
    "content": "(* Strictly a parse tree *)\ntype pre_expr =\n  (* Binding most loosely *)\n  | Let of string * expr * expr\n  | Sequence of expr list\n  | App of { head : expr; cgs : expr list; methods : expr list; ts : typ list; args : expr list }\n  | Addr of expr\n  | Index of expr * expr\n  (* Atomic -- we terminate matches and loops using braces, we are not barbarians. *)\n  | While of expr * expr\n  | Match of expr * branch list\n  | Record of (string * expr) list\n  | Int of int\n  | Qualified of path\n  | BoundVar of string\n  | Break\n  | Abort\n  | Bool of bool\n\nand expr = pre_expr with_vars\nand 'a with_vars = PatternVar of string | ListPatternVar of string | Fixed of 'a\nand path = path_item list\nand path_item = Name of string | Wild | Var of string\nand branch = pat * expr\nand pre_pat = Cons of string * pat list\nand pat = pre_pat with_vars\nand pre_typ = TQualified of path | TApp of typ * typ list\nand typ = pre_typ with_vars\n\nlet gensym =\n  let r = ref 0 in\n  fun () ->\n    incr r;\n    \"$x\" ^ string_of_int !r\n"
  },
  {
    "path": "cremepat/README.md",
    "content": "CREMEPAT: CREdible, Meta-Extensible PATterns\n--------------------------------------------\n\nWrite concrete syntax instead of 50 lines of deeply-embedded pattern matches. See lib/Cleanup2.ml\n"
  },
  {
    "path": "cremepat/cremepat.ml",
    "content": "module Terminal = struct\n  let mkcolor x = Printf.sprintf \"\\x1b[38;5;%dm\" x\n  let green = mkcolor 119\n  let red = mkcolor 203\n  let blue = mkcolor 81\n  let yellow = mkcolor 227\n  let orange = mkcolor 202\n  let underline = \"\\x1b[4m\"\n  let reset = \"\\x1b[0m\"\nend\n\nlet fail fmt =\n  let b = Buffer.create 256 in\n  Printf.kbprintf (fun b -> failwith (Buffer.contents b)) b fmt\n\nlet parse arg =\n  let the_parser = MenhirLib.Convert.Simplified.traditional2revised Parse.fragment in\n  let lexbuf = Sedlexing.Utf8.from_string arg in\n  try the_parser (fun _ -> Lex.token lexbuf) with\n  | (Sedlexing.MalFormed | Sedlexing.InvalidCodepoint _) as e ->\n      Printf.eprintf \"Lexing error in: %s\\n\" arg;\n      raise e\n  | Parse.Error as e ->\n      let start, end_ = Sedlexing.loc lexbuf in\n      let start = start - !Lex.cur_line in\n      let end_ = end_ - !Lex.cur_line in\n      let buf = Buffer.create 256 in\n      List.iteri\n        (fun i line ->\n          Buffer.add_string buf line;\n          Buffer.add_char buf '\\n';\n          if i + 1 = !Lex.lines then begin\n            Buffer.add_string buf Terminal.red;\n            for _j = 0 to start do\n              Buffer.add_char buf ' '\n            done;\n            for _j = start to end_ - 1 do\n              Buffer.add_char buf '^'\n            done;\n            Buffer.add_string buf Terminal.reset;\n            Buffer.add_char buf '\\n'\n          end)\n        (String.split_on_char '\\n' arg);\n      Printf.eprintf \"Parse error, line %d, characters %d-%d: %s\\n\" !Lex.lines start end_\n        (Buffer.contents buf);\n      raise e\n\nopen Ppxlib\n\n(* Environments for the compile-time compilation of parse trees to OCaml pattern ASTs *)\n\ntype env = string list\n\nlet empty = []\nlet push env x = x :: env\n\nlet find env x =\n  let exception Found of int in\n  try\n    List.iteri\n      (fun i x' ->\n        if x = x' then\n          raise (Found i))\n      env;\n    raise Not_found\n  with Found i -> i\n\n(* Helpers to build nodes *)\n\nlet lident ~loc x = { txt = Lident x; loc }\n\nlet rec ppat_list ~loc pats =\n  let open Ast_builder.Default in\n  List.fold_right\n    (fun pat acc -> ppat_construct ~loc (lident ~loc \"::\") (Some (ppat_tuple ~loc [ pat; acc ])))\n    pats\n    (ppat_construct ~loc (lident ~loc \"[]\") None)\n\n(* Variants for things that are not expressions (i.e. not 'a nodes) *)\n\nlet ppat_cons_many' ~loc cons args =\n  let open Ast_builder.Default in\n  ppat_construct ~loc (lident ~loc cons) (Some (ppat_tuple ~loc args))\n\nlet ppat_cons_one' ~loc cons arg =\n  let open Ast_builder.Default in\n  ppat_construct ~loc (lident ~loc cons) (Some arg)\n\nlet ppat_cons_zero' ~loc cons =\n  let open Ast_builder.Default in\n  ppat_construct ~loc (lident ~loc cons) None\n\nlet ppat_string ~loc s =\n  let open Ast_builder.Default in\n  ppat_constant ~loc (Pconst_string (s, loc, None))\n\nlet ppat_int ~loc s =\n  let open Ast_builder.Default in\n  ppat_constant ~loc (Pconst_integer (string_of_int s, None))\n\nlet ppat_bool ~loc s = ppat_cons_zero' ~loc (string_of_bool s)\n\n(* Variants that produce the { node = ...; _ } part automatically *)\n\nlet ppat_node ~loc pat =\n  let open Ast_builder.Default in\n  ppat_record ~loc [ lident ~loc \"node\", pat ] Open\n\nlet ppat_cons_many ~loc cons args = ppat_node ~loc (ppat_cons_many' ~loc cons args)\nlet ppat_cons_one ~loc cons arg = ppat_node ~loc (ppat_cons_one' ~loc cons arg)\nlet ppat_cons_zero ~loc cons = ppat_node ~loc (ppat_cons_zero' ~loc cons)\n\nlet compile_parse_tree (env : env) loc\n    (pt : ParseTree.expr) (* : Astlib.Ast_503.Parsetree.pattern *) =\n  let open Ast_builder.Default in\n  (* Helpers *)\n\n  (* Compiling a node where only non-list unification variables may appear *)\n  let rec compile_with_var : 'a. env -> 'a ParseTree.with_vars -> (env -> 'a -> _) -> _ =\n   fun env pt compile_pre ->\n    match pt with\n    | Fixed e -> compile_pre env e\n    | PatternVar txt -> ppat_var ~loc { txt; loc }\n    | ListPatternVar s -> fail \"[cremepat]: list pattern ?%s.. appears in unexpected position\" s\n  (* Special treatment for lists of 'a that are allowed to contain list unification variables --\n     recurse into one of the specialized variants of this for AST positions that admit lists. Note\n     that the syntax does not enforce that list unification variables only appear where allowed --\n     there is some implicit typing depending on whether you recurse via compile_with_var or\n     compile_list_pattern. *)\n  and compile_list_pattern : 'a. env -> 'a ParseTree.with_vars list -> (env -> 'a -> _) -> _ =\n   fun env pts compile_pre ->\n    match pts with\n    | [] -> ppat_construct ~loc (lident ~loc \"[]\") None\n    | ListPatternVar txt :: [] -> ppat_var ~loc { txt; loc }\n    | ListPatternVar s :: _ ->\n        fail \"[cremepat]: list pattern ?%s.. should only appear in tail position\" s\n    | PatternVar txt :: pts ->\n        ppat_construct ~loc (lident ~loc \"::\")\n          (Some\n             (ppat_tuple ~loc\n                [ ppat_var ~loc { txt; loc }; compile_list_pattern env pts compile_pre ]))\n    | Fixed pt :: pts ->\n        ppat_construct ~loc (lident ~loc \"::\")\n          (Some (ppat_tuple ~loc [ compile_pre env pt; compile_list_pattern env pts compile_pre ]))\n  and compile env pt = compile_with_var env pt compile_pre_expr\n  and compile_expr_list_pattern env pt = compile_list_pattern env pt compile_pre_expr\n  and compile_pre_expr env pt =\n    match pt with\n    | ParseTree.Let (b, e1, e2) ->\n        let p1 = compile env e1 in\n        let env = push env b in\n        let p2 = compile env e2 in\n        (* ELet (_, p1, p2) *)\n        ppat_cons_many ~loc \"ELet\" [ ppat_any ~loc; p1; p2 ]\n    | Sequence ps -> ppat_cons_one ~loc \"ESequence\" (compile_expr_list_pattern env ps)\n    | App { head; cgs; methods; ts; args } ->\n        (* EApp (ETApp (e, ts), es) *)\n        ppat_cons_many ~loc \"EApp\"\n          [\n            ppat_cons_many ~loc \"ETApp\"\n              [\n                compile env head;\n                compile_expr_list_pattern env cgs;\n                compile_expr_list_pattern env methods;\n                compile_typ_list_pattern env ts;\n              ];\n            ppat_list ~loc (List.map (compile env) args);\n          ]\n    | Addr e -> ppat_cons_one ~loc \"EAddrOf\" (compile env e)\n    | Index (e1, e2) ->\n        let p1 = compile env e1 in\n        let p2 = compile env e2 in\n        ppat_cons_many ~loc \"EBufRead\" [ p1; p2 ]\n    | While (e1, e2) ->\n        let p1 = compile env e1 in\n        let p2 = compile env e2 in\n        ppat_cons_many ~loc \"EWhile\" [ p1; p2 ]\n    | Match (e, bs) ->\n        let e = compile env e in\n        ppat_cons_many ~loc \"EMatch\"\n          [\n            ppat_any ~loc;\n            (* no syntax to match on match flavor *)\n            e;\n            ppat_list ~loc\n              (List.map\n                 (fun (p, e) ->\n                   let p = compile_pat env p in\n                   let e = compile env e in\n                   ppat_tuple ~loc\n                     [ ppat_any ~loc; (* no syntax to match on binders in patterns *) p; e ])\n                 bs);\n          ]\n    | Record es ->\n        ppat_cons_one ~loc \"EFlat\"\n          (ppat_list ~loc\n             (List.map\n                (fun (f, e) ->\n                  ppat_tuple ~loc [ ppat_cons_one' ~loc \"Some\" (ppat_string ~loc f); compile env e ])\n                es))\n    | Int i ->\n        ppat_cons_many ~loc \"EConstant\"\n          [\n            ppat_any ~loc;\n            (* no syntax to match on width of constants *)\n            ppat_string ~loc (string_of_int i);\n          ]\n    | Qualified path -> ppat_cons_one ~loc \"EQualified\" (compile_path env path)\n    | BoundVar s ->\n        let i = find env s in\n        ppat_cons_one ~loc \"EBound\" (ppat_int ~loc i)\n    | Break -> ppat_cons_zero ~loc \"EBreak\"\n    | Bool b -> ppat_cons_one ~loc \"EBool\" (ppat_bool ~loc b)\n    | Abort -> ppat_cons_many ~loc \"EAbort\" [ ppat_any ~loc; ppat_any ~loc ]\n  (* Paths *)\n  and compile_path env (pt : ParseTree.path) =\n    let m, n =\n      match List.rev pt with\n      | n :: m -> List.rev m, n\n      | _ -> failwith \"impossible\"\n    in\n    ppat_tuple ~loc [ ppat_list ~loc (List.map (compile_path_item env) m); compile_path_item env n ]\n  and compile_path_item _env (pt : ParseTree.path_item) =\n    match pt with\n    | Wild -> ppat_any ~loc\n    | Name s -> ppat_string ~loc s\n    | Var txt -> ppat_var ~loc { txt; loc }\n  (* Types *)\n  and _compile_typ env pt = compile_with_var env pt compile_pre_typ\n  and compile_typ_list_pattern env (es : ParseTree.typ list) =\n    compile_list_pattern env es compile_pre_typ\n  and compile_pre_typ env (pt : ParseTree.pre_typ) =\n    match pt with\n    | TQualified path -> ppat_cons_one' ~loc \"TQualified\" (compile_path env path)\n    | TApp (Fixed (TQualified p), ts) ->\n        ppat_cons_many' ~loc \"TApp\" [ compile_path env p; compile_typ_list_pattern env ts ]\n    | TApp (PatternVar p, ts) ->\n        ppat_cons_many' ~loc \"TApp\"\n          [ ppat_var ~loc { txt = p; loc }; compile_typ_list_pattern env ts ]\n    | TApp (_, _) -> failwith \"incorrect type application left-hand side\"\n  (* Patterns *)\n  and compile_pat env pt = compile_with_var env pt compile_pre_pat\n  and compile_pat_list_pattern env (es : ParseTree.pat list) =\n    compile_list_pattern env es compile_pre_pat\n  and compile_pre_pat env (pt : ParseTree.pre_pat) =\n    match pt with\n    | Cons (cons, ps) ->\n        ppat_cons_many ~loc \"PCons\" [ ppat_string ~loc cons; compile_pat_list_pattern env ps ]\n  in\n\n  compile env pt\n\nlet expand ~ctxt (payload : string) =\n  let pt = parse payload in\n  let loc = Expansion_context.Extension.extension_point_loc ctxt in\n  compile_parse_tree empty loc pt\n\nlet my_extension =\n  Extension.V3.declare \"cremepat\" Pattern Ast_pattern.(single_expr_payload (estring __)) expand\n\nlet rule = Ppxlib.Context_free.Rule.extension my_extension\nlet () = Driver.register_transformation ~rules:[ rule ] \"cremepat\"\n"
  },
  {
    "path": "cremepat/dune",
    "content": "(library\n (name cremepat)\n (kind ppx_rewriter)\n (libraries ppxlib menhirLib)\n (preprocess\n  (pps sedlex.ppx))\n (flags\n  (:standard\n   -warn-error\n   -A\n   -w\n   @1-2@3-7@8..12@14..21@23..29-30@31..38-39-40-41@43@57)))\n\n(menhir\n (modules Parse))\n\n; (flags --trace))\n"
  },
  {
    "path": "dune",
    "content": "(data_only_dirs charon karamel libcrux)\n"
  },
  {
    "path": "dune-project",
    "content": "(lang dune 3.13)\n\n(name eurydice)\n\n(generate_opam_files true)\n\n(source\n (github AeneasVerif/eurydice))\n\n(authors \"Son Ho\" \"Jonathan Protzenko\")\n\n(maintainers \"Son Ho\" \"Jonathan Protzenko\")\n\n(license Apache-2.0)\n\n(package\n (name eurydice)\n (synopsis \"A Rust to C translator\")\n (description \"Eurydice builds upon Charon to take existing Rust code and\n              translate it to C\")\n (depends\n  ocaml\n  dune\n  yaml\n  (terminal (>= 0.4.0))\n )\n)\n\n(using menhir 3.0)\n"
  },
  {
    "path": "eurydice.opam",
    "content": "# This file is generated by dune, edit dune-project instead\nopam-version: \"2.0\"\nsynopsis: \"A Rust to C translator\"\ndescription: \"\"\"\nEurydice builds upon Charon to take existing Rust code and\n              translate it to C\"\"\"\nmaintainer: [\"Son Ho\" \"Jonathan Protzenko\"]\nauthors: [\"Son Ho\" \"Jonathan Protzenko\"]\nlicense: \"Apache-2.0\"\nhomepage: \"https://github.com/AeneasVerif/eurydice\"\nbug-reports: \"https://github.com/AeneasVerif/eurydice/issues\"\ndepends: [\n  \"ocaml\"\n  \"dune\" {>= \"3.13\"}\n  \"yaml\"\n  \"terminal\" {>= \"0.4.0\"}\n  \"odoc\" {with-doc}\n]\nbuild: [\n  [\"dune\" \"subst\"] {dev}\n  [\n    \"dune\"\n    \"build\"\n    \"-p\"\n    name\n    \"-j\"\n    jobs\n    \"@install\"\n    \"@runtest\" {with-test}\n    \"@doc\" {with-doc}\n  ]\n]\ndev-repo: \"git+https://github.com/AeneasVerif/eurydice.git\"\n"
  },
  {
    "path": "flake.nix",
    "content": "{\n  inputs = {\n    nixpkgs.follows = \"charon/nixpkgs\";\n    flake-utils.follows = \"karamel/flake-utils\";\n    karamel.url = \"github:FStarLang/karamel\";\n    karamel.inputs.nixpkgs.follows = \"nixpkgs\";\n\n    charon.url = \"github:AeneasVerif/charon\";\n    crane.follows = \"charon/crane\";\n\n    libcrux.url = \"github:cryspen/libcrux\";\n    googletest.follows = \"libcrux/googletest\";\n    benchmark.follows = \"libcrux/benchmark\";\n    json.follows = \"libcrux/json\";\n  };\n  outputs =\n    { self\n    , flake-utils\n    , nixpkgs\n    , ...\n    } @ inputs:\n    flake-utils.lib.eachDefaultSystem (system:\n    let\n      pkgs = import nixpkgs { inherit system; };\n\n      karamel = inputs.karamel.packages.${system}.default.override {\n        ocamlPackages = pkgs.ocamlPackages;\n      };\n      krml = karamel.passthru.lib;\n\n      charon-packages = inputs.charon.packages.${system};\n      charon-ml = charon-packages.charon-ml.override {\n        ocamlPackages = pkgs.ocamlPackages;\n      };\n      charon = charon-packages.default;\n      craneLib = (inputs.crane.mkLib pkgs).overrideToolchain charon-packages.rustToolchain;\n\n      package =\n        { ocamlPackages\n        , removeReferencesTo\n        , clangStdenv\n        , symlinks\n        , version\n        , which\n        , z3\n        , cmake\n        , git\n        , mold-wrapped\n        , ninja\n        , gnugrep\n        , charon\n        , charon-ml\n        , krml\n        , symlinkJoin\n        , clang\n        , craneLib\n        }:\n        let\n          eurydice = ocamlPackages.buildDunePackage {\n            pname = \"eurydice\";\n            inherit version;\n\n            src = ./.;\n\n            nativeBuildInputs = [ gnugrep ] ++ (with ocamlPackages; [ menhir ]);\n\n            propagatedBuildInputs = [ krml charon-ml ocamlPackages.terminal ocamlPackages.yaml ] ++ (with ocamlPackages; [ menhirLib ]);\n\n            postInstall = ''\n              ln -s ${charon}/bin/charon $out/bin/charon\n            '';\n\n            passthru = {\n              tests = clangStdenv.mkDerivation rec {\n                name = \"tests\";\n                src = ./.;\n                IN_CI = 1; # Tell the `check-dependency` script to not check for charon/karamel commit hashes.\n                KRML_HOME = karamel.src;\n                EURYDICE = \"${eurydice}/bin/eurydice\";\n                CHARON = \"${charon}/bin/charon\";\n                CMAKE_FLAGS = [\n                  \"-DFETCHCONTENT_SOURCE_DIR_GOOGLETEST=${inputs.googletest}\"\n                  \"-DFETCHCONTENT_SOURCE_DIR_BENCHMARK=${inputs.benchmark}\"\n                  \"-DFETCHCONTENT_SOURCE_DIR_JSON=${inputs.json}\"\n                  \"-DFETCHCONTENT_FULLY_DISCONNECTED=ON\"\n                ];\n\n                # Pre-build the cargo dependencies; required for `cargo` to\n                # work inside nix since nix builders don't have network\n                # access.\n                cargoVendorDir = craneLib.vendorCargoDeps { cargoLock = ./libcrux-Cargo.lock; };\n                cargoArtifacts = craneLib.buildDepsOnly {\n                  src = inputs.libcrux.sourceInfo.outPath;\n                  inherit cargoVendorDir;\n                  # Only build the libcrux-ml-kem package.\n                  cargoExtraArgs = \"-p libcrux-ml-kem\";\n                  # Run `cargo check` too, to make sure we include the dev-dependencies.\n                  doCheck = true;\n                };\n\n                nativeBuildInputs = [\n                  cmake\n                  git\n                  mold-wrapped\n                  ninja\n                  # Crane hooks that will use the\n                  # `cargoArtifacts`/`cargoVendorDir` to tell cargo where to\n                  # find its dependencies.\n                  craneLib.configureCargoCommonVarsHook\n                  craneLib.configureCargoVendoredDepsHook\n                  craneLib.inheritCargoArtifactsHook\n                  pkgs.zstd # For the inheritCargoArtifactsHook hooks.\n                ];\n                buildInputs = [ eurydice ];\n\n                dontUseCmakeConfigure = true;\n                buildPhase = ''\n                  # Prepare the libcrux directory.\n                  cp --no-preserve=mode,ownership -rf ${inputs.libcrux.sourceInfo.outPath} libcrux\n                  # Symlink karamel so we find its headers.\n                  ln -s $KRML_HOME karamel\n\n                  # Run the tests\n                  make -o all test\n\n                  # Remove generated files that we don't want to compare.\n                  shopt -s globstar\n                  rm -f out/**/a.out\n                  # Check that there are no differences between the generated\n                  # outputs and the committed outputs.\n                  if diff -rq \"${./out}\" out; then\n                    echo \"Ok: the regenerated files are the same as the checked out files\"\n                  else\n                    echo \"Error: the regenerated files differ from the checked out files\"\n                    diff -ru \"${./out}\" out\n                    exit 1\n                  fi\n                '';\n                installPhase = ''touch $out'';\n              };\n            };\n          };\n        in\n        eurydice;\n    in\n    rec {\n      packages = {\n        default = pkgs.callPackage package {\n          inherit charon charon-ml krml craneLib;\n          version = self.rev or \"dirty\";\n        };\n        inherit charon karamel;\n      };\n      checks = {\n        default = packages.default.tests;\n        format = pkgs.runCommand \"format-check\"\n          {\n            src = ./.;\n            nativeBuildInputs = [\n              pkgs.bash\n              pkgs.gnumake\n              pkgs.llvmPackages_18.clang-tools # For clang-format\n              pkgs.ocamlPackages.ocaml\n              pkgs.ocamlPackages.ocamlformat_0_27_0\n              pkgs.ocamlPackages.dune_3\n            ];\n          } ''\n          cp -r $src src\n          chmod u+w src\n          cd src\n          bash ./scripts/format.sh check\n          touch $out\n        '';\n      };\n      devShells.ci = pkgs.mkShell { packages = [ pkgs.jq ]; };\n      devShells.default = (pkgs.mkShell.override { stdenv = pkgs.clangStdenv; }) {\n        OCAMLRUNPARAM = \"b\"; # Get backtrace on exception\n        packages = [\n          pkgs.jq\n          pkgs.llvmPackages_18.clang-tools # For clang-format\n          pkgs.ocamlPackages.ocaml\n          pkgs.ocamlPackages.ocamlformat_0_27_0\n          pkgs.ocamlPackages.menhir\n          # ocaml-lsp's version must match the ocaml version used. Pinning\n          # this here to save me a headache.\n          pkgs.ocamlPackages.ocaml-lsp\n          pkgs.rustup\n        ];\n        buildInputs = [ charon.buildInputs ];\n        nativeBuildInputs = [ charon.nativeBuildInputs pkgs.clang ];\n\n        inputsFrom = [\n          packages.default\n          packages.default.tests\n          charon-ml\n        ];\n      };\n    });\n}\n"
  },
  {
    "path": "include/eurydice_glue.h",
    "content": "#pragma once\n\n#include <inttypes.h>\n#include <stdbool.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#ifdef _MSC_VER\n// For __popcnt\n#include <intrin.h>\n#endif\n\n#include \"krml/internal/target.h\"\n#include \"krml/lowstar_endianness.h\"\n\n// C++ HELPERS\n\n#if defined(__cplusplus)\n\n#ifndef KRML_HOST_EPRINTF\n#define KRML_HOST_EPRINTF(...) fprintf(stderr, __VA_ARGS__)\n#endif\n\n#include <utility>\n\n#ifndef __cpp_lib_type_identity\ntemplate <class T> struct type_identity {\n  using type = T;\n};\n\ntemplate <class T> using type_identity_t = typename type_identity<T>::type;\n#else\nusing std::type_identity_t;\n#endif\n\n#define KRML_UNION_CONSTRUCTOR(T)                                              \\\n  template <typename V>                                                        \\\n  constexpr T(int t, V U::*m, type_identity_t<V> v) : tag(t) {                 \\\n    val.*m = std::move(v);                                                     \\\n  }                                                                            \\\n  T() = default;\n\n#endif\n\n// GENERAL-PURPOSE STUFF\n\n#define LowStar_Ignore_ignore(e, t, _ret_t) ((void)e)\n\n#define EURYDICE_ASSERT(test, msg)                                             \\\n  do {                                                                         \\\n    if (!(test)) {                                                             \\\n      fprintf(stderr, \"assertion \\\"%s\\\" failed: file \\\"%s\\\", line %d\\n\", msg,  \\\n              __FILE__, __LINE__);                                             \\\n      exit(255);                                                               \\\n    }                                                                          \\\n  } while (0)\n\n// SIZEOF, ALIGNOF\n\n#define Eurydice_sizeof(t) sizeof(t)\n\n#define Eurydice_alignof(t) alignof(t)\n\n// SLICES, ARRAYS, ETC.\n\n// For convenience, we give these common slice types, below, a distinguished\n// status and rather than emit them in the client code, we skip their\n// code-generation in Cleanup3.ml and write them by hand here. This makes it\n// easy to write interop code that brings those definitions in scope.\n\n// &[u8]\ntypedef struct Eurydice_borrow_slice_u8_s {\n  const uint8_t *ptr;\n  size_t meta;\n} Eurydice_borrow_slice_u8;\n\n// &[u16]\ntypedef struct Eurydice_borrow_slice_i16_s {\n  const int16_t *ptr;\n  size_t meta;\n} Eurydice_borrow_slice_i16;\n\n// &mut [u8]\ntypedef struct Eurydice_mut_borrow_slice_u8_s {\n  uint8_t *ptr;\n  size_t meta;\n} Eurydice_mut_borrow_slice_u8;\n\n// &mut [u16]\ntypedef struct Eurydice_mut_borrow_slice_i16_s {\n  int16_t *ptr;\n  size_t meta;\n} Eurydice_mut_borrow_slice_i16;\n\n#if defined(__cplusplus)\n#define KRML_CLITERAL(type) type\n#else\n#define KRML_CLITERAL(type) (type)\n#endif\n\n#if defined(__cplusplus) && defined(__cpp_designated_initializers) ||          \\\n    !(defined(__cplusplus))\n#define EURYDICE_CFIELD(X) X\n#else\n#define EURYDICE_CFIELD(X)\n#endif\n\n#define Eurydice_array_repeat(dst, len, init, t)                               \\\n  ERROR \"should've been desugared\"\n\n// Copy a slice with memcopy\n#define Eurydice_slice_copy(dst, src, t)                                       \\\n  memcpy(dst.ptr, src.ptr, dst.meta * sizeof(t))\n\n#define core_array___T__N___as_slice(len_, ptr_, t, ret_t)                     \\\n  (KRML_CLITERAL(ret_t){EURYDICE_CFIELD(.ptr =)(ptr_)->data,                   \\\n                        EURYDICE_CFIELD(.meta =) len_})\n\n#define core_array__core__clone__Clone_for__T__N___clone(len, src, elem_type,  \\\n                                                         _ret_t)               \\\n  (*(src))\n#define TryFromSliceError uint8_t\n#define core_array_TryFromSliceError uint8_t\n\n// Distinguished support for some PartialEq trait implementations\n//\n// core::cmp::PartialEq<@Array<U, N>> for @Array<T, N>\n#define Eurydice_array_eq(sz, a1, a2, t)                                       \\\n  (memcmp((a1)->data, (a2)->data, sz * sizeof(t)) == 0)\n// core::cmp::PartialEq<&0 (@Slice<U>)> for @Array<T, N>\n#define Eurydice_array_eq_slice_shared(sz, a1, s2, t, _)                       \\\n  (memcmp((a1)->data, (s2)->ptr, sz * sizeof(t)) == 0)\n#define Eurydice_array_eq_slice_mut(sz, a1, s2, t, _)                          \\\n  Eurydice_array_eq_slice_shared(sz, a1, s2, t, _)\n\n// DEPRECATED -- should no longer be generated\n#define core_array_equality__core__cmp__PartialEq__Array_U__N___for__Array_T__N___eq( \\\n    sz, a1, a2, t, _, _ret_t)                                                         \\\n  Eurydice_array_eq(sz, a1, a2, t)\n#define core_array_equality__core__cmp__PartialEq__0___Slice_U____for__Array_T__N___eq( \\\n    sz, a1, a2, t, _, _ret_t)                                                           \\\n  Eurydice_array_eq(sz, a1, ((a2)->ptr), t)\n#define core_cmp_impls__core__cmp__PartialEq__0_mut__B___for__1_mut__A___eq(   \\\n    _m0, _m1, src1, src2, _0, _1, T)                                           \\\n  Eurydice_slice_eq(src1, src2, _, _, T, _)\n\n#define Eurydice_slice_split_at(slice, mid, element_type, ret_t)               \\\n  KRML_CLITERAL(ret_t) {                                                       \\\n    EURYDICE_CFIELD(.fst =){EURYDICE_CFIELD(.ptr =)((slice).ptr),              \\\n                            EURYDICE_CFIELD(.meta =) mid},                     \\\n        EURYDICE_CFIELD(.snd =) {                                              \\\n      EURYDICE_CFIELD(.ptr =)                                                  \\\n      ((slice).ptr + mid), EURYDICE_CFIELD(.meta =)((slice).meta - mid)        \\\n    }                                                                          \\\n  }\n\n#define Eurydice_slice_split_at_mut(slice, mid, element_type, ret_t)           \\\n  KRML_CLITERAL(ret_t) {                                                       \\\n    EURYDICE_CFIELD(.fst =){EURYDICE_CFIELD(.ptr =)((slice).ptr),              \\\n                            EURYDICE_CFIELD(.meta =) mid},                     \\\n        EURYDICE_CFIELD(.snd =) {                                              \\\n      EURYDICE_CFIELD(.ptr =)                                                  \\\n      ((slice).ptr + mid), EURYDICE_CFIELD(.meta =)((slice).meta - mid)        \\\n    }                                                                          \\\n  }\n\n// Conversion of slice to an array, rewritten (by Eurydice) to name the\n// destination array, since arrays are not values in C.\n// N.B.: see note in karamel/lib/Inlining.ml if you change this.\n\n#define Eurydice_slice_to_ref_array2(len_, src, arr_ptr, t_ptr, t_arr, t_err,  \\\n                                     t_res)                                    \\\n  (src.meta >= len_                                                            \\\n       ? ((t_res){.tag = core_result_Ok, .val = {.case_Ok = arr_ptr}})         \\\n       : ((t_res){.tag = core_result_Err, .val = {.case_Err = 0}}))\n\n// CORE STUFF (conversions, endianness, ...)\n\n// We slap extern \"C\" on declarations that intend to implement a prototype\n// generated by Eurydice, because Eurydice prototypes are always emitted within\n// an extern \"C\" block, UNLESS you use -fcxx17-compat, in which case, you must\n// pass -DKRML_CXX17_COMPAT=\"\" to your C++ compiler.\n#if defined(__cplusplus) && !defined(KRML_CXX17_COMPAT)\nextern \"C\" {\n#endif\n\n#define core_hint_black_box(X, _0, _1) (X)\n\n// [ u8; 2 ]\ntypedef struct Eurydice_array_u8x2_s {\n  uint8_t data[2];\n} Eurydice_array_u8x2;\n\n// [ u8; 4 ]\ntypedef struct Eurydice_array_u8x4_s {\n  uint8_t data[4];\n} Eurydice_array_u8x4;\n\n// [ u8; 8 ]\ntypedef struct Eurydice_array_u8x8_s {\n  uint8_t data[8];\n} Eurydice_array_u8x8;\n\nstatic inline uint16_t core_num__u16__from_le_bytes(Eurydice_array_u8x2 buf) {\n  return load16_le(buf.data);\n}\n\nstatic inline Eurydice_array_u8x4 core_num__u32__to_be_bytes(uint32_t src) {\n  // TODO: why not store32_be?\n  Eurydice_array_u8x4 a;\n  uint32_t x = htobe32(src);\n  memcpy(a.data, &x, 4);\n  return a;\n}\n\nstatic inline Eurydice_array_u8x4 core_num__u32__to_le_bytes(uint32_t src) {\n  Eurydice_array_u8x4 a;\n  store32_le(a.data, src);\n  return a;\n}\n\nstatic inline uint32_t core_num__u32__from_le_bytes(Eurydice_array_u8x4 buf) {\n  return load32_le(buf.data);\n}\n\nstatic inline Eurydice_array_u8x8 core_num__u64__to_le_bytes(uint64_t v) {\n  Eurydice_array_u8x8 a;\n  store64_le(a.data, v);\n  return a;\n}\n\nstatic inline uint64_t core_num__u64__from_le_bytes(Eurydice_array_u8x8 buf) {\n  return load64_le(buf.data);\n}\n\nstatic inline int64_t\ncore_convert_num__core__convert__From_i32__for_i64__from(int32_t x) {\n  return x;\n}\n\nstatic inline uint64_t\ncore_convert_num__core__convert__From_u8__for_u64__from(uint8_t x) {\n  return x;\n}\n\nstatic inline uint64_t\ncore_convert_num__core__convert__From_u16__for_u64__from(uint16_t x) {\n  return x;\n}\n\nstatic inline size_t\ncore_convert_num__core__convert__From_u16__for_usize__from(uint16_t x) {\n  return x;\n}\n\nstatic inline uint32_t core_num__u8__count_ones(uint8_t x0) {\n#ifdef _MSC_VER\n  return __popcnt(x0);\n#else\n  return __builtin_popcount(x0);\n#endif\n}\n\nstatic inline uint32_t core_num__u32__count_ones(uint32_t x0) {\n#ifdef _MSC_VER\n  return __popcnt(x0);\n#else\n  return __builtin_popcount(x0);\n#endif\n}\n\nstatic inline uint32_t core_num__i32__count_ones(int32_t x0) {\n#ifdef _MSC_VER\n  return __popcnt(x0);\n#else\n  return __builtin_popcount(x0);\n#endif\n}\n\nstatic inline size_t core_cmp_impls__core__cmp__Ord_for_usize__min(size_t a,\n                                                                   size_t b) {\n  if (a <= b)\n    return a;\n  else\n    return b;\n}\n\n// unsigned overflow wraparound semantics in C\nstatic inline uint8_t core_num__u8__wrapping_sub(uint8_t x, uint8_t y) {\n  return x - y;\n}\nstatic inline uint8_t core_num__u8__wrapping_add(uint8_t x, uint8_t y) {\n  return x + y;\n}\nstatic inline uint8_t core_num__u8__wrapping_mul(uint8_t x, uint8_t y) {\n  return x * y;\n}\nstatic inline uint16_t core_num__u16__wrapping_sub(uint16_t x, uint16_t y) {\n  return x - y;\n}\nstatic inline uint16_t core_num__u16__wrapping_add(uint16_t x, uint16_t y) {\n  return x + y;\n}\nstatic inline uint16_t core_num__u16__wrapping_mul(uint16_t x, uint16_t y) {\n  return x * y;\n}\nstatic inline uint32_t core_num__u32__wrapping_sub(uint32_t x, uint32_t y) {\n  return x - y;\n}\nstatic inline uint32_t core_num__u32__wrapping_add(uint32_t x, uint32_t y) {\n  return x + y;\n}\nstatic inline uint32_t core_num__u32__wrapping_mul(uint32_t x, uint32_t y) {\n  return x * y;\n}\nstatic inline uint64_t core_num__u64__wrapping_sub(uint64_t x, uint64_t y) {\n  return x - y;\n}\nstatic inline uint64_t core_num__u64__wrapping_add(uint64_t x, uint64_t y) {\n  return x + y;\n}\nstatic inline uint64_t core_num__u64__wrapping_mul(uint64_t x, uint64_t y) {\n  return x * y;\n}\nstatic inline size_t core_num__usize__wrapping_sub(size_t x, size_t y) {\n  return x - y;\n}\nstatic inline size_t core_num__usize__wrapping_add(size_t x, size_t y) {\n  return x + y;\n}\nstatic inline size_t core_num__usize__wrapping_mul(size_t x, size_t y) {\n  return x * y;\n}\n\nstatic inline int8_t core_num__i8__wrapping_add(int8_t x, int8_t y) {\n  return (int8_t)((uint8_t)x + (uint8_t)y);\n}\nstatic inline int8_t core_num__i8__wrapping_sub(int8_t x, int8_t y) {\n  return (int8_t)((uint8_t)x - (uint8_t)y);\n}\nstatic inline int8_t core_num__i8__wrapping_mul(int8_t x, int8_t y) {\n  return (int8_t)((uint8_t)x * (uint8_t)y);\n}\nstatic inline int16_t core_num__i16__wrapping_add(int16_t x, int16_t y) {\n  return (int16_t)((uint16_t)x + (uint16_t)y);\n}\nstatic inline int16_t core_num__i16__wrapping_sub(int16_t x, int16_t y) {\n  return (int16_t)((uint16_t)x - (uint16_t)y);\n}\nstatic inline int16_t core_num__i16__wrapping_mul(int16_t x, int16_t y) {\n  return (int16_t)((uint16_t)x * (uint16_t)y);\n}\nstatic inline int32_t core_num__i32__wrapping_add(int32_t x, int32_t y) {\n  return (int32_t)((uint32_t)x + (uint32_t)y);\n}\nstatic inline int32_t core_num__i32__wrapping_sub(int32_t x, int32_t y) {\n  return (int32_t)((uint32_t)x - (uint32_t)y);\n}\nstatic inline int32_t core_num__i32__wrapping_mul(int32_t x, int32_t y) {\n  return (int32_t)((uint32_t)x * (uint32_t)y);\n}\nstatic inline int64_t core_num__i64__wrapping_add(int64_t x, int64_t y) {\n  return (int64_t)((uint64_t)x + (uint64_t)y);\n}\nstatic inline int64_t core_num__i64__wrapping_sub(int64_t x, int64_t y) {\n  return (int64_t)((uint64_t)x - (uint64_t)y);\n}\nstatic inline int64_t core_num__i64__wrapping_mul(int64_t x, int64_t y) {\n  return (int64_t)((uint64_t)x * (uint64_t)y);\n}\nstatic inline int8_t core_num__i8__wrapping_neg(int8_t x) {\n  return (int8_t)(-(uint8_t)x);\n}\nstatic inline int16_t core_num__i16__wrapping_neg(int16_t x) {\n  return (int16_t)(-(uint16_t)x);\n}\nstatic inline int32_t core_num__i32__wrapping_neg(int32_t x) {\n  return (int32_t)(-(uint32_t)x);\n}\nstatic inline int64_t core_num__i64__wrapping_neg(int64_t x) {\n  return (int64_t)(-(uint64_t)x);\n}\n\nstatic inline uint64_t core_num__u64__rotate_left(uint64_t x0, uint32_t x1) {\n  return (x0 << x1) | (x0 >> ((-x1) & 63));\n}\n\nstatic inline void core_ops_arith__i32__add_assign(int32_t *x0, int32_t *x1) {\n  *x0 = *x0 + *x1;\n}\n\nstatic inline uint8_t Eurydice_bitand_pv_u8(const uint8_t *p, uint8_t v) {\n  return (*p) & v;\n}\nstatic inline uint8_t Eurydice_shr_pv_u8(const uint8_t *p, int32_t v) {\n  return (*p) >> v;\n}\nstatic inline uint32_t Eurydice_min_u32(uint32_t x, uint32_t y) {\n  return x < y ? x : y;\n}\n\nstatic inline uint8_t\ncore_ops_bit__core__ops__bit__BitAnd_u8__u8__for__0__u8___bitand(\n    const uint8_t *x0, uint8_t x1) {\n  return Eurydice_bitand_pv_u8(x0, x1);\n}\n\nstatic inline uint8_t\ncore_ops_bit__core__ops__bit__Shr_i32__u8__for__0__u8___shr(const uint8_t *x0,\n                                                            int32_t x1) {\n  return Eurydice_shr_pv_u8(x0, x1);\n}\n\n#define core_num_nonzero_private_NonZeroUsizeInner size_t\nstatic inline core_num_nonzero_private_NonZeroUsizeInner\ncore_num_nonzero_private___core__clone__Clone_for_core__num__nonzero__private__NonZeroUsizeInner___clone(\n    core_num_nonzero_private_NonZeroUsizeInner *x0) {\n  return *x0;\n}\n\n#if defined(__cplusplus) && !defined(KRML_CXX17_COMPAT)\n}\n#endif\n\n// ITERATORS\n\n#define Eurydice_range_iter_next(iter_ptr, t, ret_t)                           \\\n  (((iter_ptr)->start >= (iter_ptr)->end)                                      \\\n       ? (KRML_CLITERAL(ret_t){EURYDICE_CFIELD(.tag =) 0,                      \\\n                               EURYDICE_CFIELD(.f0 =) 0})                      \\\n       : (KRML_CLITERAL(ret_t){EURYDICE_CFIELD(.tag =) 1,                      \\\n                               EURYDICE_CFIELD(.f0 =)(iter_ptr)->start++}))\n\n#define core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next \\\n  Eurydice_range_iter_next\n\n// See note in karamel/lib/Inlining.ml if you change this\n#define Eurydice_into_iter(x, t, _ret_t, _) (x)\n#define core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter \\\n  Eurydice_into_iter\n\n// STRINGS\n\ntypedef char Eurydice_c_char_t;\ntypedef const Eurydice_c_char_t *Prims_string;\ntypedef void Eurydice_c_void_t;\n\n// UNSAFE CODE\n\n#define core_slice___Slice_T___as_mut_ptr(x, t, _) (x.ptr)\n#define core_mem_size_of(t, _) (sizeof(t))\n#define core_slice_raw_from_raw_parts_mut(ptr, len, _0, _1)                    \\\n  (KRML_CLITERAL(Eurydice_slice){(void *)(ptr), len})\n#define core_slice_raw_from_raw_parts(ptr, len, _0, _1)                        \\\n  (KRML_CLITERAL(Eurydice_slice){(void *)(ptr), len})\n\n// FIXME: add dedicated extraction to extract NonNull<T> as T*\n#define core_ptr_non_null_NonNull void *\n\n// PRINTING\n//\n// This is temporary. Ultimately we want to be able to extract all of this.\n\ntypedef void *core_fmt_Formatter;\n#define core_fmt_rt__core__fmt__rt__Argument__a___new_display(x1, x2, x3, x4)  \\\n  NULL\n\n// BOXES\n\n#ifndef EURYDICE_MALLOC\n#define EURYDICE_MALLOC malloc\n#endif\n\n#ifndef EURYDICE_REALLOC\n#define EURYDICE_REALLOC realloc\n#endif\n\nstatic inline char *malloc_and_init(size_t sz, char *init) {\n  char *ptr = (char *)EURYDICE_MALLOC(sz);\n  if (ptr != NULL)\n    memcpy(ptr, init, sz);\n  return ptr;\n}\n\n#define Eurydice_box_new(init, t, t_dst)                                       \\\n  ((t_dst)(malloc_and_init(sizeof(t), (char *)(&init))))\n\n// Initializer for array of size zero\n#define Eurydice_empty_array(dummy, t, t_dst) ((t_dst){.data = {}})\n\n#define Eurydice_box_new_array(len, ptr, t, t_dst)                             \\\n  ((t_dst)(malloc_and_init(len * sizeof(t), (char *)(ptr))))\n\n// FIXME this needs to handle allocation failure errors, but this seems hard to\n// do without evaluating malloc_and_init twice...\n#define alloc_boxed__alloc__boxed__Box_T___try_new(init, t, t_ret)             \\\n  ((t_ret){.tag = core_result_Ok,                                              \\\n           .f0 = (t *)malloc_and_init(sizeof(t), (char *)(&init))})\n\n// VECTORS\n\n// We adapt the layout of https://doc.rust-lang.org/std/vec/struct.Vec.html,\n// dispensing with the nested RawVec -- basically, we follow what the\n// documentation says. Just like Eurydice_slice, we keep sizes in number of\n// elements. This means we pass three words by value whenever we carry a vector\n// around. Things that modify the vector take &mut's in Rust, or a Eurydice_vec*\n// in C.\n//\n// Another design choice: just like Eurydice_slice, we treat Eurydice_vec as an\n// opaque type, and rely on macros receiving their type arguments at call-site\n// to perform necessary casts. A downside is that anything that looks into the\n// definition of Eurydice_vec must be exposed (from the eurydice point of view)\n// as an external -- see, for instance, Eurydice_vec_failed, below.\ntypedef struct {\n  char *ptr;\n  size_t len;      /* current length, in elements */\n  size_t capacity; /* the size of the allocation, in number of elements */\n} Eurydice_vec, alloc_vec_Vec;\n\n// This is a helper that Eurydice has special knowledge about. Essentially,\n// allocation functions return a result type that has been monomorphized, say,\n// Result_XY; this means we need to do something like:\n//   Eurydice_vec v = try_with_capacity(len, sz);\n//   Result_XY r = v.ptr == NULL ? (Result_XY) { .tag = core_result_Ok, .case_Ok\n//   = v }\n//     : (Result_XY) { .tag = core_result_Error, .case_Error = ... };\n// but with a macro (since we don't have templates).\n// However, unless we allow statement-expressions (GCC extension), we cannot do\n// the above with an expression, since we need to name the result of\n// try_with_capacity to avoid evaluating it twice.\nstatic inline Eurydice_vec Eurydice_vec_alloc2(size_t len, size_t element_sz) {\n  return ((Eurydice_vec){.ptr = (char *)EURYDICE_MALLOC(len * element_sz),\n                         .len = len,\n                         .capacity = len});\n}\n\n#define Eurydice_vec_alloc(len, t, _) (Eurydice_vec_alloc2((len), sizeof(t)))\n#define Eurydice_vec_overflows(len, t, _) (!((len) <= SIZE_MAX / (sizeof(t))))\n#define Eurydice_vec_failed(v, _, _1) ((v).ptr == NULL)\n#define Eurydice_layout(t, _)                                                  \\\n  ((core_alloc_layout_Layout){.size = sizeof(t), .align = _Alignof(t)})\n\n#define alloc_vec__alloc__vec__Vec_T___resize(                                 \\\n    /* Eurydice_vec * */ v, /* size_t */ new_len, /* T */ elt, T, _0, _1)      \\\n  do {                                                                         \\\n    if (new_len <= (v)->capacity)                                              \\\n      (v)->len = new_len;                                                      \\\n    else {                                                                     \\\n      (v)->ptr = EURYDICE_REALLOC((v)->ptr, new_len * sizeof(T));              \\\n      /* TODO: check success? Rust function is infallible */                   \\\n      for (size_t i = (v)->len; i < new_len; i++)                              \\\n        ((T *)(v)->ptr)[i] = elt;                                              \\\n      (v)->len = new_len;                                                      \\\n      (v)->capacity = new_len;                                                 \\\n    }                                                                          \\\n  } while (0)\n\n#define alloc_vec__alloc__vec__Vec_T___into_boxed_slice(/* Eurydice_vec */ v,  \\\n                                                        T, _0, _1)             \\\n  ((Eurydice_slice){.ptr = (v).ptr, .len = (v).len})\n\n#define alloc_boxed__alloc__boxed__Box_T___from_raw(x, _0, _1) (x)\n#define alloc_boxed__alloc__boxed__Box_T___into_raw(x, _0, _1) (x)\n"
  },
  {
    "path": "lib/AstOfLlbc.ml",
    "content": "(* C for Charon *)\nmodule C = struct\n  include Charon.GAst\n  include Charon.LlbcAst\n  include Charon.Types\n  include Charon.TypesUtils\n  include Charon.Expressions\n  include Charon.Values\n  include Charon.GAstUtils\n\n  (* Fails if the variable is bound *)\n  let expect_free_var = function\n    | Free id -> id\n    | Bound _ -> failwith \"Found unexpected bound variable\"\n\n  let tsubst cgs ts ty =\n    begin\n      object\n        inherit [_] map_ty\n        method! visit_TVar _ v = TypeVarId.nth ts (expect_free_var v)\n        method! visit_CVar _ v = ConstGenericVarId.nth cgs (expect_free_var v)\n        method visit_'r _ x = x\n      end\n    end\n      #visit_ty\n      () ty\nend\n\nmodule LidMap = Krml.Idents.LidMap\nmodule K = Krml.Ast\nmodule L = Logging\nopen Krml.PrintAst.Ops\n\nlet fail fmt =\n  let b = Buffer.create 256 in\n  Printf.kbprintf (fun b -> failwith (Buffer.contents b)) b fmt\n\n(** Environment *)\n\n(* The various kinds of binders we insert in the expression scope. Usually come\n   in this order, the first three being only ever inserted upon entering a function\n   definition. *)\ntype var_id =\n  | TraitClauseMethod of {\n      clause_id : C.trait_ref_kind;\n      method_id : C.trait_method_id;\n      item_name : string;\n      pretty_name : string;\n      ts : K.type_scheme;\n    }\n  | TraitClauseConstant of {\n      clause_id : C.trait_ref_kind;\n      item_name : string;\n      pretty_name : string;\n    }\n  | ConstGenericVar of C.const_generic_var_id\n  | Var of C.local_id * C.ety (* the ety aids code-generation, sometimes *)\n\ntype env = {\n  (* Lookup functions to resolve various id's into actual declarations. *)\n  get_nth_function : C.FunDeclId.id -> C.fun_decl;\n  get_nth_type : C.TypeDeclId.id -> C.type_decl;\n  get_nth_global : C.GlobalDeclId.id -> C.global_decl;\n  get_nth_trait_impl : C.TraitImplId.id -> C.trait_impl;\n  get_nth_trait_decl : C.TraitDeclId.id -> C.trait_decl;\n  crate : C.crate;\n  (* Needed by the name matching logic *)\n  name_ctx : Charon.NameMatcher.ctx;\n  generic_params : C.generic_params;\n  (* We have three lists of binders, which allow us to go from a Rust variable\n     to a corresponding krml AST variable; everything is in De Bruijn, so\n     looking up a variable is essentially List.nth. To understand why we have\n     three lists here, we review the binding structure of the target (krml) AST.\n\n     The target AST has three binding scopes: cg vars, type vars and expression\n     vars. Type vars and type expressions are standard and have their own\n     scopes, and corresponding variable nodes (TBound for type variables, Bound\n     for expression variables). Const-generic variables are more complicted,\n     because they appear in *both* types and expressions; there is a *third*\n     scope of cg variables, with the following behavior:\n     - in types, CgVar and TCgArray contain DeBruijn indices referring to the cg\n       scope (standard), while\n     - in expressions, there is no ECgVar, so we repeat cg vars at the beginning\n       of the expression scope, and we rely on a regular EBound node to refer to\n       cg variables (trick). This trick avoids a combinatorial explosion of\n       substitution functions and makes sure all 60+ existing passes of krml do\n       *not* need to be aware of the addition of const-generics (except for\n       monomorphization, of course).\n     In short, the third scope for cg variables only applies for CgVar and\n     TCgArray; for expressions, cg variables masquerade as expression variables\n     and live as the first N variables of that scope.\n\n     To implement this, we rely on the corresponding three lists of binders,\n     with the additional caveat that push_cg_binder pushes in both cg_binders\n     and binders (see rationale above).\n\n     Example: fn f<const N: usize, T: Copy>(x: [T; N]) -> usize { N }\n     Upon entering the body of f, we have:\n     - cg_binders: [ N, usize ]\n     - type_binders: [ T ]\n     - binders: [ `Cg (N, usize); `Clause (T: Copy, \"copy\"); `Var (x: [T; N]) ]\n\n     After translation, we get:\n     DFunction (..., 1 (* one type var *), 2 (* one cg var *), [\n       \"N\": TInt usize;\n       \"x\": TCgArray (TBound 0, 0); (* types use the cg scope *)\n     ], EBound 2 (* expressions refer to the copy of the cg var as an expression var *)\n  *)\n  cg_binders : (C.const_generic_var_id * K.typ) list;\n  type_binders : C.type_var_id list;\n  binders : (var_id * K.typ) list;\n  (* For printing. *)\n  format_env : Charon.Print.fmt_env;\n  (* For picking pretty names *)\n  crate_name : string;\n}\n\nlet debug env =\n  L.log \"DebugEnv\" \"\\n# Debug Env\";\n  List.iteri\n    (fun i v ->\n      L.log \"DebugEnv\" \"type_binders[%d]: %s\\n\" i (Charon.Print.type_var_id_to_pretty_string v))\n    env.type_binders\n\n(* Environment: types *)\n\nlet findi p l =\n  let rec findi i l =\n    match l with\n    | hd :: tl ->\n        if p hd then\n          i, hd\n        else\n          findi (i + 1) tl\n    | [] -> raise Not_found\n  in\n  findi 0 l\n\nlet fst3 (x, _, _) = x\nlet snd3 (_, x, _) = x\nlet thd3 (_, _, x) = x\n\n(* Suitable in types -- in expressions, use lookup_cg_in_expressions. *)\nlet lookup_cg_in_types env v1 =\n  let i, (_, t) = findi (fun (v2, _) -> v1 = v2) env.cg_binders in\n  i, t\n\nlet lookup_typ env (v1 : C.type_var_id) =\n  let i, _ = findi (( = ) v1) env.type_binders in\n  i\n\nlet push_type_binder env (t : C.type_param) =\n  { env with type_binders = t.index :: env.type_binders }\n\nlet push_type_binders env (ts : C.type_param list) = List.fold_left push_type_binder env ts\n\n(** Helpers: types *)\n\nlet with_any = K.(with_type TAny)\nlet is_dst_ref lid = Builtin.(lid = dst_ref_mut || lid = dst_ref_shared)\n\nlet assert_slice (t : K.typ) =\n  match t with\n  | TApp (lid, [ t; u ]) when is_dst_ref lid && u = TInt SizeT -> t\n  | _ -> fail \"Not a slice: %a\" ptyp t\n\nlet string_of_path_elem (env : env) (p : Charon.Types.path_elem) : string =\n  Charon.Print.path_elem_to_string env.format_env p\n\nlet string_of_name env ps = String.concat \"::\" (List.map (string_of_path_elem env) ps)\n\nlet mk_field_name f i =\n  match f with\n  | Some f -> f\n  | None -> \"f\" ^ string_of_int i\n\nlet is_enum (env : env) (id : C.type_decl_id) : bool =\n  let decl = env.get_nth_type id in\n  match decl.C.kind with\n  | Enum branches -> List.for_all (fun v -> v.C.fields = []) branches\n  | _ -> false\n\nlet mk_enum_case lid c = fst lid @ [ snd lid ], c\n\n(* Helpers: traits finding & matching *)\n\nmodule RustNames = struct\n  open Charon.NameMatcher\n\n  let config =\n    {\n      map_vars_to_vars = false;\n      match_with_trait_decl_refs = true;\n      (* use_trait_decl_refs = true; *)\n    }\n\n  let vec = parse_pattern \"alloc::vec::Vec<@>\"\n  let range = parse_pattern \"core::ops::range::Range<@>\"\n  let option = parse_pattern \"core::option::Option<@>\"\n\n  (* Just to have a uniform view of the table of distinguished declarations *)\n  let builtin_of_function decl : Builtin.builtin =\n    match decl with\n    | Krml.Ast.DFunction (_, _, n_cgs, n_type_args, ret_t, name, binders, _) ->\n        if n_cgs > List.length binders then\n          Krml.Warn.fatal_error \"n_cgs=%d, but List.length binders=%d for %a\\n\" n_cgs\n            (List.length binders) Krml.PrintAst.Ops.plid name;\n        let cg_args, rest = Krml.KList.split n_cgs binders in\n        {\n          name;\n          typ = Krml.Helpers.fold_arrow (List.map (fun (x : Krml.Ast.binder) -> x.typ) rest) ret_t;\n          n_type_args;\n          cg_args = List.map (fun (x : Krml.Ast.binder) -> x.typ) cg_args;\n          arg_names = List.map (fun (x : Krml.Ast.binder) -> x.node.name) rest;\n        }\n    | _ -> failwith \"impossible\"\n\n  let known_builtins no_const =\n    let ( || ) no_const_variant default =\n      if no_const then\n        no_const_variant\n      else\n        default\n    in\n    [\n    (* slices *)\n    parse_pattern \"SliceIndexShared<'_, @T>\", Builtin.(slice_index_mut || slice_index_shared);\n    parse_pattern \"SliceIndexMut<'_, @T>\", Builtin.slice_index_mut;\n\n    parse_pattern \"core::slice::index::{core::ops::index::Index<[@T], @I, @Clause2_Output>}::index<'_, @, core::ops::range::Range<usize>, [@]>\", builtin_of_function Builtin.(slice_subslice_func_mut || slice_subslice_func_shared);\n    parse_pattern \"core::slice::index::{core::ops::index::IndexMut<[@T], @I, @Clause2_Output>}::index_mut<'_, @, core::ops::range::Range<usize>, [@]>\", builtin_of_function Builtin.slice_subslice_func_mut;\n    parse_pattern \"core::slice::index::{core::ops::index::Index<[@T], @I, @Clause2_Output>}::index<'_, @, core::ops::range::RangeTo<usize>, [@]>\", builtin_of_function Builtin.(slice_subslice_to_func_mut || slice_subslice_to_func_shared);\n    parse_pattern \"core::slice::index::{core::ops::index::IndexMut<[@T], @I, @Clause2_Output>}::index_mut<'_, @, core::ops::range::RangeTo<usize>, [@]>\", builtin_of_function Builtin.slice_subslice_to_func_mut;\n    parse_pattern \"core::slice::index::{core::ops::index::Index<[@T], @I, @Clause2_Output>}::index<'_, @, core::ops::range::RangeFrom<usize>, [@]>\", builtin_of_function Builtin.(slice_subslice_from_func_mut || slice_subslice_from_func_shared);\n    parse_pattern \"core::slice::index::{core::ops::index::IndexMut<[@T], @I, @Clause2_Output>}::index_mut<'_, @, core::ops::range::RangeFrom<usize>, [@]>\", builtin_of_function Builtin.slice_subslice_from_func_mut;\n\n    (* arrays *)\n    parse_pattern \"core::array::{core::ops::index::Index<[@T; @N], @I, @Clause2_Clause0_Output>}::index<'_, @, core::ops::range::Range<usize>, [@], @>\", builtin_of_function Builtin.(array_to_subslice_func_mut || array_to_subslice_func_shared);\n    parse_pattern \"core::array::{core::ops::index::IndexMut<[@T; @N], @I, @Clause2_Clause0_Output>}::index_mut<'_, @, core::ops::range::Range<usize>, [@], @>\", builtin_of_function Builtin.array_to_subslice_func_mut;\n    parse_pattern \"core::array::{core::ops::index::Index<[@T; @N], @I, @Clause2_Clause0_Output>}::index<'_, @, core::ops::range::RangeTo<usize>, [@], @>\", builtin_of_function Builtin.(array_to_subslice_to_func_mut || array_to_subslice_to_func_shared);\n    parse_pattern \"core::array::{core::ops::index::IndexMut<[@T; @N], @I, @Clause2_Clause0_Output>}::index_mut<'_, @, core::ops::range::RangeTo<usize>, [@], @>\", builtin_of_function Builtin.array_to_subslice_to_func_mut;\n    parse_pattern \"core::array::{core::ops::index::Index<[@T; @N], @I, @Clause2_Clause0_Output>}::index<'_, @, core::ops::range::RangeFrom<usize>, [@], @>\", builtin_of_function Builtin.(array_to_subslice_from_func_mut || array_to_subslice_from_func_shared);\n    parse_pattern \"core::array::{core::ops::index::IndexMut<[@T; @N], @I, @Clause2_Clause0_Output>}::index_mut<'_, @, core::ops::range::RangeFrom<usize>, [@], @>\", builtin_of_function Builtin.array_to_subslice_from_func_mut;\n\n    (* slices <-> arrays *)\n    parse_pattern \"ArrayToSliceShared<'_, @T, @N>\", builtin_of_function Builtin.(array_to_slice_func_mut || array_to_slice_func_shared);\n    parse_pattern \"ArrayToSliceMut<'_, @T, @N>\", builtin_of_function Builtin.array_to_slice_func_mut;\n    parse_pattern \"core::convert::{core::convert::TryInto<@T, @U, @Clause2_Error>}::try_into<&'_ [@T], [@T; @], core::array::TryFromSliceError>\", Builtin.slice_to_array;\n    parse_pattern \"core::convert::{core::convert::TryInto<@T, @U, @Clause2_Error>}::try_into<&'_ mut [@T], [@T; @], core::array::TryFromSliceError>\", Builtin.slice_to_array;\n    parse_pattern \"core::convert::{core::convert::TryInto<@T, @U, @Clause2_Error>}::try_into<&'_ [@T], &'_ [@T; @], core::array::TryFromSliceError>\", Builtin.slice_to_ref_array;\n    parse_pattern \"core::convert::{core::convert::TryInto<@T, @U, @Clause2_Error>}::try_into<&'_ mut [@T], &'_ mut [@T; @], core::array::TryFromSliceError>\", Builtin.slice_to_ref_array;\n\n    (* bitwise & arithmetic operations *)\n    parse_pattern \"core::ops::bit::BitAnd<&'_ u8, u8>::bitand\", Builtin.bitand_pv_u8;\n    parse_pattern \"core::ops::bit::Shr<&'_ u8, i32>::shr\", Builtin.shr_pv_u8;\n\n    (* misc *)\n    parse_pattern \"core::cmp::Ord<u32>::min\", Builtin.min_u32;\n\n    (* boxes *)\n    parse_pattern \"alloc::boxed::{alloc::boxed::Box<@T>}::new<@>\", Builtin.box_new;\n  ]\n  [@ocamlformat \"disable\"]\n\n  let from_u16 = parse_pattern \"core::convert::From<u16, @U>::from\"\n  let from_u32 = parse_pattern \"core::convert::From<u32, @U>::from\"\n  let from_u64 = parse_pattern \"core::convert::From<u64, @U>::from\"\n  let from_u128 = parse_pattern \"core::convert::From<u128, @U>::from\"\n  let from_i16 = parse_pattern \"core::convert::From<i16, @U>::from\"\n  let from_i32 = parse_pattern \"core::convert::From<i32, @U>::from\"\n  let from_i64 = parse_pattern \"core::convert::From<i64, @U>::from\"\n  let from_i128 = parse_pattern \"core::convert::From<i128, @U>::from\"\n  let from = parse_pattern \"core::convert::From<@T, @U>::from\"\n  let into_u16 = parse_pattern \"core::convert::Into<@U, u16>::into\"\n  let into_u32 = parse_pattern \"core::convert::Into<@U, u32>::into\"\n  let into_u64 = parse_pattern \"core::convert::Into<@U, u64>::into\"\n  let into_u128 = parse_pattern \"core::convert::Into<@U, u128>::into\"\n  let into_i16 = parse_pattern \"core::convert::Into<@U, i16>::into\"\n  let into_i32 = parse_pattern \"core::convert::Into<@U, i32>::into\"\n  let into_i64 = parse_pattern \"core::convert::Into<@U, i64>::into\"\n  let into_i128 = parse_pattern \"core::convert::Into<@U, i128>::into\"\n  let into = parse_pattern \"core::convert::Into<@U, @T>::into\"\n  let is_vec env = match_pattern_with_type_id env.name_ctx config (mk_empty_maps ()) vec\n  let is_range env = match_pattern_with_type_id env.name_ctx config (mk_empty_maps ()) range\n  let is_option env = match_pattern_with_type_id env.name_ctx config (mk_empty_maps ()) option\nend\n\nlet string_of_pattern pattern = Charon.NameMatcher.(pattern_to_string { tgt = TkPattern } pattern)\n\nlet pattern_of_fn_ptr env fn_ptr =\n  Charon.NameMatcher.(\n    fn_ptr_to_pattern env.name_ctx\n      { tgt = TkPattern; use_trait_decl_refs = true }\n      Charon.TypesUtils.empty_generic_params fn_ptr)\n\nlet pattern_of_name env name =\n  Charon.NameMatcher.(\n    name_to_pattern env.name_ctx { tgt = TkPattern; use_trait_decl_refs = true } name)\n\nlet string_of_fn_ptr env fn_ptr = string_of_pattern (pattern_of_fn_ptr env fn_ptr)\n\n(** Translation of types *)\n\nlet lid_of_name (env : env) (name : Charon.Types.name) : K.lident =\n  let prefix, name = Krml.KList.split_at_last name in\n  List.map (string_of_path_elem env) prefix, string_of_path_elem env name\n\nlet width_of_integer_type (t : Charon.Types.integer_type) : K.width =\n  match t with\n  | Signed Isize -> PtrdiffT\n  | Signed I8 -> Int8\n  | Signed I16 -> Int16\n  | Signed I32 -> Int32\n  | Signed I64 -> Int64\n  | Signed I128 ->\n      failwith \"Internal error: `i128` should not be handled in `width_of_integer_type`.\"\n  | Unsigned Usize -> SizeT\n  | Unsigned U8 -> UInt8\n  | Unsigned U16 -> UInt16\n  | Unsigned U32 -> UInt32\n  | Unsigned U64 -> UInt64\n  | Unsigned U128 ->\n      failwith \"Internal error: `u128` should not be handled in `width_of_integer_type`.\"\n\nlet lid_of_type_decl_id (env : env) (id : C.type_decl_id) =\n  let { C.item_meta; _ } = env.get_nth_type id in\n  lid_of_name env item_meta.name\n\nlet constant_of_scalar_value sv =\n  let w = width_of_integer_type (Charon.Scalars.get_ty sv) in\n  w, Z.to_string (Charon.Scalars.get_val sv)\n\nlet assert_cg_scalar : C.constant_expr -> C.scalar_value = function\n  | { kind = C.CLiteral (VScalar n); _ } -> n\n  | cg -> failwith (\"Unsupported: non-constant const generic: \" ^ C.show_constant_expr cg)\n\nlet cg_of_const_generic env (cg : C.constant_expr) =\n  match cg.kind with\n  | C.CVar var -> K.CgVar (fst (lookup_cg_in_types env (C.expect_free_var var)))\n  | C.CLiteral (VScalar sv) -> CgConst (constant_of_scalar_value sv)\n  | _ -> failwith (\"cg_of_const_generic: \" ^ Charon.Print.constant_expr_to_string env.format_env cg)\n\nlet float_width float_ty : K.width =\n  match float_ty with\n  | C.F32 -> Float32\n  | C.F64 -> Float64\n  | C.F16 | C.F128 -> failwith \"TODO: f16 & f128 are not supported.\"\n\nlet typ_of_literal_ty (_env : env) (ty : Charon.Types.literal_type) : K.typ =\n  match ty with\n  | TBool -> K.TBool\n  | TChar -> Builtin.char_t\n  | TFloat f -> K.TInt (float_width f)\n  | TInt C.I128 -> Builtin.int128_t\n  | TUInt C.U128 -> Builtin.uint128_t\n  | _ -> K.TInt (width_of_integer_type (Charon.TypesUtils.literal_as_integer ty))\n\nlet const_of_ref_kind kind =\n  if !Options.no_const then\n    false\n  else\n    match kind with\n    | C.RMut -> false\n    | C.RShared -> true\n\nlet const_of_borrow_kind bk =\n  if !Options.no_const then\n    false\n  else\n    match bk with\n    | C.BShared -> true\n    | C.BShallow -> true\n    | _ -> false\n\nlet const_of_tbuf b =\n  if !Options.no_const then\n    false\n  else\n    match b with\n    | K.TBuf (_, const) -> const\n    | _ -> failwith \"not a tbuf\"\n\n(* e: Eurydice_dst<t> *)\nlet mk_dst_deref _env t e =\n  (* ptr_field: t* *)\n  (* XXX need proper const here *)\n  let ptr_field = K.(with_type (TBuf (t, true)) (EField (e, \"ptr\"))) in\n  K.(with_type t (EBufRead (ptr_field, Krml.Helpers.zero_usize)))\n\nlet ensure_named i name =\n  match name, i with\n  | None, 0 -> \"fst\"\n  | None, 1 -> \"snd\"\n  | None, 2 -> \"thd\"\n  | None, _ -> Printf.sprintf \"field%d\" i\n  | Some name, _ -> name\n\nlet lookup_field env typ_id field_id =\n  let ty_decl = env.get_nth_type typ_id in\n  let fields =\n    match ty_decl.kind with\n    | Struct fields -> fields\n    | _ -> failwith \"not a struct\"\n  in\n  let i = C.FieldId.to_int field_id in\n  let field = List.nth fields i in\n  ensure_named i field.field_name\n\nlet mk_expr_arr_struct (expr_array : K.expr) = K.EFlat [ Some \"data\", expr_array ]\n\n(** A vtable type is actually just a struct type, this function takes out the hinted ID of the\n    vtable struct from the dynamic predicate and then translate it, returns a reference to the\n    struct type itself.\n\n    Notably, a dynamic predicate is of the form:\n    [dyn Trait<TraitArgs, AssocTy=T, ...> + AutoTraits + 'a]. Namely, it has the arguments to the\n    unique non-auto trait and the assignments to each associated types as the **principal trait**\n    [Trait<...>], and then some additional auto-traits having no methods and finally a region\n    constraint. Here we care only about the principal trait. *)\nlet rec vtable_typ_of_dyn_pred (env : env) (pred : C.dyn_predicate) : K.typ =\n  let binder_params = pred.binder.binder_params in\n  match binder_params.trait_clauses with\n  | [] -> failwith \"DynTrait has empty clause! Please report this to Charon.\"\n  (* As guaranteed by Rustc and hence Charon, the first clause must be the principal trait *)\n  | principal_clause :: _ -> (\n      let tref = principal_clause.trait in\n      let decl = env.get_nth_trait_decl tref.binder_value.id in\n      match decl.vtable with\n      | None ->\n          failwith \"Fetching vtable from a trait without vtable! Please report this to Charon.\"\n      | Some ty_ref ->\n          (* The ty_ref here is of the form: `{vtable}<TraitParams, AssocTys>` *)\n          (* Hence we need to firstly substitute `TraitParams` with the actual types provided by the dynamic predicate's `TraitArgs` *)\n          (* And then substitute `AssocTys` with the actual types provided by the dynamic predicate's assignments to these associated types *)\n          (* The trait ref is guaranteed to be with empty binding values in the principal clause *)\n          (* Yet, we will need to move shift the internal DeBruijn indices with `extract_from_binder` *)\n          let tref = Charon.Substitute.(extract_from_binder trait_decl_ref_substitute tref) in\n          (* First step: get the `TraitArgs` *)\n          let base_args =\n            let generics = tref.generics in\n            { generics with types = List.tl generics.types }\n          in\n          (* Second step: find from the assignments of assoc tys *)\n          let assoc_tys =\n            let base_removal = fun l -> snd (Krml.KList.split (List.length base_args.types) l) in\n            let find_assoc_ty_arg = function\n              | C.TTraitType (tref, name) ->\n                  (* We match by the trait-ID and the assoc-ty name, which should be unique *)\n                  let target_id = tref.trait_decl_ref.binder_value.id in\n                  let assoc_ty_assns = binder_params.trait_type_constraints in\n                  let finder (binded_assn : C.trait_type_constraint C.region_binder) =\n                    let assn =\n                      Charon.Substitute.(\n                        extract_from_binder trait_type_constraint_substitute binded_assn)\n                    in\n                    if\n                      assn.trait_ref.trait_decl_ref.binder_value.id = target_id\n                      && assn.type_name = name\n                    then\n                      Some assn.ty\n                    else\n                      None\n                  in\n                  begin\n                    match List.find_map finder assoc_ty_assns with\n                    | Some ty -> ty\n                    | None ->\n                        fail \"Could not find associated type assignment for associated type %s\" name\n                  end\n              | _ ->\n                  failwith\n                    \"This should not happen: the rest of the generic types in a vtable-ref in a \\\n                     trait-decl should all be referring to associated types.\"\n            in\n            ty_ref.generics.types\n            (* Remove the base param types from it, leaving the associated types params *)\n            |> base_removal\n            (* For each assoc type param, find the corresponding arg from the dyn predicate *)\n            |> List.map find_assoc_ty_arg\n          in\n          let args = { base_args with types = base_args.types @ assoc_tys } in\n          let ty_args_ref = { ty_ref with generics = args } in\n          typ_of_ty env (C.TAdt ty_args_ref))\n\n(* This functions takes a Charon type, and returns the associated metadata as a krml type,\n   or None if there is no metadata *)\nand metadata_typ_of_ty (env : env) (ty : Charon.Types.ty) : K.typ option =\n  match ty with\n  | C.TAdt ty_decl_ref -> begin\n      match ty_decl_ref.id with\n      | C.TAdtId decl_id -> begin\n          let decl = env.get_nth_type decl_id in\n          match decl.ptr_metadata with\n          | C.NoMetadata -> None\n          | C.Length -> Some Krml.Helpers.usize\n          | C.VTable ty_ref ->\n              let ty_ref = { ty_ref with generics = ty_decl_ref.generics } in\n              Some (K.TBuf (typ_of_ty env (C.TAdt ty_ref), false))\n          | C.InheritFrom (C.TVar (C.Free var)) ->\n              let ty = List.nth ty_decl_ref.generics.types (C.TypeVarId.to_int var) in\n              metadata_typ_of_ty env ty\n          | C.InheritFrom _ ->\n              failwith\n                \"Eurydice does not handle PtrMetadata inheritance, please consider using \\\n                 monomorphized LLBC\"\n        end\n      | C.TTuple -> begin\n          match List.rev @@ ty_decl_ref.generics.types with\n          (* Empty metadata for empty tuple *)\n          | [] -> None\n          (* For tuple, the type of metadata is the last element *)\n          | last :: _ -> metadata_typ_of_ty env last\n        end\n      | C.TBuiltin C.TBox -> None\n      | C.TBuiltin C.TStr -> Some Krml.Helpers.usize\n    end\n  | C.TArray _ -> None\n  | C.TSlice _ -> Some Krml.Helpers.usize\n  | C.TVar _ ->\n      (* TEMPORARY:  this needs to be enabled once the monomorphization PR lands --\n    for now, there are still polymorphic type definitions of the form type\n    Foo<T: ?Sized> = ... in the AST (those will be monomorphized away, eventually) *)\n      let _var_is_sized (clause : C.trait_param) =\n        let trait = clause.trait.binder_value in\n        match trait.generics.types with\n        | [] -> failwith \"Unexpected empty `Self` from trait clause.\"\n        (* The variable here in C.TVar should be free variable, hence no need to adjust the DB id. *)\n        | self :: _ ->\n            self = ty\n            &&\n            let decl = env.get_nth_trait_decl trait.id in\n            (* It has the Sized marker, which is of lang_item \"sized\" *)\n            decl.item_meta.lang_item = Some \"sized\"\n      in\n      let var_is_sized =\n        true\n        (*List.exists var_is_sized env.generic_params.trait_clauses*)\n      in\n      if var_is_sized then\n        None\n      else\n        failwith\n          \"Eurydice does not handle taking metadata from non-Sized type vars, please consider \\\n           using monomorphized LLBC.\"\n  | C.TTraitType (_, _) ->\n      failwith\n        \"Eurydice does not handle taking metadata from assoc types, please consider using \\\n         monomorphized LLBC.\"\n  (* The metadata of a &dyn Trait object is a pointer to its vtable *)\n  | C.TDynTrait pred -> Some (K.TBuf (vtable_typ_of_dyn_pred env pred, false))\n  | C.TLiteral _ | C.TRef (_, _, _) | C.TRawPtr (_, _) | C.TFnPtr _ | C.TFnDef _ -> None\n  (* The metadata must not have ptr metadata as they must be Sized. *)\n  | C.TPtrMetadata _ -> None\n  | C.TNever | C.TError _ -> failwith \"Error types to fetch metadata\"\n\n(* Translate Charon type &T as a krml type -- this handles special cases\n where address-taking in Rust creates a DST, which we represent as instances\n  of the dst_ref type. There are many such cases: slices, &str, etc. *)\nand ptr_typ_of_ty (env : env) ~const (ty : Charon.Types.ty) : K.typ =\n  (* Handle special cases first *)\n  match ty with\n  (* Special case to handle slice : &[T] *)\n  | TSlice t -> Builtin.mk_slice ~const (typ_of_ty env t)\n  (* Special case to handle &str *)\n  | TAdt { id = TBuiltin TStr; _ } -> Builtin.str_t ~const\n  (* Special case to handle DynTrait *)\n  | TDynTrait pred ->\n      Builtin.mk_dst_ref ~const Builtin.c_void_t (K.TBuf (vtable_typ_of_dyn_pred env pred, false))\n  (* General case, all &T is turned to either thin T* or fat Eurydice::DstRef<T,Meta> *)\n  | _ -> (\n      let typ = typ_of_ty env ty in\n      match metadata_typ_of_ty env ty with\n      | None -> K.TBuf (typ, const)\n      | Some meta -> Builtin.mk_dst_ref ~const typ meta)\n\nand typ_of_ty (env : env) (ty : Charon.Types.ty) : K.typ =\n  match ty with\n  | TVar var -> K.TBound (lookup_typ env (C.expect_free_var var))\n  | TLiteral t -> typ_of_literal_ty env t\n  | TNever -> failwith \"Impossible: Never\"\n  | TDynTrait _ -> failwith \"TODO: dyn Trait\"\n  | TAdt { id = TBuiltin TBox; generics = { types = [ t ]; _ } } -> ptr_typ_of_ty ~const:false env t\n  | TRef (_, t, rk) | TRawPtr (t, rk) ->\n      let const = const_of_ref_kind rk in\n      ptr_typ_of_ty env ~const t\n  | TAdt { id; generics = { types = [ t ]; _ } as generics } when RustNames.is_vec env id generics\n    -> Builtin.mk_vec (typ_of_ty env t)\n  | TAdt { id = TAdtId id; generics = { types = args; const_generics = generic_args; _ } } ->\n      let ts = List.map (typ_of_ty env) args in\n      let cgs = List.map (cg_of_const_generic env) generic_args in\n      let lid = lid_of_type_decl_id env id in\n      K.fold_tapp (lid, ts, cgs)\n  | TAdt { id = TTuple; generics = { types = args; const_generics; _ } } ->\n      assert (const_generics = []);\n      begin\n        match args with\n        | [] -> TUnit\n        | [ t ] -> typ_of_ty env t (* charon issue #205 *)\n        | _ -> TTuple (List.map (typ_of_ty env) args)\n      end\n  | TArray (t, cg) -> typ_of_struct_arr env t cg\n  | TSlice t ->\n      (* Appears in instantiations of patterns and generics, so we translate it to a placeholder. *)\n      TApp (Builtin.derefed_slice, [ typ_of_ty env t ])\n  | TAdt { id = TBuiltin TStr; generics = { types = []; _ } } -> Builtin.deref_str_t\n  | TAdt { id = TBuiltin f; generics = { types = args; const_generics; _ } } ->\n      List.iter (fun x -> print_endline (C.show_constant_expr x)) const_generics;\n      fail \"TODO: Adt/Builtin %s (%d) %d \" (C.show_builtin_ty f) (List.length args)\n        (List.length const_generics)\n  | TTraitType _ -> failwith (\"TODO: TraitTypes \" ^ Charon.Print.ty_to_string env.format_env ty)\n  | TFnPtr fn_sig ->\n      let { C.inputs = ts; output = t; _ } = fn_sig.binder_value in\n      let typs = List.map (typ_of_ty env) ts in\n      let typs =\n        match typs with\n        | [] -> [ K.TUnit ]\n        | typs -> typs\n      in\n      begin\n        match typ_of_ty env t with\n        | TArrow _ ->\n            failwith\n              \"Function pointer `fn` currying is not supported, consider using `&'static dyn Fn` \\\n               instead.\"\n        | typ -> Krml.Helpers.fold_arrow typs typ\n      end\n  | TFnDef bound_fn_ref -> begin\n      match Charon.Substitute.lookup_fndef_sig env.crate bound_fn_ref with\n      | None -> failwith \"Missing function declaration\"\n      | Some fn_sig -> typ_of_ty env (TFnPtr fn_sig)\n    end\n  | TPtrMetadata _ ->\n      failwith\n        \"The type-level computation `PtrMetadata(t)` should be handled by Charon, consider using \\\n         monomorphised LLBC.\"\n  | TError _ -> failwith \"Found type error in charon's output\"\n\nand typ_of_struct_arr (env : env) (t : C.ty) (cg : C.constant_expr) : K.typ =\n  let typ_t = typ_of_ty env t in\n  let cg = cg_of_const_generic env cg in\n  Builtin.mk_arr typ_t cg\n\nlet maybe_cg_array (env : env) (t : C.ty) (cg : C.constant_expr) =\n  match cg.kind with\n  | CLiteral _ -> K.TArray (typ_of_ty env t, constant_of_scalar_value (assert_cg_scalar cg))\n  | CVar var ->\n      let id, cg_t = lookup_cg_in_types env (C.expect_free_var var) in\n      assert (cg_t = K.TInt SizeT);\n      K.TCgArray (typ_of_ty env t, id)\n  | _ -> failwith \"TODO: CgGlobal\"\n\n(* Environment: expressions *)\n\nlet is_var v2 v1 =\n  match v2 with\n  | Var (v2, _) -> v2 = v1\n  | _ -> false\n\nlet assert_var = function\n  | Var (v2, ty) -> v2, ty\n  | _ -> assert false\n\nlet assert_trait_clause_method = function\n  | TraitClauseMethod { ts; _ } -> ts\n  | _ -> assert false\n\n(* Regular binders *)\n\nlet lookup env v1 =\n  let i, (_, t) = findi (fun (v2, _) -> is_var v2 v1) env.binders in\n  i, t\n\nlet lookup_with_original_type env v1 =\n  let i, (v, t) = findi (fun (v2, _) -> is_var v2 v1) env.binders in\n  let _, ty = assert_var v in\n  i, t, ty\n\n(* Const generic binders *)\n\nlet push_cg_binder env (t : C.const_generic_param) =\n  {\n    env with\n    cg_binders = (t.index, typ_of_ty env t.ty) :: env.cg_binders;\n    binders = (ConstGenericVar t.index, typ_of_ty env t.ty) :: env.binders;\n  }\n\nlet push_cg_binders env (ts : C.const_generic_param list) = List.fold_left push_cg_binder env ts\n\nlet push_binder env (t : C.local) =\n  { env with binders = (Var (t.index, t.local_ty), typ_of_ty env t.local_ty) :: env.binders }\n\nlet push_binders env (ts : C.local list) = List.fold_left push_binder env ts\n\n(* Clause binders, which only appear as function parameters, and hold an unknown\n   trait method (dictionary-style). *)\nlet push_clause_binder env b = { env with binders = b :: env.binders }\nlet push_clause_binders env bs = List.fold_left push_clause_binder env bs\n\nlet lookup_clause_method env clause_id method_id =\n  let i, (v, t) =\n    try\n      findi\n        (function\n          | TraitClauseMethod { clause_id = clause_id2; method_id = method_id2; _ }, _ ->\n              clause_id2 = clause_id && method_id2 = method_id\n          | _ -> false)\n        env.binders\n    with Not_found ->\n      Krml.KPrint.bprintf \"Error looking up %s.%s\\n\" (C.show_trait_ref_kind clause_id)\n        (C.show_trait_method_id method_id);\n      raise Not_found\n  in\n  i, t, assert_trait_clause_method v\n\nlet lookup_clause_constant env clause_id item_name =\n  let i, (_, t) =\n    try\n      findi\n        (function\n          | TraitClauseConstant { clause_id = clause_id2; item_name = item_name2; _ }, _ ->\n              clause_id2 = clause_id && item_name2 = item_name\n          | _ -> false)\n        env.binders\n    with Not_found ->\n      Krml.KPrint.bprintf \"Error looking up %s.%s\\n\" (C.show_trait_ref_kind clause_id) item_name;\n      raise Not_found\n  in\n  i, t\n\n(** Translation of expressions (statements, operands, rvalues, places) *)\n\nlet uu =\n  let r = ref 0 in\n  fun () ->\n    let suffix = string_of_int !r in\n    incr r;\n    \"uu____\" ^ suffix\n\nlet binder_of_var (env : env) (l : C.local) : K.binder =\n  let name = Option.value ~default:(uu ()) l.name in\n  let meta =\n    match name with\n    | \"left_val\" | \"right_val\" -> [ K.AttemptInline ]\n    | _ -> []\n  in\n  let binder = Krml.Helpers.fresh_binder ~mut:true name (typ_of_ty env l.local_ty) in\n  { binder with node = { binder.node with meta = meta @ binder.node.meta } }\n\nlet find_nth_variant (env : env) (typ : C.type_decl_id) (var : C.variant_id) =\n  match env.get_nth_type typ with\n  | { kind = Enum variants; _ } -> Charon.Types.VariantId.nth variants var\n  | _ -> failwith \"impossible: type is not a variant\"\n\nlet rec with_locals (env : env) (t : K.typ) (locals : C.local list) (k : env -> 'a) : 'a =\n  match locals with\n  | [] -> k env\n  | l :: locals ->\n      let env = push_binder env l in\n      let b = binder_of_var env l in\n      K.(with_type t (ELet (b, Krml.Helpers.any, with_locals env t locals k)))\n\nlet lookup_cg_in_expressions (env : env) (v1 : C.const_generic_var_id) =\n  let i, (_, t) = findi (fun (v2, _) -> v2 = ConstGenericVar v1) env.binders in\n  i, t\n\nlet expression_of_cg_var_id env v =\n  let i, t = lookup_cg_in_expressions env v in\n  K.(with_type t (EBound i))\n\nlet expression_of_var_id (env : env) (v : C.local_id) : K.expr =\n  let i, t = lookup env v in\n  K.(with_type t (EBound i))\n\n(** Assume here the maximum length is 128-bit -- will throw away the larger if larger. This is a\n    helper function to split a 128-bit integer into two 64-bit integers and is not assumed to be\n    used in other contexts. Returns the **expr** pair (high64bits, low64bits) *)\nlet split_128bit (value : Z.t) =\n  let mask128 = Z.sub (Z.shift_left Z.one 128) Z.one in\n  let mask64 = Z.sub (Z.shift_left Z.one 64) Z.one in\n  (* Always truncate to 128 bits using bitwise AND *)\n  let value = Z.logand value mask128 in\n  (* Extract low 64 bits *)\n  let low64 = Z.logand mask64 value in\n  (* Shift right without sign extension (use logical shift) *)\n  let high64 = Z.shift_right value 64 in\n  let to_expr_u64bits v =\n    let print_Z z = Z.format \"%#x\" z in\n    K.with_type (K.TInt UInt64) @@ K.EConstant (UInt64, print_Z v)\n  in\n  to_expr_u64bits high64, to_expr_u64bits low64\n\nlet expression_of_int128_t (value : Z.t) =\n  let i128_max = Z.sub (Z.shift_left Z.one 127) Z.one in\n  if value > i128_max then\n    failwith \"value is larger than the maximum value of i128\";\n  let i128_min = Z.neg (Z.shift_left Z.one 127) in\n  if value < i128_min then\n    failwith \"value is smaller than the minimum value of i128\";\n  let high64, low64 = split_128bit value in\n  K.(with_type Builtin.int128_t (EApp (Builtin.(get_128_op (\"i\", \"from_bits\")), [ high64; low64 ])))\n\nlet expression_of_uint128_t (value : Z.t) =\n  let u128_max = Z.sub (Z.shift_left Z.one 128) Z.one in\n  if value > u128_max then\n    failwith \"value is larger than the maximum value of u128\";\n  let high64, low64 = split_128bit value in\n  K.(\n    with_type Builtin.uint128_t (EApp (Builtin.(get_128_op (\"u\", \"from_bits\")), [ high64; low64 ])))\n\nlet expression_of_scalar_value sv : K.expr =\n  let int_ty = Charon.Scalars.get_ty sv in\n  let value = Charon.Scalars.get_val sv in\n  match int_ty with\n  | C.Signed C.I128 -> expression_of_int128_t value\n  | C.Unsigned C.U128 -> expression_of_uint128_t value\n  | _ ->\n      let w = width_of_integer_type int_ty in\n      K.(with_type (TInt w) (EConstant (constant_of_scalar_value sv)))\n\nlet expression_of_literal (_env : env) (l : C.literal) : K.expr =\n  match l with\n  | VScalar sv -> expression_of_scalar_value sv\n  | VBool b -> K.(with_type TBool (EBool b))\n  | VStr s ->\n      let ascii = Utf8.ascii_of_utf8_str s in\n      let len = String.length s in\n      K.(\n        with_type (Builtin.str_t ~const:true)\n          (EFlat\n             [\n               Some \"ptr\", with_type Krml.Checker.c_string (EString ascii);\n               Some \"meta\", with_type Krml.Helpers.usize (EConstant (SizeT, string_of_int len));\n             ]))\n  | VChar c -> K.(with_type Builtin.char_t (EConstant (UInt32, string_of_int @@ Uchar.to_int c)))\n  | VByteStr lst ->\n      let str = List.map (Printf.sprintf \"%#x\") lst |> String.concat \"\" in\n      K.(with_type Krml.Checker.c_string (EString str))\n  | VFloat { C.float_ty; float_value } ->\n      let w = float_width float_ty in\n      K.(with_type (TInt w) (EConstant (w, float_value)))\n\nlet expression_of_const_generic env (cg : C.constant_expr) =\n  match cg.kind with\n  | C.CGlobal _ -> failwith \"TODO: CgGLobal\"\n  | C.CVar var -> expression_of_cg_var_id env (C.expect_free_var var)\n  | C.CLiteral l -> expression_of_literal env l\n  | _ -> failwith \"TODO: CgExpr\"\n\nlet has_unresolved_generic (ty : K.typ) : bool =\n  (object\n     inherit [_] Krml.Ast.reduce\n     method zero = false\n     method plus = ( || )\n     method! visit_TBound _ _ = true\n  end)\n    #visit_typ\n    false ty\n\nlet rec expression_of_place (env : env) (p : C.place) : K.expr =\n  (* We construct a target expression. Callers may still use the original type to tell arrays\n     and references apart, since their *uses* (e.g. addr-of) compile in a type-directed way based on\n     the *original* rust type *)\n  match p.kind with\n  | PlaceLocal var_id ->\n      let i, t = lookup env var_id in\n      K.(with_type t (EBound i))\n  | PlaceGlobal { id; _ } ->\n      let global = env.get_nth_global id in\n      K.with_type (typ_of_ty env p.ty) (K.EQualified (lid_of_name env global.item_meta.name))\n  | PlaceProjection (sub_place, PtrMetadata) -> begin\n      let e = expression_of_place env sub_place in\n      match e.typ with\n      | TApp (lid, [ _; meta_ty ]) when is_dst_ref lid ->\n          (* XXX need to adjust *)\n          K.(with_type meta_ty (EField (e, \"meta\")))\n      (* In cases like `PtrMetadata(T)` when `T` is a type variable or some types with unresolved type variable,\n       We cannot tell the correct metadata type from it until fully monomorphized.\n       But we can surely rely on monomorphized LLBC, and we ignore handling such cases in Eurydice. *)\n      | ty when has_unresolved_generic ty ->\n          failwith\n            \"Eurydice do not handle ptr-metadata for generic types. Consider using monomorphized \\\n             LLBC.\"\n      (* Otherwise, fetching ptr-metadata from a non-DST simply results in `()`\n       When a type is fully resolved and it is not `Eurydice::DstRef`, we can be confident that it is not a DST. *)\n      | _ -> K.with_type TUnit K.EUnit\n    end\n  | PlaceProjection (sub_place, pe) -> begin\n      (* Can't evaluate this here because of the special case for DSTs. *)\n      let sub_e = lazy (expression_of_place env sub_place) in\n      let ( !* ) = Lazy.force in\n      (* L.log \"AstOfLlbc\" \"e=%a\\nty=%s\\npe=%s\\n\" pexpr sub_e (C.show_ty sub_place.ty) *)\n      (*   (C.show_projection_elem pe); *)\n      match pe, sub_place, sub_place.ty with\n      (* slices simply cannot be dereferenced into places which have unknown size.\n         They are supposed to be reborrowed again directly after the deref which is handled in expression_of_rvalue *)\n      | C.Deref, _, TRef (_, TSlice _, _) | C.Deref, _, TRawPtr (TSlice _, _) -> assert false\n      | ( C.Deref,\n          _,\n          (TRawPtr _ | TRef _ | TAdt { id = TBuiltin TBox; generics = { types = [ _ ]; _ } }) ) ->\n          (* All types represented as a pointer at run-time, compiled to a C pointer *)\n          begin\n            match !*sub_e.K.typ with\n            | TBuf (t_pointee, _) ->\n                let const =\n                  match sub_place.ty with\n                  | TRef (_, _, k) -> const_of_ref_kind k\n                  | _ -> false\n                in\n                Krml.Helpers.(mk_deref ~const t_pointee !*sub_e.K.node)\n            | t ->\n                L.log \"AstOfLlbc\" \"UNHANDLED DEREFERENCE\\ne=%a\\nt=%a\\nty=%s\\npe=%s\\n\" pexpr !*sub_e\n                  ptyp t (C.show_ty sub_place.ty) (C.show_projection_elem pe);\n                failwith \"unhandled dereference\"\n          end\n      | ( Field (ProjAdt (typ_id, None), field_id),\n          { kind = PlaceProjection (sub_place, C.Deref); _ },\n          C.TAdt _ ) ->\n          let field_name = lookup_field env typ_id field_id in\n          let sub_e = expression_of_place env sub_place in\n          let place_typ = typ_of_ty env p.ty in\n          let const =\n            match sub_place.ty with\n            | TRef (_, _, k) -> const_of_ref_kind k\n            | _ -> false\n          in\n          begin\n            match sub_e.K.typ with\n            | K.TApp (dst_ref_hd, [ dst_t; _meta ]) when is_dst_ref dst_ref_hd ->\n                (* getting field from a fat pointer of DST  *)\n                (* XXX need to adjust *)\n                K.with_type place_typ (K.EField (mk_dst_deref env dst_t sub_e, field_name))\n            | _ ->\n                (* Same as below *)\n                K.with_type place_typ\n                  (K.EField\n                     ( Krml.Helpers.(\n                         mk_deref ~const\n                           (Krml.Helpers.assert_tbuf_or_tarray sub_e.K.typ)\n                           sub_e.K.node),\n                       field_name ))\n          end\n      | Field (ProjAdt (typ_id, variant_id), field_id), _, C.TAdt _ -> begin\n          let place_typ = typ_of_ty env p.ty in\n          match variant_id with\n          | None ->\n              let field_name = lookup_field env typ_id field_id in\n              K.with_type place_typ (K.EField (!*sub_e, field_name))\n          | Some variant_id ->\n              let variant = find_nth_variant env typ_id variant_id in\n              let field_id = C.FieldId.to_int field_id in\n              let field = List.nth variant.fields field_id in\n              let b =\n                Krml.Helpers.fresh_binder (mk_field_name field.C.field_name field_id) place_typ\n              in\n              K.with_type place_typ\n                K.(\n                  EMatch\n                    ( Unchecked,\n                      !*sub_e,\n                      [\n                        ( [ b ],\n                          with_type !*sub_e.typ\n                            (PCons\n                               ( variant.C.variant_name,\n                                 List.init (List.length variant.fields) (fun i ->\n                                     if i = field_id then\n                                       with_type place_typ (PBound 0)\n                                     else\n                                       with_type TAny PWild) )),\n                          with_type place_typ (EBound 0) );\n                      ] ))\n        end\n      | ( Field (ProjTuple n, i),\n          _,\n          C.TAdt { id = _; generics = { types = tys; const_generics = cgs; _ } } ) ->\n          let place_typ = typ_of_ty env p.ty in\n          assert (cgs = []);\n          (* match e with (_, ..., _, x, _, ..., _) -> x *)\n          let i = Charon.Types.FieldId.to_int i in\n          if List.length tys = 1 then begin\n            assert (i = 0);\n            (* Normalized one-element tuple *)\n            !*sub_e\n          end\n          else\n            let ts =\n              match !*sub_e.typ with\n              | TTuple ts -> ts\n              | _ -> assert false\n            in\n            assert (List.length ts = n);\n            let binders = [ Krml.Helpers.fresh_binder (uu ()) place_typ ] in\n            let pattern =\n              K.with_type !*sub_e.typ\n                (K.PTuple\n                   (List.mapi\n                      (fun i' t ->\n                        K.with_type t\n                          (if i = i' then\n                             K.PBound 0\n                           else\n                             PWild))\n                      ts))\n            in\n            let expr = K.with_type place_typ (K.EBound 0) in\n            K.with_type place_typ (K.EMatch (Unchecked, !*sub_e, [ binders, pattern, expr ]))\n      (* | PlaceProjection () *)\n      | _ -> fail \"unexpected / ill-typed projection\"\n    end\n\nlet expression_of_place (env : env) (p : C.place) : K.expr =\n  L.log \"AstOfLlbc\" \"expression of place: %s\" (C.show_place p);\n  expression_of_place env p\n\n(* We produce bit-wise operators first, then when the type is of booleans, we\n   change into the non-B variants (Rust does not distinguish between bitwise and\n   boolean operators) *)\nlet op_of_unop (op : C.unop) : Krml.Constant.op =\n  match op with\n  | C.Not -> BNot\n  | C.Neg _ -> Neg\n  | _ -> failwith (C.show_unop op)\n\nlet op_of_binop (op : C.binop) : Krml.Constant.op =\n  match op with\n  | C.BitXor -> BXor\n  | C.BitAnd -> BAnd\n  | C.BitOr -> BOr\n  | C.Eq -> Eq\n  | C.Lt -> Lt\n  | C.Le -> Lte\n  | C.Ne -> Neq\n  | C.Ge -> Gte\n  | C.Gt -> Gt\n  | C.Div _ -> Div\n  | C.Rem _ -> Mod\n  | C.Add _ -> Add\n  | C.Sub _ -> Sub\n  | C.Mul _ -> Mult\n  | C.Shl _ -> BShiftL\n  | C.Shr _ -> BShiftR\n  | _ -> fail \"unsupported operator: %s\" (C.show_binop op)\n\nlet op_128_of_op kind (op : K.op) : K.expr =\n  let op_name =\n    match op with\n    | Add -> \"add\"\n    | Sub -> \"sub\"\n    | Mult -> \"mul\"\n    | Div -> \"div\"\n    | AddW -> \"add\"\n    | SubW -> \"sub\"\n    | MultW -> \"mul\"\n    | DivW -> \"div\"\n    | Mod -> \"mod\"\n    | BShiftL -> \"shl\"\n    | BShiftR -> \"shr\"\n    | BAnd -> \"band\"\n    | BOr -> \"bor\"\n    | BXor -> \"bxor\"\n    | Eq -> \"eq\"\n    | Neq -> \"neq\"\n    | Lt -> \"lt\"\n    | Lte -> \"lte\"\n    | Gt -> \"gt\"\n    | Gte -> \"gte\"\n    | Neg -> \"neg\"\n    | BNot -> \"bnot\"\n    | _ -> failwith \"Unsupported operation for uint128\"\n  in\n  Builtin.get_128_op (kind, op_name)\n\nlet mk_op_app (op : K.op) (first : K.expr) (rest : K.expr list) : K.expr =\n  (* For 128-bit integers, the case is different: convert the operator & match the case here *)\n  let op, ret_t =\n    if first.typ = Builtin.int128_t || first.typ = Builtin.uint128_t then\n      let op =\n        if first.typ = Builtin.int128_t then\n          op_128_of_op \"i\" op\n        else\n          op_128_of_op \"u\" op\n      in\n      let ret_t, _ = Krml.Helpers.flatten_arrow op.typ in\n      op, ret_t\n    else\n      (* Otherwise, simply the normal case *)\n      let op =\n        if first.typ = K.TBool then\n          match op with\n          | BNot -> Krml.Constant.Not\n          | BAnd -> And\n          | BOr -> Or\n          | BXor -> Xor\n          | op -> op\n        else\n          op\n      in\n      let op_t = Krml.Helpers.type_of_op op first.typ in\n      let op = K.(with_type op_t (EOp (op, first.typ))) in\n      let ret_t, _ = Krml.Helpers.flatten_arrow op_t in\n      op, ret_t\n  in\n  (* Rust is super lenient regarding the type of shift operators, we impose u32 -- see\n     https://doc.rust-lang.org/std/ops/trait.Shl.html\n  *)\n  (* Additionally, if the op is `shift` (BShiftL/R for usual, (u)int128_shl/r for 128 bits)\n    then the `rest` should be with a single element of type `uint32_t`\n    if it is not, turn to type casting. *)\n  (* Helper functions for this process *)\n  let is_128_bit_shift_lident lident =\n    [ Krml.Constant.BShiftL; BShiftR ]\n    |> List.concat_map (fun op -> [ op_128_of_op \"i\" op; op_128_of_op \"u\" op ])\n    |> List.map (fun (x : K.expr) -> Krml.Helpers.assert_elid x.K.node)\n    |> List.mem lident\n  in\n  let modify_rest : K.expr list -> K.expr list = function\n    | [ e2 ] -> begin\n        match e2.node with\n        | EConstant (_, s) ->\n            let i = int_of_string s in\n            assert (i >= 0);\n            [ Krml.Helpers.mk_uint32 i ]\n        | _ -> [ K.(with_type (TInt UInt32) (ECast (e2, TInt UInt32))) ]\n      end\n    | _ ->\n        failwith\n          \"Invalid call to binary operator `shiftl` or `shiftr` -- the number of operands is not 2\"\n  in\n  (* Modify here *)\n  let rest =\n    match op.node with\n    | EOp (BShiftL, _) | EOp (BShiftR, _) -> modify_rest rest\n    | EQualified lident when is_128_bit_shift_lident lident -> modify_rest rest\n    | _ -> rest\n  in\n  K.(with_type ret_t (EApp (op, first :: rest)))\n\nlet addrof ~const (e : K.expr) = K.(with_type (TBuf (e.typ, const)) (EAddrOf e))\n\n(** Handling trait clauses as dictionaries *)\n\n(* There are two ways that we skip synthesis of trait methods in function calls. The first one is if\n   a trait declaration is blocklisted. This happens if the trait has built-in support (e.g.\n   FnMut), or if the trait relies on unsupported features (e.g. provided methods,\n   used by Iterator's chunk_next, for instance; or associated types; or parent\n   clauses). The second way we skip trait methods (further down) is if the\n   function is a known builtin implementation. *)\nlet blocklisted_trait_decls =\n  [\n    (* These don't have methods *)\n    \"core::marker::Sized\";\n    \"core::marker::MetaSized\";\n    \"core::marker::PointeeSized\";\n    \"core::marker::Send\";\n    \"core::marker::Sync\";\n    \"core::marker::Tuple\";\n    \"core::marker::Copy\";\n    (* The traits below *should* be handled properly ASAP. But for now, we have specific *instances*\n       of those trait methods in the builtin lookup table, which we then implement by hand with\n       macros. *)\n    \"core::iter::traits::iterator::Iterator\";\n    \"core::iter::range::Step\";\n    (* TODO: figure out what to do with those *)\n    \"core::clone::Clone\";\n    (* TODO: these ones carry the drop_in_place code, but sometimes there's no\n       explicit impl (because it's trivial e.g. for usize) which is tricky. *)\n    \"core::marker::Destruct\";\n    \"core::fmt::Debug\";\n    \"core::ptr::metadata::Thin\";\n  ]\n\n(* Interpret a Rust function type, with trait bounds, into the krml Ast, providing:\n   - the type scheme (fields may be zero)\n   - the cg types, which only contains the original Rust const generic variables\n   - the argument types, prefixed by the dictionary-style passing of trait clause methods\n   - the return type\n   - whether the function is builtin, or not. *)\ntype lookup_result = {\n  ts : K.type_scheme; (* just for a sanity check *)\n  cg_types : K.typ list;\n  arg_types : K.typ list;\n  ret_type : K.typ;\n  is_known_builtin : bool;\n}\n\nlet maybe_ts ts t =\n  if ts.K.n <> 0 || ts.n_cgs <> 0 then\n    K.TPoly (ts, t)\n  else\n    t\n\n(* For a given function, a (flat) list of all the trait methods that are\n   transitively, possibly called by this function, based on the trait bounds in\n   its signature.\n\n   Using tests/where_clauses_simple as an example.\n\n   fn double<T: Ops + Copy, U: Ops+Copy> (...)\n\n   this gets desugared to fn double<T,U> where\n     T: Ops,      <-- ClauseId 0 (required_methods: add, of_u32)\n     T: Copy,     <-- ClauseId 1 (builtin, so neither required nor provided methods)\n     U: Ops,      <-- ClauseId 2 (required_methods: add, of_u32)\n     U: Copy,     <-- ClauseId 3 (builtin, so neither required nor provided methods)\n\n   the types we obtain by looking up the trait declaration have Self as 0\n   (DeBruijn).\n\n   When building a function declaration, this synthesizes all the extra binders\n   required for trait methods (passed as function pointers). Assumes type\n   variables have been suitably bound in the environment.\n*)\nlet rec mk_clause_binders_and_args env ?depth ?clause_ref (trait_clauses : C.trait_param list) :\n    (var_id * K.typ) list =\n  let depth = Option.value ~default:\"\" depth in\n  List.concat_map\n    (fun tc ->\n      let {\n        C.clause_id;\n        trait = { binder_value = { id = trait_decl_id; generics = trait_generics }; _ };\n        _;\n      } =\n        tc\n      in\n      let trait_decl = env.get_nth_trait_decl trait_decl_id in\n      (* Every item inside the `trait_decl` may refer to generic params of the\n         trait. To get items that are valid to return outside of the scope of\n         the trait, we must substitute them with the given generics. We should\n         in principle substitute everything but we currently don't. This will\n         likely be a source of bugs. *)\n      let subst =\n        Charon.Substitute.make_subst_from_generics trait_decl.generics trait_generics Self\n      in\n      let substitute_visitor = Charon.Substitute.st_substitute_visitor in\n\n      let name = string_of_name env trait_decl.item_meta.name in\n      let clause_ref : C.trait_ref =\n        Option.value\n          ~default:C.{ kind = C.Clause (Free clause_id); trait_decl_ref = tc.trait }\n          clause_ref\n      in\n\n      if List.mem name blocklisted_trait_decls then\n        []\n      else begin\n        (* FYI, some clauses like Copy have neither required nor provided methods. *)\n        L.log \"TraitClauses\"\n          \"%sclause decl %s\\n\\\n          \\  id %d:\\n\\\n          \\  decl_generics.types are %s\\n\\\n          \\  decl_generics.const_generics are %s\\n\\\n          \\  methods: %d\\n\"\n          depth name\n          (C.TraitClauseId.to_int clause_id)\n          (String.concat \" ++ \" (List.map C.show_ty trait_generics.C.types))\n          (String.concat \" ++ \" (List.map C.show_constant_expr trait_generics.C.const_generics))\n          (C.TraitMethodId.Map.cardinal trait_decl.C.methods);\n\n        (* 1. Associated constants *)\n        List.map\n          (fun (const : C.trait_assoc_const) ->\n            let trait_name = trait_decl.C.item_meta.name in\n            let pretty_name = string_of_name env trait_name ^ \"_\" ^ const.C.name in\n            let t = substitute_visitor#visit_ty subst const.C.ty in\n            let t = typ_of_ty env t in\n            ( TraitClauseConstant\n                { item_name = const.C.name; pretty_name; clause_id = clause_ref.kind },\n              t ))\n          trait_decl.C.consts\n        (* 2. Trait methods *)\n        @ List.map\n            (fun ((method_id, mthd) : _ * C.trait_method C.binder) ->\n              let item_name = mthd.C.binder_value.C.name in\n              let trait_name = trait_decl.C.item_meta.name in\n              let pretty_name = string_of_name env trait_name ^ \"_\" ^ item_name in\n\n              (* Ask charon for the properly bound method signature. *)\n              let bound_method_sig : C.fun_sig C.binder C.item_binder =\n                Option.get (Charon.Substitute.lookup_method_sig env.crate trait_decl_id method_id)\n              in\n              (* First we substitute the trait generics. *)\n              let bound_method_sig : C.fun_sig C.binder =\n                Charon.Substitute.apply_args_to_item_binder clause_ref.kind trait_generics\n                  (substitute_visitor#visit_binder substitute_visitor#visit_fun_sig)\n                  bound_method_sig\n              in\n\n              (* We then construct a polymorphic signature for this method.\n                 Its generics are the method generics (the ones in the binder).\n                 *)\n              let method_sig =\n                Charon.Substitute.(\n                  (* Variables bound in the inner binder are `Bound`, which\n                     eurydice doesn't handle. We therefore make them all `Free`\n                     variables, shifting indices to avoid overlap with existing\n                     in-scope variables. *)\n                  let ambient_ts =\n                    { K.n = List.length env.type_binders; K.n_cgs = List.length env.cg_binders }\n                  in\n                  let shift_ty_var varid =\n                    C.TypeVarId.of_int (C.TypeVarId.to_int varid + ambient_ts.K.n)\n                  in\n                  let shift_cg_var varid =\n                    C.ConstGenericVarId.of_int\n                      (C.ConstGenericVarId.to_int varid + ambient_ts.K.n_cgs)\n                  in\n                  (* Replace bound variables with free variables that don't\n                     overlap with existing ones. *)\n                  let subst =\n                    subst_remove_binder_zero\n                      {\n                        empty_free_sb_subst with\n                        ty_sb_subst =\n                          (fun varid -> empty_free_sb_subst.ty_sb_subst (shift_ty_var varid));\n                        cg_sb_subst =\n                          (fun varid -> empty_free_sb_subst.cg_sb_subst (shift_cg_var varid));\n                      }\n                  in\n\n                  let signature =\n                    st_substitute_visitor#visit_fun_sig subst bound_method_sig.binder_value\n                  in\n                  (* Gotta shift the params too, as trait clause may refer to bound types. *)\n                  let method_params =\n                    st_substitute_visitor#visit_generic_params subst bound_method_sig.binder_params\n                  in\n                  (* Finally, update the parameters so they use the new, shifted indices. *)\n                  let method_params =\n                    {\n                      method_params with\n                      types =\n                        List.map\n                          (fun (var : C.type_param) ->\n                            { var with C.index = shift_ty_var var.C.index })\n                          method_params.types;\n                      const_generics =\n                        List.map\n                          (fun (var : C.const_generic_param) ->\n                            { var with C.index = shift_cg_var var.C.index })\n                          method_params.const_generics;\n                    }\n                  in\n                  { C.item_binder_params = method_params; item_binder_value = signature })\n              in\n              L.log \"TraitClauses\" \"%s computed method signature %s::%s:\\n%s\" depth name item_name\n                (Charon.Print.fun_sig_to_string env.format_env \"\" \" \" method_sig);\n              let ts, t = typ_of_signature env method_sig in\n              let t = maybe_ts ts t in\n              ( TraitClauseMethod\n                  { method_id; item_name; pretty_name; clause_id = clause_ref.kind; ts },\n                t ))\n            (C.TraitMethodId.Map.to_list trait_decl.C.methods)\n        (* 1 + 2, recursively, for parent traits *)\n        @ List.concat_map\n            (fun (parent_clause : C.trait_param) ->\n              (* Make the clause valid outside the scope of the trait decl. *)\n              let parent_clause = substitute_visitor#visit_trait_param subst parent_clause in\n              (* Mapping of the methods of the parent clause *)\n              let clause_ref : C.trait_ref =\n                {\n                  kind = ParentClause (clause_ref, parent_clause.clause_id);\n                  trait_decl_ref = parent_clause.trait;\n                }\n              in\n              mk_clause_binders_and_args env ~depth:(depth ^ \"--\") ~clause_ref [ parent_clause ])\n            trait_decl.C.implied_clauses\n      end)\n    trait_clauses\n\nand lookup_signature env depth (signature : C.bound_fun_sig) : lookup_result =\n  let {\n    C.item_binder_params = { types = type_params; const_generics; trait_clauses; _ };\n    item_binder_value = { C.inputs; output; _ };\n  } =\n    signature\n  in\n  L.log \"Calls\" \"%s# Lookup Signature\\n%s--> args: %s, ret: %s\\n\" depth depth\n    (String.concat \" ++ \" (List.map (Charon.Print.ty_to_string env.format_env) inputs))\n    (Charon.Print.ty_to_string env.format_env output);\n  L.log \"Calls\" \"%sType parameters for this signature: %s\\n\" depth\n    (String.concat \" ++ \" (List.map Charon.Print.type_param_to_string type_params));\n  let env = push_cg_binders env const_generics in\n  let env = push_type_binders env type_params in\n\n  let clause_binders = mk_clause_binders_and_args env trait_clauses in\n  debug_trait_clause_mapping env clause_binders;\n  let clause_ts = List.map snd clause_binders in\n\n  {\n    ts = { n = List.length type_params; n_cgs = List.length const_generics };\n    cg_types = List.map (fun (v : C.const_generic_param) -> typ_of_ty env v.ty) const_generics;\n    arg_types =\n      (clause_ts\n      @ List.map (typ_of_ty env) inputs\n      @\n      if inputs = [] then\n        [ K.TUnit ]\n      else\n        []);\n    ret_type = typ_of_ty env output;\n    is_known_builtin = false;\n  }\n\n(* Transforms a lookup result into a usable type, taking into account the fact that the internal Ast\n   is ML-style and does not have zero-argument functions. *)\nand typ_of_signature env signature =\n  let { cg_types = const_generics_ts; arg_types = inputs; ret_type = output; ts; _ } =\n    lookup_signature env \"\" signature\n  in\n\n  let adjusted_inputs = const_generics_ts @ inputs in\n\n  let t = Krml.Helpers.fold_arrow adjusted_inputs output in\n  ts, t\n\nand debug_trait_clause_mapping env (mapping : (var_id * K.typ) list) =\n  if mapping = [] then\n    L.log \"TraitClauses\" \"# Debug Mapping\\nIn this function, trait clause mapping is empty\"\n  else\n    L.log \"TraitClauses\"\n      \"# Debug Mapping\\nIn this function, calls to trait bound methods are as follows:\";\n  List.iter\n    (fun (clause_entry, t) ->\n      match clause_entry with\n      | TraitClauseMethod { clause_id; item_name; ts; _ } ->\n          L.log \"TraitClauses\" \"@@@ method name: %s\" item_name;\n          L.log \"TraitClauses\" \"%s::%s: %a has trait-level %d const generics, %d type vars\\n\"\n            (Charon.Print.trait_ref_kind_to_string env.format_env None clause_id)\n            item_name ptyp t ts.K.n_cgs ts.n\n      | TraitClauseConstant { clause_id; item_name; _ } ->\n          L.log \"TraitClauses\" \"@@@ method name: %s\" item_name;\n          L.log \"TraitClauses\" \"%s::%s: associated constant %a\\n\"\n            (Charon.Print.trait_ref_kind_to_string env.format_env None clause_id)\n            item_name ptyp t\n      | _ -> ())\n    mapping\n\n(** Compiling function instantiations into krml application nodes. *)\n\n(* First step: produce an expression for the un-instantiated function reference, along with all the\n   type information required to build a proper instantiation. The function reference is an expression\n   that is either a reference to a variable in scope (trait methods), or to a top-level qualified\n   name, which encompasses both externally-defined function (builtins), or regular functions. *)\nlet lookup_fun (env : env) depth (fn_ptr : C.fn_ptr) : K.expr' * lookup_result =\n  let open RustNames in\n  let matches p = Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config p fn_ptr in\n  let builtin b =\n    let { Builtin.name; typ; n_type_args; cg_args; _ } = b in\n    let ret_type, arg_types = Krml.Helpers.flatten_arrow typ in\n    let ts = { K.n = n_type_args; K.n_cgs = List.length cg_args } in\n    K.EQualified name, { ts; arg_types; ret_type; cg_types = cg_args; is_known_builtin = true }\n  in\n  match List.find_opt (fun (p, _) -> matches p) (known_builtins !Options.no_const) with\n  | Some (_, b) -> builtin b\n  | None -> (\n      let lookup_result_of_fun_id fun_id =\n        let decl = env.get_nth_function fun_id in\n        let lid = lid_of_name env decl.C.item_meta.name in\n        L.log \"Calls\" \"%s--> name: %a\" depth plid lid;\n        K.EQualified lid, lookup_signature env depth (C.bound_fun_sig_of_decl decl)\n      in\n\n      match fn_ptr.kind with\n      | FunId (FRegular f) -> lookup_result_of_fun_id f\n      | FunId (FBuiltin f) -> fail \"unknown builtin function: %s\" (C.show_builtin_fun_id f)\n      | TraitMethod (trait_ref, method_id, _trait_opaque_signature) -> (\n          match trait_ref.kind with\n          | TraitImpl { id; _ } ->\n              let trait_impl = env.get_nth_trait_impl id in\n              let f =\n                try C.TraitMethodId.Map.find method_id trait_impl.methods\n                with Not_found ->\n                  fail \"Error looking trait impl: %s%!\"\n                    (Charon.Print.fn_ptr_to_string env.format_env fn_ptr)\n              in\n              lookup_result_of_fun_id f.C.binder_value.id\n          | (Clause _ | ParentClause _) as tcid ->\n              let f, t, sig_info = lookup_clause_method env tcid method_id in\n              (* the sig_info is kind of redundant here *)\n              let t =\n                match t with\n                | TPoly (_, t) -> t\n                | _ -> t\n              in\n              let ret_type, arg_types = Krml.Helpers.flatten_arrow t in\n              let cg_types, arg_types = Krml.KList.split sig_info.n_cgs arg_types in\n              EBound f, { ts = sig_info; cg_types; arg_types; ret_type; is_known_builtin = false }\n          | _ ->\n              fail \"Error looking trait ref: %s%!\"\n                (Charon.Print.fn_ptr_to_string env.format_env fn_ptr)))\n\nlet fn_ptr_is_opaque env (fn_ptr : C.fn_ptr) =\n  match fn_ptr.kind with\n  | FunId (FRegular id) -> (\n      try\n        match (env.get_nth_function id).body with\n        | StructuredBody _ -> false\n        | _ -> true\n      with Not_found -> false)\n  | _ -> false\n\n(* This is a very core piece of logic that transforms a Rust fn_ptr into a krml AST node that\n   contains type application, const generic applications, and application of trait methods to\n   implement the dictionary-passing style. *)\nlet rec expression_of_fn_ptr env depth (fn_ptr : C.fn_ptr) =\n  let {\n    C.generics = { types = type_args; const_generics = const_generic_args; trait_refs; _ };\n    kind;\n    _;\n  } : C.fn_ptr =\n    fn_ptr\n  in\n\n  (* We handle any kind of fn_ptr, whether it's a concrete function call, a\n     concrete trait implementation method call, or an abstract trait method call\n     (e.g. a call to T::f when T is a trait bound in scope). *)\n  L.log \"Calls\" \"%sVisiting call: %s\" depth (Charon.Print.fn_ptr_to_string env.format_env fn_ptr);\n  L.log \"Calls\" \"%s--> %d type_args, %d const_generics, %d trait_refs\" depth (List.length type_args)\n    (List.length const_generic_args) (List.length trait_refs);\n\n  (* In case this is a call to a trait implementation method, there are two\n     levels of applications: the trait-generic arguments (i.e. impl <T: ...> for ...)\n     and the method-generic arguments (i.e. fn f<U: ...>). The method appears as\n     a top-level function that receives all the arguments for T and U (types,\n     const generics, trait references), and when we synthesize a call node, we\n     do behave accordingly and provide arguments for both T and U. *)\n  let type_args, const_generic_args, trait_refs =\n    let generics =\n      match kind with\n      | TraitMethod ({ kind = TraitImpl { generics; _ }; _ }, _, _) ->\n          L.log \"Calls\" \"%s--> this is a trait method\" depth;\n          generics\n      | _ -> C.empty_generic_args\n    in\n    ( generics.types @ type_args,\n      generics.const_generics @ const_generic_args,\n      generics.trait_refs @ trait_refs )\n  in\n\n  L.log \"Calls\" \"%s--> %d type_args, %d const_generics, %d trait_refs\" depth (List.length type_args)\n    (List.length const_generic_args) (List.length trait_refs);\n  L.log \"Calls\" \"%s--> trait_refs: %s\\n\" depth\n    (String.concat \" ++ \" (List.map (Charon.Print.trait_ref_to_string env.format_env) trait_refs));\n  L.log \"Calls\" \"%s--> pattern: %s\" depth (string_of_fn_ptr env fn_ptr);\n  L.log \"Calls\" \"%s--> type_args: %s\" depth\n    (String.concat \", \" (List.map (Charon.Print.ty_to_string env.format_env) type_args));\n\n  (* The function itself, along with information about its *signature*. *)\n  let f, { ts; arg_types = inputs; ret_type = output; cg_types = cg_inputs; is_known_builtin } =\n    lookup_fun env depth fn_ptr\n  in\n  L.log \"Calls\" \"%s--> %d inputs: %a\" depth (List.length inputs) ptyps inputs;\n  L.log \"Calls\" \"%s--> is_known_builtin?: %b\" depth is_known_builtin;\n\n  (* Translate effective type and cg arguments. *)\n  let const_generic_args =\n    match f, type_args with\n    | EQualified lid, [ _; TRef (_, TArray (_, cg), _); _ ]\n      when lid = Builtin.slice_to_ref_array.name ->\n        (* Special case, we *do* need to retain the length, which would disappear if we simply did\n           typ_of_ty (owing to array decay rules). *)\n        [ expression_of_const_generic env cg ]\n    | _ -> List.map (expression_of_const_generic env) const_generic_args\n  in\n  let type_args = List.map (typ_of_ty env) type_args in\n\n  (* Handling trait implementations for generic trait bounds in the callee. We\n     synthesize krml expressions that correspond to each one of the trait methods\n     that the callee expects. Order matters here. *)\n  let fn_ptrs : K.expr list =\n    if is_known_builtin then\n      (* If this is a known builtin implementation, we do not materialize trait methods, on the\n         basis that this is likely something from the standard library that exercises more features\n         that we can support, and that since we hand-write it, we don't need this level of precision\n         anyhow. *)\n      []\n    else\n      (* MUST have the same structure as mk_clause_binders_and_args *)\n      let rec build_trait_ref_mapping depth (trait_refs : C.trait_ref list) =\n        List.concat_map\n          (fun (trait_ref : C.trait_ref) ->\n            let name =\n              string_of_name env\n                (env.get_nth_trait_decl trait_ref.trait_decl_ref.binder_value.id).item_meta.name\n            in\n            L.log \"Calls\" \"%s--> trait_ref %s: %s\\n\" depth name (C.show_trait_ref trait_ref);\n\n            match trait_ref.kind with\n            | _ when List.mem name blocklisted_trait_decls ->\n                (* Trait not supported -- don't synthesize arguments *)\n                []\n            | TraitImpl { id = impl_id; generics = _generics } ->\n                (* Call-site has resolved trait clauses into a concrete trait implementation. *)\n                let trait_impl : C.trait_impl = env.get_nth_trait_impl impl_id in\n\n                (* This must be in agreement, and in the same order as mk_clause_binders_and_args *)\n                List.map\n                  (fun ((_item_name, { C.id; generics }) : _ * C.global_decl_ref) ->\n                    if\n                      not\n                        (generics.types = [] && generics.const_generics = []\n                       && generics.trait_refs = [])\n                    then\n                      failwith \"TODO: polymorphic globals\";\n                    let global = env.get_nth_global id in\n                    K.with_type (typ_of_ty env global.ty)\n                      (K.EQualified (lid_of_name env global.item_meta.name)))\n                  trait_impl.consts\n                @ List.map\n                    (fun ((method_id, bound_fn) : _ * C.fun_decl_ref C.binder) ->\n                      let fun_decl_id = bound_fn.C.binder_value.C.id in\n                      let fn_ptr : C.fn_ptr =\n                        {\n                          kind = TraitMethod (trait_ref, method_id, fun_decl_id);\n                          generics = Charon.TypesUtils.empty_generic_args;\n                        }\n                      in\n                      let fn_ptr = fst3 (expression_of_fn_ptr env (depth ^ \"  \") fn_ptr) in\n                      fn_ptr)\n                    (C.TraitMethodId.Map.to_list trait_impl.methods)\n                @ build_trait_ref_mapping (\"  \" ^ depth)\n                    (let subst =\n                       Charon.Substitute.make_subst_from_generics trait_impl.generics _generics Self\n                     in\n                     (*_generics.trait_refs*)\n                     List.map\n                       (Charon.Substitute.st_substitute_visitor#visit_trait_ref subst)\n                       trait_impl.implied_trait_refs)\n            | Clause _ as clause_id ->\n                (* Caller it itself polymorphic and refers to one of its own clauses to synthesize\n                   the clause arguments at call-site. We must pass whatever is relevant for this\n                   clause, *transitively* (this means all the reachable parents). *)\n                let rec relevant = function\n                  | C.ParentClause (tref', _) -> relevant tref'.kind\n                  | clause_id' -> clause_id = clause_id'\n                in\n                List.rev\n                  (Krml.KList.filter_mapi\n                     (fun i (var, t) ->\n                       match var with\n                       | TraitClauseMethod { clause_id = clause_id'; _ }\n                       | TraitClauseConstant { clause_id = clause_id'; _ }\n                         when relevant clause_id' -> Some K.(with_type t (EBound i))\n                       | _ -> None)\n                     env.binders)\n            | ParentClause (tref, clause_id) ->\n                let decl_id = tref.trait_decl_ref.binder_value.id in\n                let trait_decl = env.get_nth_trait_decl decl_id in\n                let name = string_of_name env trait_decl.item_meta.name in\n                let clause_id = C.TraitClauseId.to_int clause_id in\n                let parent_clause = List.nth trait_decl.implied_clauses clause_id in\n                let parent_clause_decl =\n                  env.get_nth_trait_decl parent_clause.trait.binder_value.id\n                in\n                let parent_name = string_of_name env parent_clause_decl.item_meta.name in\n                Krml.KPrint.bprintf \"looking up parent clause #%d of decl=%s = %s\\n\" clause_id name\n                  parent_name;\n                if List.mem parent_name blocklisted_trait_decls then\n                  []\n                else\n                  failwith\n                    (\"Don't know how to resolve trait_ref above (2): \"\n                    ^ Charon.Print.trait_ref_to_string env.format_env trait_ref)\n            | _ ->\n                failwith\n                  (\"Don't know how to resolve trait_ref above (2): \"\n                  ^ Charon.Print.trait_ref_to_string env.format_env trait_ref))\n          trait_refs\n      in\n      build_trait_ref_mapping depth trait_refs\n  in\n  L.log \"Calls\" \"%s--> trait method impls: %d\" depth (List.length fn_ptrs);\n\n  (* This needs to match what is done in the FunGroup case (i.e. when we extract\n     a definition). There are two behaviors depending on whether the function is\n     builtin or not. *)\n  let inputs =\n    if inputs = [] then\n      [ K.TUnit ]\n    else\n      inputs\n  in\n\n  (* From here on, this is only krml logic, which is about building\n     properly-annotated internal nodes that take care of instantiating generic\n     type schemes, dealing with type applications, const genericss, etc.\n     followed by the application of trait methods (in the special TApp node). *)\n  let t_unapplied = maybe_ts ts (Krml.Helpers.fold_arrow (cg_inputs @ inputs) output) in\n  let offset = List.length env.binders - List.length env.cg_binders in\n  L.log \"Calls\" \"%s--> t_unapplied: %a\" depth ptyp t_unapplied;\n  L.log \"Calls\" \"%s--> inputs: %a\" depth ptyps inputs;\n  L.log \"Calls\" \"%s--> const_generic_args: %a (offset: %d)\" depth pexprs const_generic_args offset;\n  L.log \"Calls\" \"%s--> %d fn_ptrs: %a (offset: %d)\" depth (List.length fn_ptrs)\n    (fun k e ->\n      List.iter\n        (fun e ->\n          pexpr k e;\n          Buffer.add_string k \": \";\n          ptyp k e.typ)\n        e)\n    fn_ptrs offset;\n\n  let t_applied =\n    match t_unapplied with\n    | TPoly ({ n; n_cgs }, t) ->\n        let ts =\n          { K.n = n - List.length type_args; n_cgs = n_cgs - List.length const_generic_args }\n        in\n        if ts.n > 0 || ts.n_cgs > 0 then\n          K.TPoly (ts, t)\n        else\n          t\n    | t -> t\n  in\n  L.log \"Calls\" \"%s--> t_applied (1): %a\" depth ptyp t_applied;\n  let t_applied =\n    Krml.DeBruijn.(subst_tn type_args (subst_ctn offset const_generic_args t_applied))\n  in\n  L.log \"Calls\" \"%s--> t_applied (2): %a\" depth ptyp t_applied;\n  let t_applied =\n    match t_applied with\n    | TPoly (ts, t) ->\n        assert (fn_ptrs = []);\n        let ret, args = Krml.Helpers.flatten_arrow t in\n        let _, args = Krml.KList.split (List.length const_generic_args) args in\n        K.TPoly (ts, Krml.Helpers.fold_arrow args ret)\n    | t ->\n        let ret, args = Krml.Helpers.flatten_arrow t in\n        if List.length const_generic_args + List.length fn_ptrs > List.length args then\n          L.log \"Calls\" \"ERROR in %s\" (Charon.Print.fn_ptr_to_string env.format_env fn_ptr);\n        let _, args =\n          Krml.KList.split (List.length const_generic_args + List.length fn_ptrs) args\n        in\n        Krml.Helpers.fold_arrow args ret\n  in\n  L.log \"Calls\" \"%s--> t_applied: %a\" depth ptyp t_applied;\n  let hd =\n    let hd = K.with_type t_unapplied f in\n    if type_args <> [] || const_generic_args <> [] || fn_ptrs <> [] then\n      K.with_type t_applied (K.ETApp (hd, const_generic_args, fn_ptrs, type_args))\n    else\n      hd\n  in\n  L.log \"Calls\" \"%s--> hd: %a\" depth pexpr hd;\n  ( hd,\n    is_known_builtin,\n    match t_applied with\n    | TPoly (ts, t) -> K.TPoly (ts, fst (Krml.Helpers.flatten_arrow t))\n    | t -> fst (Krml.Helpers.flatten_arrow t) )\n\nlet expression_of_fn_ptr env (fn_ptr : C.fn_ptr) = expression_of_fn_ptr env \"\" fn_ptr\n\nlet global_is_const env id =\n  match (env.get_nth_global id).global_kind with\n  | NamedConst | AnonConst -> true\n  | Static -> false\n\nlet expression_of_operand (env : env) (op : C.operand) : K.expr =\n  match op with\n  | Copy ({ kind = PlaceGlobal { id; _ }; _ } as p) when global_is_const env id ->\n      (* No need to copy a const since by definition it cannot be modified *)\n      expression_of_place env p\n  | Copy p -> expression_of_place env p\n  | Move p -> expression_of_place env p\n  | Constant { kind = CLiteral l; _ } -> expression_of_literal env l\n  | Constant { kind = CVar var; _ } -> expression_of_cg_var_id env (C.expect_free_var var)\n  | Constant { kind = CFnDef fn_ptr; _ } ->\n      let e, _, _ = expression_of_fn_ptr env fn_ptr in\n      e\n  | Constant { kind = CTraitConst (({ C.kind; _ } as trait_ref), name); _ } -> begin\n      (* Logic similar to lookup_fun *)\n      match kind with\n      | Clause _ | ParentClause _ ->\n          let i, t = lookup_clause_constant env kind name in\n          K.(with_type t (EBound i))\n      | TraitImpl { id; _ } ->\n          let trait = env.get_nth_trait_impl id in\n          let global =\n            try List.assoc name trait.consts\n            with Not_found ->\n              fail \"Error looking trait impl: %s %s%!\"\n                (Charon.Print.trait_ref_to_string env.format_env trait_ref)\n                name\n          in\n          let global = env.get_nth_global global.C.id in\n          K.with_type (typ_of_ty env global.ty)\n            (K.EQualified (lid_of_name env global.item_meta.name))\n      | _ ->\n          fail \"expression_of_operand Constant: %s\"\n            (Charon.Print.operand_to_string env.format_env op)\n    end\n  | Constant { kind = CAdt _; ty } when Charon.TypesUtils.ty_is_unit ty -> K.with_type TUnit K.EUnit\n  | Constant _ ->\n      fail \"expression_of_operand: %s\" (Charon.Print.operand_to_string env.format_env op)\n\nlet is_str env var_id =\n  match lookup_with_original_type env var_id with\n  | _, _, TRef (_, TAdt { id = TBuiltin TStr; generics = { types = []; _ } }, _) -> true\n  | _ -> false\n\nlet is_box_place (p : C.place) =\n  match p.ty with\n  | C.TAdt { id = TBuiltin TBox; _ } -> true\n  | _ -> false\n\n(* returns either a regular naked C pointer, or a fat pointer in the case of DSTs (i.e. with non-empty metadata) *)\nlet mk_reference ~const (e : K.expr) (metadata : K.expr) : K.expr =\n  match metadata.typ with\n  (* When it is unit, it means there is no metadata, simply take the address *)\n  | K.TUnit -> addrof ~const e\n  | _ -> (\n      match e.typ with\n      | TApp (lid, [ t ]) when lid = Builtin.derefed_slice ->\n          (* The special \"base case\" of DSTs: slice<T>\n          where we have to cast [derefed_slice<T>] into [T*] for the .ptr field in the fat pointer  *)\n          let ptr = K.(with_type (TBuf (t, const)) (ECast (e, TBuf (t, const)))) in\n          K.(\n            with_type\n              (Builtin.mk_dst_ref ~const t metadata.typ)\n              (EFlat [ Some \"ptr\", ptr; Some \"meta\", metadata ]))\n      | _ ->\n          K.(\n            with_type\n              (Builtin.mk_dst_ref ~const e.typ metadata.typ)\n              (EFlat [ Some \"ptr\", addrof ~const e; Some \"meta\", metadata ])))\n\n(* To destruct a DST reference type into its base and metadata types\n   I.e., from Eurydice_dst_ref<T, meta> to (T, meta) *)\nlet destruct_dst_ref_typ t =\n  match t with\n  | K.TApp (dst_ref_hd, [ t_base; t_meta ]) when is_dst_ref dst_ref_hd -> Some (t_base, t_meta)\n  | _ -> None\n\n(* Get the base pointer expression from a DST reference expression\n   I.e., from `e : Eurydice_dst_ref<T, meta>` to `e.ptr : T*` *)\nlet get_dst_ref_base dst_ref =\n  match destruct_dst_ref_typ dst_ref.K.typ with\n  (* XXX fixme *)\n  | Some (base, _) -> Some K.(with_type (TBuf (base, false)) (EField (dst_ref, \"ptr\")))\n  | None -> None\n\n(* Parse the fat pointer Eurydice_dst_ref<T<U>, _> into (T,T<U>),\n   where the ignored field `_` must be `usize` as metadata,\n   used to handle the unsized cast from &T<V> to &T<U> *)\nlet destruct_arr_dst_ref t =\n  match t with\n  | K.TApp (dst_ref_hd, [ (TApp (lid, _) as t_u); _ ]) when is_dst_ref dst_ref_hd -> Some (lid, t_u)\n  | _ -> None\n\n(* Reborrows allow going from a mutable slice to an immutable one. *)\nlet maybe_reborrow_slice t_dst e_src =\n  let open K in\n  match e_src.typ, t_dst with\n  | TApp (hd1, [ t_ptr; t_meta ]), TApp (hd2, _) when is_dst_ref hd1 && is_dst_ref hd2 && hd1 <> hd2\n    ->\n      let mk e =\n        with_type t_dst\n          (EFlat\n             [\n               Some \"ptr\", with_type (TBuf (t_ptr, true)) (EField (e, \"ptr\"));\n               Some \"meta\", with_type t_meta (EField (e, \"meta\"));\n             ])\n      in\n      if Krml.Helpers.is_readonly_c_expression e_src then\n        mk e_src\n      else\n        with_type t_dst\n          (ELet\n             ( Krml.Helpers.fresh_binder \"reborrowed_slice\" e_src.typ,\n               e_src,\n               mk (with_type e_src.typ (EBound 0)) ))\n  | _ -> e_src\n\nlet expression_of_rvalue (env : env) (p : C.rvalue) expected_ty : K.expr =\n  match p with\n  | Use op -> expression_of_operand env op\n  (* Generally, MIR / current LLBC is guaranteed to apply [Deref] only to places that are\n     references or raw pointers, in these cases [&*p] == [p].\n     The [Deref] traits types are desugared to function calls to [deref].\n     The ONLY exception is when the place is a [Box]. That is, MIR/LLBC might generate [*b]\n     where [b] is a [Box]. This refers to taking the value out of the [Box].\n     Recall that [Box] is a wrapper of [Unique], which is in turn a wrapper of a [NonNull],\n     which is a wrapper of a raw pointer. Hence, [*b] when [b] is a [Box] is equivalent to\n     [*(b.0.pointer.pointer)]. This is a compiler magic.\n\n     However, in Eurydice *now*, [Box] types are instantly unboxed to raw pointers, which\n     coincides exactly with our current implementation, hence no extra handling is needed.\n     In the future however, we might want to handle [Box] types differently, so this is a note\n     to ourselves to be careful with this.\n     *)\n  | RvRef ({ kind = PlaceProjection (p, Deref); _ }, _, _)\n  | RawPtr ({ kind = PlaceProjection (p, Deref); _ }, _, _) ->\n      (* Notably, this is NOT simply an optimisation, as this represents re-borrowing, and [p] might\n         be a reference to DST (fat pointer). *)\n      (* This also works for when the case has metadata, simply ignore it *)\n      maybe_reborrow_slice (typ_of_ty env expected_ty) (expression_of_place env p)\n  | RvRef (p, bk, metadata) ->\n      let metadata = expression_of_operand env metadata in\n      let e = expression_of_place env p in\n      mk_reference ~const:(const_of_borrow_kind bk) e metadata\n  | RawPtr (p, rk, metadata) ->\n      let metadata = expression_of_operand env metadata in\n      let e = expression_of_place env p in\n      mk_reference ~const:(const_of_ref_kind rk) e metadata\n  | NullaryOp (SizeOf, ty) ->\n      let t = typ_of_ty env ty in\n      K.(with_type TBool (EApp (Builtin.(expr_of_builtin_t sizeof [ t ]), [])))\n  | NullaryOp (AlignOf, ty) ->\n      let t = typ_of_ty env ty in\n      K.(with_type TBool (EApp (Builtin.(expr_of_builtin_t alignof [ t ]), [])))\n  | UnaryOp (Cast (CastScalar (_, dst)), e) ->\n      let dst = typ_of_literal_ty env dst in\n      K.with_type dst (K.ECast (expression_of_operand env e, dst))\n  | UnaryOp (Cast (CastRawPtr (_from, to_)), e) ->\n      let dst = typ_of_ty env to_ in\n      K.with_type dst (K.ECast (expression_of_operand env e, dst))\n  | UnaryOp (Cast (CastTransmute ((TRawPtr _ as _from), (TLiteral (TUInt Usize) as to_))), e) ->\n      let dst = typ_of_ty env to_ in\n      K.with_type dst (K.ECast (expression_of_operand env e, dst))\n  | UnaryOp (Cast (CastFnPtr (TFnDef _from, TFnPtr _to)), e) ->\n      (* From FnDef to FnPtr *)\n      if Charon.Substitute.lookup_fndef_sig env.crate _from = Some _to then\n        expression_of_operand env e\n      else\n        let dst = typ_of_ty env (TFnPtr _to) in\n        K.with_type dst (K.ECast (expression_of_operand env e, dst))\n  | UnaryOp (Cast (CastFnPtr (TFnPtr _, TFnPtr _)), e) ->\n      (* possible safe fn to unsafe fn, same in C *)\n      expression_of_operand env e\n  | UnaryOp (Cast (CastUnsize (ty_from, ty_to, meta) as ck), e) ->\n      (* DSTs: we support going from &T<S1> to &T<S2> where S1 is sized,  S2 is\n         unsized and &T<S2> becomes a fat pointer. The base case is from &T<[U;N]>\n         to T<[U]>. See test/more_dst.rs for user-defined DST case. We build this\n         coercion by hand, and slightly violate C's strict aliasing rules. *)\n      let t_from = typ_of_ty env ty_from and t_to = typ_of_ty env ty_to in\n      let e = expression_of_operand env e in\n      begin\n        match meta, t_from, destruct_arr_dst_ref t_to with\n        | MetaLength cg, TBuf (TApp (lid1, _), const), Some (lid2, t_u) when lid1 = lid2 ->\n            (* Cast from a struct whose last field is `t data[n]` to a struct whose last field is\n             `Eurydice_derefed_slice data` (a.k.a. `char data[]`) *)\n            let len = expression_of_const_generic env cg in\n            let ptr = K.with_type (TBuf (t_u, const)) (K.ECast (e, TBuf (t_u, const))) in\n            Builtin.dst_new ~const ~len ~ptr t_u\n        | MetaLength cg, TBuf (K.TCgApp (K.TApp (lid_arr, [ t ]), _), _), _\n          when lid_arr = Builtin.arr ->\n            (* Cast from Box<[T;N]> (represented as a mut reference to an array) to Box<[T]> (which we\n               represent as a slice). See the translation of types. *)\n            let len = expression_of_const_generic env cg in\n            let const =\n              match t_to with\n              | K.TApp (dst_ref_hd, _) when dst_ref_hd = Builtin.dst_ref_shared -> true\n              | K.TApp (dst_ref_hd, _) when dst_ref_hd = Builtin.dst_ref_mut -> false\n              | _ -> assert false\n            in\n            let array_to_slice =\n              RustNames.builtin_of_function\n                (if const then\n                   Builtin.array_to_slice_func_shared\n                 else\n                   Builtin.array_to_slice_func_mut)\n            in\n            let t_without_cg = array_to_slice.typ in\n            (* array_to_slice: size_t -> arr -> Eurydice_slice 0 *)\n            let array_to_slice = Builtin.(expr_of_builtin array_to_slice) in\n            let diff = List.length env.binders - List.length env.cg_binders in\n            let array_to_slice =\n              K.with_type\n                Krml.DeBruijn.(subst_t t 0 (subst_ct diff len 0 t_without_cg))\n                (K.ETApp (array_to_slice, [ len ], [], [ t ]))\n            in\n            K.(with_type (Builtin.mk_slice ~const t) (EApp (array_to_slice, [ e ])))\n        | _, _, _ ->\n            Krml.KPrint.bprintf \"t_to = %a\\n\" ptyp t_to;\n            Krml.KPrint.bprintf \"destruct_arr_dst_ref t_to = None? %b\\n\"\n              (destruct_arr_dst_ref t_to = None);\n            Krml.Warn.fatal_error \"unknown unsize cast: `%s`\\nt_to=%a\\nt_from=%a\"\n              (Charon.Print.cast_kind_to_string env.format_env ck)\n              ptyp t_to ptyp t_from\n      end\n  | UnaryOp (Cast (CastConcretize (_from_ty, to_ty)), e) -> (\n      (* Concretization cast is a no-op at runtime *)\n      let op_e = expression_of_operand env e in\n      let typ = typ_of_ty env to_ty in\n      match get_dst_ref_base op_e with\n      | Some base_ptr -> K.(with_type typ (ECast (base_ptr, typ)))\n      | None ->\n          failwith\n            (\"unknown concretize cast: `\"\n            ^ Charon.Print.cast_kind_to_string env.format_env (CastConcretize (_from_ty, to_ty))\n            ^ \"`\"))\n  | UnaryOp (Cast ck, e) ->\n      (* Add a simpler case: identity cast is allowed *)\n      let is_ident =\n        match ck with\n        (* Here are `literal_type`s *)\n        | C.CastScalar (f, t) -> f = t\n        (* The following are `type`s *)\n        | C.CastFnPtr (f, t) | C.CastRawPtr (f, t) | C.CastUnsize (f, t, _) | C.CastTransmute (f, t)\n          -> f = t\n        | C.CastConcretize _ -> false\n      in\n      if is_ident then\n        expression_of_operand env e\n      else\n        failwith (\"unknown cast: `\" ^ Charon.Print.cast_kind_to_string env.format_env ck ^ \"`\")\n  (* | UnaryOp (PtrMetadata, e) ->\n    let e = expression_of_operand env e in begin\n    match e.typ with\n    | TApp (lid, [ _; meta_ty ]) when lid = Builtin.dst_ref ->\n      K.(with_type meta_ty (EField (e, \"meta\")))\n    (* In cases like `PtrMetadata(T)` when `T` is a type variable or some types with unresolved type variable,\n       We cannot tell the correct metadata type from it until fully monomorphized.\n       But we can surely rely on monomorphized LLBC, and we ignore handling such cases in Eurydice. *)\n    | ty when has_unresolved_generic ty ->\n      failwith \"Eurydice do not handle ptr-metadata for generic types. Consider using monomorphized LLBC.\"\n    (* Otherwise, fetching ptr-metadata from a non-DST simply results in `()`\n       When a type is fully resolved and it is not `Eurydice::DstRef`, we can be confident that it is not a DST. *)\n    | _ -> K.with_type TUnit K.EUnit\n    end *)\n  | UnaryOp (op, o1) -> mk_op_app (op_of_unop op) (expression_of_operand env o1) []\n  | BinaryOp (op, o1, o2) ->\n      mk_op_app (op_of_binop op) (expression_of_operand env o1) [ expression_of_operand env o2 ]\n  | Discriminant sub_p ->\n      let e = expression_of_place env sub_p in\n      let expected_t = typ_of_ty env expected_ty in\n      K.(\n        with_type expected_t\n          (EApp (Builtin.(expr_of_builtin_t discriminant) [ e.typ; expected_t ], [ e ])))\n  | Aggregate (AggregatedAdt ({ id = TTuple; _ }, _, None), ops) -> begin\n      match ops with\n      | [] -> K.with_type TUnit K.EUnit\n      | [ op ] -> expression_of_operand env op\n      | _ ->\n          let ops = List.map (expression_of_operand env) ops in\n          let ts = List.map (fun x -> x.K.typ) ops in\n          K.with_type (TTuple ts) (K.ETuple ops)\n    end\n  | Aggregate\n      ( AggregatedAdt\n          ( { id = TAdtId typ_id; generics = { types = typ_args; const_generics; _ } },\n            variant_id,\n            None ),\n        args ) ->\n      let { C.item_meta; kind; _ } = env.get_nth_type typ_id in\n      let name = item_meta.name in\n      let typ_lid = lid_of_name env name in\n      let typ_args = List.map (typ_of_ty env) typ_args in\n      let cg_args = List.map (cg_of_const_generic env) const_generics in\n      let t = K.fold_tapp (typ_lid, typ_args, cg_args) in\n      let args = List.map (expression_of_operand env) args in\n      begin\n        match variant_id with\n        | Some variant_id ->\n            let variant_id = (find_nth_variant env typ_id variant_id).variant_name in\n            if is_enum env typ_id then\n              K.with_type t (K.EEnum (mk_enum_case typ_lid variant_id))\n            else\n              K.with_type t (K.ECons (variant_id, args))\n        | None ->\n            let fields =\n              match kind with\n              | Struct fields -> fields\n              | Enum _ -> failwith \"TODO: Enum\"\n              | Union _ -> failwith \"TODO: Union\"\n              | Opaque -> failwith \"TODO: Opaque\"\n              | Alias _ -> failwith \"TODO: Alias\"\n              | TDeclError _ -> failwith \"TODO: TDeclError\"\n            in\n            K.with_type t\n              (K.EFlat\n                 (List.mapi\n                    (fun i (f, a) -> Some (ensure_named i f.C.field_name), a)\n                    (List.combine fields args)))\n      end\n  | Aggregate (AggregatedAdt ({ id = TBuiltin _; _ }, _, _), _) ->\n      failwith \"unsupported: AggregatedAdt / TAssume\"\n  | Aggregate (AggregatedArray (t, cg), ops) ->\n      let ty = typ_of_ty env t in\n      let typ_arr = typ_of_struct_arr env t cg in\n      begin\n        match ops with\n        | [] ->\n            let empty_array =\n              K.with_type\n                Krml.DeBruijn.(subst_t ty 0 Builtin.empty_array.typ)\n                (K.ETApp (Builtin.(expr_of_builtin empty_array), [], [], [ ty ]))\n            in\n            K.with_type typ_arr (K.EApp (empty_array, [ K.with_type ty K.EAny ]))\n            (* a dummy arg is needed to pass the checker *)\n        | _ ->\n            let array_expr =\n              K.with_type\n                (TArray (typ_of_ty env t, constant_of_scalar_value (assert_cg_scalar cg)))\n                (K.EBufCreateL (Stack, List.map (expression_of_operand env) ops))\n            in\n            K.with_type typ_arr (mk_expr_arr_struct array_expr)\n      end\n  | rvalue ->\n      failwith (\"unsupported rvalue: `\" ^ Charon.Print.rvalue_to_string env.format_env rvalue ^ \"`\")\n\nlet expression_of_assertion (env : env) ({ cond; expected; _ } : C.assertion) : K.expr =\n  let cond =\n    if not expected then\n      expression_of_operand env cond\n    else\n      Krml.Helpers.mk_not (expression_of_operand env cond)\n  in\n  K.(\n    with_type TAny\n      (EIfThenElse (cond, with_type TAny (EAbort (None, Some \"assert failure\")), Krml.Helpers.eunit)))\n\nlet lesser t1 t2 =\n  if t1 = K.TAny then\n    t2\n  else if t2 = K.TAny then\n    t2\n  else if t1 <> t2 then\n    fail \"lesser t1=%a t2=%a\" ptyp t1 ptyp t2\n  else\n    t1\n\n(* A `fn` pointer, which does not have trait bounds, and cannot be partially applied. This is a\n   much simplified version of expression_of_fn_ptr. *)\nlet expression_of_fn_op_dynamic (env : env) ({ func; args; dest } : C.call) =\n  let fHd =\n    match func with\n    | C.FnOpDynamic op -> expression_of_operand env op\n    | _otw ->\n        failwith @@ \"Internal error: the given call is not to `FnOpMove`.\"\n        ^ \"The function `expression_of_fn_op_dynamic` handles only call to `FnOpMove`.\"\n  in\n  let lhs = expression_of_place env dest in\n  let args = List.map (expression_of_operand env) args in\n  let args =\n    if args = [] then\n      [ Krml.Helpers.eunit ]\n    else\n      args\n  in\n  (* Asserting that this is not a partial application *)\n  let ret_t, args_t = Krml.Helpers.flatten_arrow fHd.typ in\n  assert (List.length args_t = List.length args);\n  let rhs = K.with_type ret_t @@ K.EApp (fHd, args) in\n  Krml.Helpers.with_unit @@ K.EAssign (lhs, rhs)\n\n(** Handles only the `SwitchInt` for 128-bit integers. Turn the switch expression into if-then-else\n    expressions. This is to work around the Krml integer type limitations. *)\nlet rec expression_of_switch_128bits env ret_var scrutinee branches default : K.expr =\n  let scrutinee = expression_of_operand env scrutinee in\n  let else_branch = expression_of_block env ret_var default in\n  let folder (svs, stmt) else_branch =\n    (* [i1, i2, ..., in] ==> scrutinee == i1 || scrutinee == i2 || ... || scrutinee == in *)\n    let guard =\n      let make_eq sv = mk_op_app Eq scrutinee [ expression_of_scalar_value sv ] in\n      List.map make_eq svs |> function\n      | [] -> Krml.Helpers.etrue\n      | x :: lst -> List.fold_left Krml.Helpers.mk_or x lst\n    in\n    (* the \"then\" body of the if-then-else expression *)\n    let body = expression_of_block env ret_var stmt in\n    (* combines the types: compare each branch and then generate the correct type *)\n    let typ = lesser body.K.typ else_branch.K.typ in\n    K.(with_type typ (EIfThenElse (guard, body, else_branch)))\n  in\n  List.fold_right folder branches else_branch\n\nand expression_of_statement_kind (env : env) (ret_var : C.local_id) (s : C.statement_kind) : K.expr\n    =\n  match s with\n  | Assign (p, rv) ->\n      let expected_ty = p.ty in\n      let p = expression_of_place env p in\n      let rv = expression_of_rvalue env rv expected_ty in\n      K.(with_type TUnit (EAssign (p, rv)))\n  | SetDiscriminant (_, _) -> failwith \"C.SetDiscriminant\"\n  | StorageLive _ -> Krml.Helpers.eunit\n  | StorageDead _ -> Krml.Helpers.eunit\n  | PlaceMention p ->\n      let p = expression_of_place env p in\n      K.(with_type TUnit (EIgnore p))\n  | Drop (p, _, _) ->\n      let _ = expression_of_place env p in\n      begin\n        match p.ty with\n        (* doesn't do the right thing yet, need to understand why there are\n           several drops per variable *)\n        (* | C.Adt (Builtin Vec, _) when false -> *)\n        (*     (1* p is a vec t *1) *)\n        (*     let t = match p.typ with TApp (([\"Eurydice\"], \"vec\"), [ t ]) -> t | _ -> assert false in *)\n        (*     Krml.Helpers.(with_unit K.(EApp ( *)\n        (*       with_type (Krml.DeBruijn.subst_tn [ t ] Builtin.vec_drop.typ) (ETApp ( *)\n        (*         with_type Builtin.vec_drop.typ (EQualified Builtin.vec_drop.name), *)\n        (*         [ t ])), *)\n        (*       [ p ]))) *)\n        | _ -> Krml.Helpers.eunit\n      end\n  | Assert (a, _on_failure) -> expression_of_assertion env a\n  | Call\n      {\n        func =\n          FnOpRegular\n            {\n              kind = FunId (FBuiltin ArrayRepeat);\n              generics = { types = [ ty ]; const_generics = [ c ]; _ };\n              _;\n            };\n        args = [ e ];\n        dest;\n        _;\n      } ->\n      (* Special treatment *)\n      let e = expression_of_operand env e in\n      let t = typ_of_ty env ty in\n      let t_array = maybe_cg_array env ty c in\n      let len = expression_of_const_generic env c in\n      let dest = expression_of_place env dest in\n      let repeat =\n        K.(\n          with_type\n            (Krml.Helpers.fold_arrow Builtin.array_repeat.cg_args Builtin.array_repeat.typ)\n            (EQualified Builtin.array_repeat.name))\n      in\n      let diff = List.length env.binders - List.length env.cg_binders in\n      let repeat =\n        K.(\n          with_type\n            Krml.DeBruijn.(subst_t t 0 (subst_ct diff len 0 Builtin.array_repeat.typ))\n            (ETApp (repeat, [ len ], [], [ t ])))\n      in\n      Krml.Helpers.with_unit\n        K.(\n          EAssign\n            ( dest,\n              with_type dest.typ (mk_expr_arr_struct (with_type t_array (EApp (repeat, [ e ])))) ))\n  | Call\n      {\n        func =\n          FnOpRegular\n            {\n              kind = FunId (FBuiltin (Index { is_array = true; mutability = _; is_range = false }));\n              generics = { types = [ ty ]; const_generics = [ cg ]; _ };\n              _;\n            };\n        args = [ e1; e2 ];\n        dest;\n        _;\n      } ->\n      (* Special treatment for e1[e2] of array which are translated into struct.\n         e1[e2] is translated as fn ArrayIndexShared<T,N>(&[T;N], usize) -> &T\n\n         Since [T;N] is translated into arr$T$N, we need to first dereference\n         the e1 to get the struct, and then take its field \"data\" to get the\n         array\n\n         We construct dest := &( *e1).data[e2]\n         *)\n      let e1 = expression_of_operand env e1 in\n      let e2 = expression_of_operand env e2 in\n      let t = typ_of_ty env ty in\n      let t_array = maybe_cg_array env ty cg in\n      (* let const = const_of_tbuf e1.K.typ in *)\n      let e1 = Krml.Helpers.(mk_deref ~const:true (Krml.Helpers.assert_tbuf e1.K.typ) e1.K.node) in\n      let e1 = K.with_type t_array (K.EField (e1, \"data\")) in\n      let dest = expression_of_place env dest in\n      Krml.Helpers.with_unit\n        K.(EAssign (dest, addrof ~const:false (with_type t (EBufRead (e1, e2)))))\n  | Call { func = FnOpRegular fn_ptr; args; dest; _ }\n    when Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.from_u16 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.from_u32 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.from_u64 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.from_i16 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.from_i32 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.from_i64 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.into_u16 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.into_u32 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.into_u64 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.into_i16 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.into_i32 fn_ptr\n         || Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config RustNames.into_i64 fn_ptr\n         || false ->\n      (* TODO: this can now be properly represented in the AST, this should go\n         away! there is *one* case in Kyber that is not caught by\n         Cleanup2.remove_trivial_into, and we need to figure out why. *)\n      let matches p = Charon.NameMatcher.match_fn_ptr env.name_ctx RustNames.config p fn_ptr in\n      let w : Krml.Constant.width =\n        if matches RustNames.from_u16 || matches RustNames.into_u16 then\n          UInt16\n        else if matches RustNames.from_u32 || matches RustNames.into_u32 then\n          UInt32\n        else if matches RustNames.from_u64 || matches RustNames.into_u64 then\n          UInt64\n        else if matches RustNames.from_i16 || matches RustNames.into_i16 then\n          Int16\n        else if matches RustNames.from_i32 || matches RustNames.into_i32 then\n          Int32\n        else if matches RustNames.from_i64 || matches RustNames.into_i64 then\n          Int64\n        else\n          fail \"Unknown from-cast: %s\" (string_of_fn_ptr env fn_ptr)\n      in\n      let dest = expression_of_place env dest in\n      let e = expression_of_operand env (Krml.KList.one args) in\n      Krml.Helpers.with_unit K.(EAssign (dest, with_type (TInt w) (ECast (e, TInt w))))\n  | Call { func = FnOpRegular fn_ptr; args; dest; _ } ->\n      (* For now, we take trait type arguments to be part of the code-gen *)\n      let hd, _is_known_builtin, output_t = expression_of_fn_ptr env fn_ptr in\n      let dest = expression_of_place env dest in\n      let args = List.map (expression_of_operand env) args in\n      (* This needs to match what is done in the FunGroup case (i.e. when we extract\n         a definition). There are two behaviors depending on whether the function is\n         builtin or not. *)\n      (* Krml.KPrint.bprintf \"Call to %s is builtin %b\\n\" (string_of_fn_ptr env fn_ptr) is_builtin; *)\n      let args =\n        if args = [] then\n          [ Krml.Helpers.eunit ]\n        else\n          args\n      in\n      let rhs =\n        if args = [] then\n          hd\n        else\n          K.with_type output_t (K.EApp (hd, args))\n      in\n      (* This does something similar to maybe_addrof *)\n      let rhs =\n        (* TODO: determine whether extra_types is necessary *)\n        let extra_types =\n          match fn_ptr.kind with\n          | TraitMethod ({ kind = TraitImpl { id = _; generics }; _ }, _, _) -> generics.types\n          | _ -> []\n        in\n        match fn_ptr.kind, fn_ptr.generics.types @ extra_types with\n        | ( FunId (FBuiltin (Index { is_array = false; mutability = _; is_range = false })),\n            [ TSlice _ ] ) ->\n            (* Will decay. See comment above maybe_addrof *)\n            rhs\n        | ( FunId (FBuiltin (Index { is_array = false; mutability = _; is_range = false })),\n            [ TAdt { id; generics } ] )\n          when RustNames.is_vec env id generics ->\n            (* Will decay. See comment above maybe_addrof *)\n            rhs\n        | FunId (FBuiltin (Index { is_array = false; mutability = _; is_range = false })), _ ->\n            K.(with_type (TBuf (rhs.typ, false)) (EAddrOf rhs))\n        | _ -> rhs\n      in\n      Krml.Helpers.with_unit K.(EAssign (dest, rhs))\n  | Call ({ func = FnOpDynamic _; _ } as call) -> expression_of_fn_op_dynamic env call\n  | Abort _ -> with_any (K.EAbort (None, Some \"panic!\"))\n  | Return ->\n      let e = expression_of_var_id env ret_var in\n      K.(with_type TAny (EReturn e))\n  | Break n ->\n      assert (n = 0);\n      K.(with_type TAny EBreak)\n  | Continue n ->\n      assert (n = 0);\n      K.(with_type TAny EContinue)\n  | Nop -> Krml.Helpers.eunit\n  | Switch (If (op, s1, s2)) ->\n      let e1 = expression_of_block env ret_var s1 in\n      let e2 = expression_of_block env ret_var s2 in\n      let t = lesser e1.typ e2.typ in\n      K.(with_type t (EIfThenElse (expression_of_operand env op, e1, e2)))\n  | Switch (SwitchInt (scrutinee, int_ty, branches, default)) ->\n      let branches =\n        List.map\n          (fun (litl, block) -> List.map Charon.ValuesUtils.literal_as_scalar litl, block)\n          branches\n      in\n      if int_ty = TInt I128 || int_ty = TUInt U128 then\n        expression_of_switch_128bits env ret_var scrutinee branches default\n      else\n        let scrutinee = expression_of_operand env scrutinee in\n        let branches =\n          List.concat_map\n            (fun (svs, stmt) ->\n              List.map\n                (fun sv ->\n                  K.SConstant (constant_of_scalar_value sv), expression_of_block env ret_var stmt)\n                svs)\n            branches\n          @ [ K.SWild, expression_of_block env ret_var default ]\n        in\n        let t = Krml.KList.reduce lesser (List.map (fun (_, e) -> e.K.typ) branches) in\n        K.(with_type t (ESwitch (scrutinee, branches)))\n  | Switch (Match (p, branches, default)) ->\n      let scrutinee = expression_of_place env p in\n      let typ_id, typ_lid, variant_name_of_variant_id =\n        match p.ty with\n        | TAdt { id = TAdtId typ_id; _ } ->\n            let ty = env.get_nth_type typ_id in\n            let variants =\n              match ty.kind with\n              | Enum variants -> variants\n              | _ -> assert false\n            in\n            ( typ_id,\n              lid_of_name env ty.item_meta.name,\n              fun v ->\n                let v = C.VariantId.nth variants v in\n                v.variant_name, List.length v.fields )\n        | _ -> failwith \"TODO: match on not adt, not option\"\n      in\n\n      let branches =\n        List.concat_map\n          (fun (variant_ids, branch) ->\n            List.map\n              (fun variant_id ->\n                let variant_name, n_fields = variant_name_of_variant_id variant_id in\n                let dummies = List.init n_fields (fun _ -> K.(with_type TAny PWild)) in\n                let pat =\n                  if is_enum env typ_id then\n                    K.PEnum (mk_enum_case typ_lid variant_name)\n                  else\n                    K.PCons (variant_name, dummies)\n                in\n                let pat = K.with_type scrutinee.typ pat in\n                [], pat, expression_of_block env ret_var branch)\n              variant_ids)\n          branches\n      in\n      let branches =\n        branches\n        @\n        match default with\n        | Some default ->\n            [ [], K.with_type scrutinee.typ K.PWild, expression_of_block env ret_var default ]\n        | None -> []\n      in\n      let t = Krml.KList.reduce lesser (List.map (fun (_, _, e) -> e.K.typ) branches) in\n      K.(with_type t (EMatch (Unchecked, scrutinee, branches)))\n  | Loop s -> K.(with_type TUnit (EWhile (Krml.Helpers.etrue, expression_of_block env ret_var s)))\n  | _ ->\n      failwith\n        (\"Unsupported statement: \"\n        ^ Charon.Print.Llbc.statement_kind_to_string env.format_env \"\" \"\" s)\n\nand expression_of_statement (env : env) (ret_var : C.local_id) (s : C.statement) : K.expr =\n  {\n    (expression_of_statement_kind env ret_var s.kind) with\n    meta =\n      (if !Options.comments then\n         List.map (fun x -> K.CommentBefore x) s.comments_before\n       else\n         []);\n  }\n\nand expression_of_block (env : env) (ret_var : C.local_id) (b : C.block) : K.expr =\n  let statements = List.map (expression_of_statement env ret_var) b.statements in\n  match List.rev statements with\n  | [] -> Krml.Helpers.eunit\n  | last :: _ -> K.(with_type last.typ (ESequence statements))\n\n(** Top-level declarations: orchestration *)\n\nlet of_declaration_group (dg : 'id C.g_declaration_group) (f : 'id -> 'a) : 'a list =\n  (* We do not care about recursion as in C, everything is mutually recursive\n     thanks to header inclusion. *)\n  match dg with\n  | NonRecGroup id -> [ f id ]\n  | RecGroup ids -> List.map f ids\n\nlet seen = ref 0\nlet total = ref 0\n\n(** List all the ids in this declaration group. *)\nlet declaration_group_to_list (g : C.declaration_group) : C.item_id list =\n  match g with\n  | FunGroup g -> List.map (fun id -> C.IdFun id) (C.g_declaration_group_to_list g)\n  | TypeGroup g -> List.map (fun id -> C.IdType id) (C.g_declaration_group_to_list g)\n  | GlobalGroup g -> List.map (fun id -> C.IdGlobal id) (C.g_declaration_group_to_list g)\n  | TraitDeclGroup g -> List.map (fun id -> C.IdTraitDecl id) (C.g_declaration_group_to_list g)\n  | TraitImplGroup g -> List.map (fun id -> C.IdTraitImpl id) (C.g_declaration_group_to_list g)\n  | MixedGroup g -> C.g_declaration_group_to_list g\n\nlet flags_of_meta (meta : C.item_meta) : K.flags =\n  [\n    Krml.Common.Comment\n      (String.concat \"\\n\"\n         (List.filter_map\n            (function\n              | Charon.Meta.AttrDocComment s -> Some s\n              | _ -> None)\n            meta.attr_info.attributes));\n  ]\n\nlet decl_of_id (env : env) (id : C.item_id) : K.decl option =\n  match id with\n  | IdType id -> begin\n      let decl = env.get_nth_type id in\n      let { C.item_meta; def_id; kind; generics = { types = type_params; const_generics; _ }; _ } =\n        decl\n      in\n      let name = item_meta.name in\n      L.log \"AstOfLlbc\" \"Visiting type: %s\\n%s\" (string_of_name env name)\n        (Charon.Print.type_decl_to_string env.format_env decl);\n\n      assert (def_id = id);\n      let name = lid_of_name env name in\n      let env = push_cg_binders env const_generics in\n      let env = push_type_binders env type_params in\n\n      match kind with\n      | Union _ | Opaque | TDeclError _ -> None\n      | Struct fields ->\n          let fields =\n            List.mapi\n              (fun i { C.field_name; field_ty; _ } ->\n                Some (ensure_named i field_name), (typ_of_ty env field_ty, true))\n              fields\n          in\n          Some\n            (K.DType (name, [], List.length const_generics, List.length type_params, Flat fields))\n      | Enum branches when List.for_all (fun v -> v.C.fields = []) branches ->\n          let has_custom_constants =\n            let rec has_custom_constants i = function\n              | { C.discriminant; _ } :: bs ->\n                  Charon.Scalars.get_val (Charon.ValuesUtils.literal_as_scalar discriminant)\n                  <> Z.of_int i\n                  || has_custom_constants (i + 1) bs\n              | _ -> false\n            in\n            has_custom_constants 0 branches\n          in\n\n          let cases =\n            List.map\n              (fun ({ C.variant_name; discriminant; _ } : C.variant) ->\n                let v =\n                  if has_custom_constants then\n                    Some\n                      (Charon.Scalars.get_val (Charon.ValuesUtils.literal_as_scalar discriminant))\n                  else\n                    None\n                in\n                mk_enum_case name variant_name, v)\n              branches\n          in\n          Some (K.DType (name, [], List.length const_generics, List.length type_params, Enum cases))\n      | Enum branches ->\n          let branches =\n            List.map\n              (fun ({ C.variant_name; fields; _ } : C.variant) ->\n                ( variant_name,\n                  List.mapi\n                    (fun i { C.field_name; field_ty; _ } ->\n                      mk_field_name field_name i, (typ_of_ty env field_ty, true))\n                    fields ))\n              branches\n          in\n          Some\n            (K.DType\n               (name, [], List.length const_generics, List.length type_params, Variant branches))\n      | Alias ty ->\n          Some\n            (K.DType\n               ( name,\n                 [],\n                 List.length const_generics,\n                 List.length type_params,\n                 Abbrev (typ_of_ty env ty) ))\n    end\n  | IdFun id -> (\n      let decl = try Some (env.get_nth_function id) with Not_found -> None in\n      match decl with\n      | None -> None\n      | Some decl -> (\n          let { C.def_id; generics; signature; body; item_meta; src; _ } = decl in\n          let env = { env with generic_params = generics } in\n          L.log \"AstOfLlbc\" \"Visiting %sfunction: %s\\n%s\"\n            (match body with\n            | StructuredBody _ -> \"\"\n            | _ -> \"opaque \")\n            (string_of_name env item_meta.name)\n            (Charon.Print.fun_decl_to_string env.format_env \"  \" \"  \" decl);\n\n          assert (def_id = id);\n          let name = lid_of_name env item_meta.name in\n          match body, src with\n          | _, TraitDeclItem (_, _, false) ->\n              (* We skip those on the basis that they generate useless external prototypes, which we\n                 do not really need. *)\n              None\n          | ( ( OpaqueBody\n              | ExternBody _\n              | IntrinsicBody _\n              | TraitMethodWithoutDefaultBody\n              | TargetDispatchBody _\n              | MissingBody\n              | ErrorBody _\n              | UnstructuredBody _ ),\n              _ ) ->\n              (* Opaque function *)\n              let { K.n_cgs; n }, t = typ_of_signature env (C.bound_fun_sig_of_decl decl) in\n              Some (K.DExternal (None, [], n_cgs, n, name, t, []))\n          | StructuredBody { locals; body; _ }, _ ->\n              if Option.is_some decl.is_global_initializer then\n                None\n              else\n                let env = push_cg_binders env generics.const_generics in\n                let env = push_type_binders env generics.types in\n\n                L.log \"AstOfLlbc\" \"ty of locals: %s\"\n                  (String.concat \" ++ \"\n                     (List.map\n                        (fun (local : C.local) ->\n                          Charon.Print.ty_to_string env.format_env local.local_ty)\n                        locals.locals));\n                L.log \"AstOfLlbc\" \"ty of inputs: %s\"\n                  (String.concat \" ++ \"\n                     (List.map\n                        (fun t -> Charon.Print.ty_to_string env.format_env t)\n                        signature.C.inputs));\n\n                (* `locals` contains, in order: special return variable; function arguments;\n                   local variables *)\n                let args, locals = Krml.KList.split (locals.arg_count + 1) locals.locals in\n                let return_var = List.hd args in\n                let args = List.tl args in\n\n                let return_type = typ_of_ty env return_var.local_ty in\n\n                (* Note: Rust allows zero-argument functions but the krml internal\n                   representation wants a unit there. This is aligned with typ_of_signature. *)\n                let args =\n                  let t_unit =\n                    C.(\n                      TAdt\n                        {\n                          id = TTuple;\n                          generics =\n                            { types = []; const_generics = []; regions = []; trait_refs = [] };\n                        })\n                  in\n                  let v_unit =\n                    {\n                      C.index = Charon.Expressions.LocalId.of_int max_int;\n                      name = None;\n                      local_ty = t_unit;\n                      span = decl.item_meta.span;\n                    }\n                  in\n                  if args = [] then\n                    [ v_unit ]\n                  else\n                    args\n                in\n\n                (* At this stage, env has:\n                   cg_binders = <<all cg binders>>\n                   type_binders = <<all type binders>>\n                   binders = <<all cg binders>>\n                *)\n                let clause_binders = mk_clause_binders_and_args env generics.trait_clauses in\n                debug_trait_clause_mapping env clause_binders;\n                (* Now we turn it into:\n                   binders = <<all cg binders>> ++ <<all clause binders>> ++ <<regular function args>>\n                *)\n                let env = push_clause_binders env clause_binders in\n                let env = push_binders env args in\n\n                let arg_binders =\n                  List.map\n                    (fun (arg : C.const_generic_param) ->\n                      Krml.Helpers.fresh_binder ~mut:true arg.name (typ_of_ty env arg.ty))\n                    generics.const_generics\n                  @ List.map\n                      (function\n                        | TraitClauseMethod { pretty_name; _ }, t\n                        | TraitClauseConstant { pretty_name; _ }, t ->\n                            Krml.Helpers.fresh_binder pretty_name t\n                        | _ -> assert false)\n                      clause_binders\n                  @ List.map\n                      (fun (arg : C.local) ->\n                        let name = Option.value ~default:\"_\" arg.name in\n                        Krml.Helpers.fresh_binder ~mut:true name (typ_of_ty env arg.local_ty))\n                      args\n                in\n\n                L.log \"AstOfLlbc\" \"type of binders: %a\" ptyps\n                  (List.map (fun o -> o.K.typ) arg_binders);\n                let body =\n                  with_locals env return_type (return_var :: locals) (fun env ->\n                      expression_of_block env return_var.index body)\n                in\n                let flags =\n                  match item_meta.attr_info.inline with\n                  | Some Hint -> [ Krml.Common.Inline ]\n                  | Some Always -> [ Krml.Common.MustInline ]\n                  | Some Never -> [ Krml.Common.NoInline ]\n                  | _ -> []\n                in\n                (* This is kind of a hack here: we indicate that this function is intended to be\n                   specialized, at monomorphization-time (which happens quite early on), on the cg\n                   binders but also on the clause binders... This is ok because even though the\n                   clause binders are not in env.cg_binders, well, types don't refer to clause\n                   binders, so we won't have translation errors. *)\n                let n_cg = List.length generics.const_generics in\n                let n = List.length generics.types in\n                Some\n                  (K.DFunction\n                     ( None,\n                       flags @ flags_of_meta item_meta,\n                       n_cg,\n                       n,\n                       return_type,\n                       name,\n                       arg_binders,\n                       body ))))\n  | IdGlobal id ->\n      let global = env.get_nth_global id in\n      let { C.item_meta; ty; def_id; _ } = global in\n      let name = item_meta.name in\n      let def = env.get_nth_global def_id in\n      L.log \"AstOfLlbc\" \"Visiting global: %s\\n%s\" (string_of_name env name)\n        (Charon.Print.global_decl_to_string env.format_env \"  \" \"  \" def);\n      let ty = typ_of_ty env ty in\n      let flags =\n        [ Krml.Common.Const \"\" ]\n        @\n        match global.global_kind with\n        | NamedConst | AnonConst ->\n            (* This is trickier: const can be evaluated at compile-time, so in theory, we could just\n               emit a macro, except (!) in C, arrays need to be top-level declarations (not macros)\n               because even with compound literals, you can't do `((int[1]){0})[0]` in expression\n               position.\n\n               We can't use the test \"is_bufcreate\" because the expression might only be a bufcreate\n               *after* simplification, so we rely on the type here. *)\n            if Krml.Helpers.is_array ty then\n              []\n            else\n              [ Macro ]\n        | Static ->\n            (* This one needs to have an address, so definitely not emitting it as a macro. *)\n            []\n      in\n      let body = env.get_nth_function def.init in\n      L.log \"AstOfLlbc\" \"Corresponding body:%s\"\n        (Charon.Print.fun_decl_to_string env.format_env \"  \" \"  \" body);\n      begin\n        match body.body with\n        | StructuredBody body ->\n            let ret_var = List.hd body.locals.locals in\n            let body =\n              with_locals env ty body.locals.locals (fun env ->\n                  expression_of_block env ret_var.index body.body)\n            in\n            Some (K.DGlobal (flags, lid_of_name env name, 0, ty, body))\n        | _ -> Some (K.DExternal (None, [], 0, 0, lid_of_name env name, ty, []))\n      end\n  | IdTraitDecl _ | IdTraitImpl _ -> None\n\nlet name_of_id env (id : C.item_id) =\n  match id with\n  | IdType id -> (env.get_nth_type id).item_meta.name\n  | IdFun id -> (env.get_nth_function id).item_meta.name\n  | IdGlobal id -> (env.get_nth_global id).item_meta.name\n  | _ -> failwith \"unsupported\"\n\nlet known_failures =\n  List.map Charon.NameMatcher.parse_pattern\n    [\n      (* Failure(\"TODO: TraitTypes Self::Output\") *)\n      \"core::array::{core::ops::index::Index<[@T; @N], @I, @C>}::index\";\n      (* Failure(\"TODO: TraitTypes parent(Self)::TraitClause@0::Output\") *)\n      \"core::array::{core::ops::index::IndexMut<[@T; @N], @I, @C>}::index_mut\";\n      (* Failure(\"TODO: TraitTypes core::marker::DiscriminantKind<T@0>::Discriminant\") *)\n      \"core::intrinsics::discriminant_value\";\n      (* Failure(\"TODO: TraitTypes Self::Output\") *)\n      \"core::slice::index::{core::ops::index::Index<[@T], @I, @C>}::index\";\n      (* Failure(\"TODO: TraitTypes Self::Output\") *)\n      \"core::slice::index::{core::ops::index::IndexMut<[@T], @I, @C>}::index_mut\";\n      (* File \"lib/AstOfLlbc.ml\", line 389, characters 6-12: Assertion failed *)\n      \"core::slice::index::{core::slice::index::SliceIndex<core::ops::range::Range<usize>, [@T], \\\n       [@T]>}::get_unchecked\";\n      (* File \"lib/AstOfLlbc.ml\", line 389, characters 6-12: Assertion failed *)\n      \"core::slice::index::{core::slice::index::SliceIndex<core::ops::range::Range<usize>, [@T], \\\n       [@T]>}::get_unchecked_mut\";\n      (* File \"lib/AstOfLlbc.ml\", line 389, characters 6-12: Assertion failed *)\n      \"core::slice::index::{core::slice::index::SliceIndex<core::ops::range::RangeFrom<usize>, \\\n       [@T], [@T]>}::get_unchecked\";\n      (* File \"lib/AstOfLlbc.ml\", line 389, characters 6-12: Assertion failed *)\n      \"core::slice::index::{core::slice::index::SliceIndex<core::ops::range::RangeFrom<usize>, \\\n       [@T], [@T]>}::get_unchecked_mut\";\n      (* File \"lib/AstOfLlbc.ml\", line 389, characters 6-12: Assertion failed *)\n      \"core::slice::index::{core::slice::index::SliceIndex<core::ops::range::RangeTo<usize>, [@T], \\\n       [@T]>}::get_unchecked\";\n      (* File \"lib/AstOfLlbc.ml\", line 389, characters 6-12: Assertion failed *)\n      \"core::slice::index::{core::slice::index::SliceIndex<core::ops::range::RangeTo<usize>, [@T], \\\n       [@T]>}::get_unchecked_mut\";\n      (* Failure(\"TODO: TraitTypes core::marker::DiscriminantKind<T@0>::Discriminant\") *)\n      \"issue_123::{core::cmp::PartialEq<issue_123::E2, issue_123::E2>}::eq\";\n      (* Failure(\"Can't handle arbitrary closures\") *)\n      \"mismatch::{mismatch::MlKemKeyPairUnpacked<@Vector, @K>}::default\";\n    ]\n\nlet replacements =\n  List.map\n    (fun (p, d) -> Charon.NameMatcher.parse_pattern p, d)\n    [\n      \"core::result::{core::result::Result<@T, @E>}::unwrap\", Builtin.unwrap;\n      \"core::slice::{[@T]}::swap\", Builtin.slice_swap;\n      \"alloc::vec::{alloc::vec::Vec<@T>}::try_with_capacity\", Builtin.try_with_capacity;\n      \"core::ptr::null_mut\", Builtin.null_mut;\n    ]\n\n(* Catch-all error handler (last resort) *)\nlet decl_of_id env decl =\n  match\n    List.find_map\n      (fun (p, d) ->\n        match\n          Charon.NameMatcher.match_name env.name_ctx RustNames.config p (name_of_id env decl)\n        with\n        | true -> Some d\n        | false -> None\n        | exception _ -> None)\n      replacements\n  with\n  | Some d ->\n      let lid = lid_of_name env (name_of_id env decl) in\n      L.log \"AstOfLlbc\" \"Found replacement for %a\" plid lid;\n      Some (d lid)\n  | None -> (\n      try decl_of_id env decl\n      with e ->\n        let matches p =\n          Charon.NameMatcher.match_name env.name_ctx RustNames.config p (name_of_id env decl)\n        in\n        if not (List.exists matches known_failures) then begin\n          Printf.eprintf \"ERROR translating %s: %s\\n%s\"\n            (string_of_pattern (pattern_of_name env (name_of_id env decl)))\n            (Printexc.to_string e) (Printexc.get_backtrace ());\n          if not !Options.keep_going then\n            exit 255\n          else\n            None\n        end\n        else\n          None)\n\nlet flatten_declarations (d : C.declaration_group list) : C.item_id list =\n  List.flatten (List.map declaration_group_to_list d)\n\nlet decls_of_declarations (env : env) (d : C.item_id list) : K.decl list =\n  incr seen;\n  L.log \"Progress\" \"%s: %d/%d\" env.crate_name !seen !total;\n  Krml.KList.filter_some @@ List.map (decl_of_id env) d\n\n(*\nlet impl_obligation (ob: decl_obligation) : K.decl =\n    match ob with ObliArray (lid, t_array) ->\n      L.log \"AstOfLlbc\" \"append new decl of struct: %a\" plid lid;\n      K.DType (lid, [], 1, 1, Flat [(Some \"data\",(t_array,true))])\n\nlet impl_obligations (obpairs : (decl_obligation * unit) list) : K.decl list =\n  List.map impl_obligation (List.map fst obpairs)\n  *)\n\nlet file_of_crate (crate : Charon.LlbcAst.crate) : Krml.Ast.file =\n  let {\n    C.name;\n    declarations;\n    type_decls;\n    fun_decls;\n    global_decls;\n    trait_decls;\n    trait_impls;\n    options;\n    _;\n  } =\n    crate\n  in\n  if options.preset <> Some Eurydice then begin\n    Printf.eprintf \"ERROR: Eurydice expects Charon to be invoked with `--preset=eurydice`\\n\";\n    exit 255\n  end;\n  let declarations = flatten_declarations declarations in\n  seen := 0;\n  total := List.length declarations;\n  let format_env = Charon.Print.crate_to_fmt_env crate in\n  let get_nth_function id =\n    match C.FunDeclId.Map.find_opt id fun_decls with\n    | Some f -> f\n    | None -> fail \"Function id not found: %s\" (Charon.Print.fun_decl_id_to_string format_env id)\n  in\n  let get_nth_type id =\n    match C.TypeDeclId.Map.find_opt id type_decls with\n    | Some ty -> ty\n    | None -> fail \"Type id not found: %s\" (Charon.Print.type_decl_id_to_string format_env id)\n  in\n  let get_nth_global id =\n    match C.GlobalDeclId.Map.find_opt id global_decls with\n    | Some g -> g\n    | None -> fail \"Global id not found: %s\" (Charon.Print.global_decl_id_to_string format_env id)\n  in\n  let get_nth_trait_impl id =\n    match C.TraitImplId.Map.find_opt id trait_impls with\n    | Some impl -> impl\n    | None ->\n        fail \"Trait impl id not found: %s\" (Charon.Print.trait_impl_id_to_string format_env id)\n  in\n  let get_nth_trait_decl id =\n    match C.TraitDeclId.Map.find_opt id trait_decls with\n    | Some decl -> decl\n    | None ->\n        fail \"Trait decl id not found: %s\" (Charon.Print.trait_decl_id_to_string format_env id)\n  in\n  let name_ctx = Charon.NameMatcher.ctx_from_crate crate in\n  let env =\n    {\n      get_nth_function;\n      get_nth_type;\n      get_nth_global;\n      get_nth_trait_impl;\n      get_nth_trait_decl;\n      crate;\n      cg_binders = [];\n      binders = [];\n      type_binders = [];\n      format_env;\n      crate_name = name;\n      name_ctx;\n      generic_params = Charon.TypesUtils.empty_generic_params;\n    }\n  in\n  let trans_decls = decls_of_declarations env declarations in\n  let extra_decls = Builtin.[ dst_ref_shared_decl; dst_ref_mut_decl; decl_of_arr ] in\n  name, trans_decls @ extra_decls\n"
  },
  {
    "path": "lib/Builtin.ml",
    "content": "module K = struct\n  include Krml.Ast\nend\n\n(** 1. Things that could otherwise be emitted as an extern prototype, but for some reason ought to\n    be skipped. This is used by main.ml *)\nlet skip = Krml.Idents.LidSet.of_list [ [ \"Eurydice\" ], \"assert\"; [], \"UNIT_METADATA\" ]\n\n(** 2. Internal types; this is the equivalent of an abstract type *)\n\nlet char_t = K.(TInt UInt32)\nlet c_void_t = K.TQualified ([ \"Eurydice\" ], \"c_void_t\")\nlet c_char_t = K.TQualified ([ \"Eurydice\" ], \"c_char_t\")\nlet int128_t = K.TQualified ([ \"Eurydice\"; \"Int128\" ], \"int128_t\")\nlet uint128_t = K.TQualified ([ \"Eurydice\"; \"Int128\" ], \"uint128_t\")\n\n(** 3. Types that we *define* in abstract syntax, and associated helpers. *)\n\n(** Dynamically-sized types. *)\nlet dst_ref_shared = [ \"Eurydice\" ], \"dst_ref_shared\"\n\nlet dst_ref_shared_decl =\n  K.DType\n    ( dst_ref_shared,\n      [],\n      0,\n      2,\n      Flat [ Some \"ptr\", (TBuf (TBound 1, true), false); Some \"meta\", (TBound 0, false) ] )\n\nlet dst_ref_mut = [ \"Eurydice\" ], \"dst_ref_mut\"\n\nlet dst_ref_mut_decl =\n  K.DType\n    ( dst_ref_mut,\n      [],\n      0,\n      2,\n      Flat [ Some \"ptr\", (TBuf (TBound 1, false), false); Some \"meta\", (TBound 0, false) ] )\n\nlet mk_dst_ref ~const (t : K.typ) (meta : K.typ) : K.typ =\n  let const =\n    if !Options.no_const then\n      false\n    else\n      const\n  in\n  K.TApp\n    ( (if const then\n         dst_ref_shared\n       else\n         dst_ref_mut),\n      [ t; meta ] )\n\nlet mk_slice ~const (t : K.typ) : K.typ = mk_dst_ref ~const t (TInt SizeT)\n\n(* Take the type of the ptr field *)\nlet dst_new ~const ~ptr ~len t =\n  let open K in\n  with_type (mk_slice ~const t) (EFlat [ Some \"ptr\", ptr; Some \"meta\", len ])\n\n(* Arrays, as values.\n\n    Special treatment for the array type: translating [T;C] as rust generic type\n    struct <const C:usize, T> { data : [T;C]; } *)\nlet arr : K.lident = [ \"Eurydice\" ], \"arr\"\nlet mk_arr (t : K.typ) (cg : K.cg) : K.typ = K.TCgApp (K.TApp (arr, [ t ]), cg)\n\n(* []  : no flags\n     1  : we have one const generic C\n     1  : we have one type argument T *)\nlet decl_of_arr = K.DType (arr, [], 1, 1, Flat [ Some \"data\", (K.TCgArray (TBound 0, 0), true) ])\n\n(* a->data where a: Arr<t,n>*, to be used before eurydice monomorphization *)\nlet data_of_arrref ?const (arrref : K.expr) t n_cgid =\n  let arr =\n    Krml.Helpers.(mk_deref ?const (Krml.Helpers.assert_tbuf_or_tarray arrref.typ) arrref.node)\n  in\n  K.(with_type (TCgArray (t, n_cgid)) (EField (arr, \"data\")))\n\nlet c_string_def =\n  K.DType (([ \"Prims\" ], \"string\"), [ Private ], 0, 0, Abbrev (TBuf (c_char_t, false)))\n\nlet nonzero = [ \"core\"; \"num\"; \"nonzero\" ], \"NonZero\"\nlet nonzero_def = K.DType (nonzero, [], 0, 1, Abbrev (TBound 0))\nlet mk_nonzero t = K.TApp (nonzero, [ t ])\n\n(* 4. Helpers to build types that are either eliminated, implemented as macros, or are generated by\n   the translation. *)\n\nlet derefed_slice = [ \"Eurydice\" ], \"derefed_slice\"\n\n(** The C counterpart of `&str` *)\nlet str_t ~const = mk_dst_ref ~const c_char_t (TInt SizeT)\n\n(** The C counterpart of `str` and serves twofold functionalities: (1) when in expressions, it\n    serves as a placeholder to get referenced again; (2) when in customised DST definition, it is\n    defined as [char []] to have 0-length. *)\nlet deref_str_t = K.TApp (derefed_slice, [ c_char_t ])\n\nlet vec : K.lident = [ \"Eurydice\" ], \"vec\"\nlet mk_vec (t : K.typ) : K.typ = K.TApp (vec, [ t ])\nlet range : K.lident = [ \"core\"; \"ops\"; \"range\" ], \"Range\"\nlet mk_range (t : K.typ) : K.typ = K.TApp (range, [ t ])\nlet range_to : K.lident = [ \"core\"; \"ops\"; \"range\" ], \"RangeTo\"\nlet mk_range_to (t : K.typ) : K.typ = K.TApp (range_to, [ t ])\nlet range_from : K.lident = [ \"core\"; \"ops\"; \"range\" ], \"RangeFrom\"\nlet mk_range_from (t : K.typ) : K.typ = K.TApp (range_from, [ t ])\nlet option : K.lident = [ \"core\"; \"option\" ], \"Option\"\nlet mk_option (t : K.typ) : K.typ = K.TApp (option, [ t ])\nlet result = [ \"core\"; \"result\" ], \"Result\"\nlet mk_result t1 t2 = K.TApp (result, [ t1; t2 ])\nlet mk_sizeT = K.with_type (TInt SizeT)\nlet iterator : K.lident = [ \"core\"; \"iter\"; \"traits\"; \"iterator\" ], \"Iterator\"\nlet mk_iterator t = K.TApp (iterator, [ t ])\nlet step_by : K.lident = [ \"core\"; \"iter\"; \"adapters\"; \"step_by\" ], \"StepBy\"\nlet mk_step_by t = K.TApp (step_by, [ t ])\nlet mk_range_step_by_iterator t = mk_iterator (mk_step_by t)\nlet layout_t = K.TQualified ([ \"core\"; \"alloc\"; \"layout\" ], \"Layout\")\n\n(** 5. A list of known builtins, i.e. functions that we intend to implement as macros, or eliminate\n    later on. Some of these are markers inserted by AstOfLlbc, and destined to be eliminated later\n    through targeted phases. *)\n\ntype builtin = {\n  name : K.lident;\n  typ : K.typ;\n  n_type_args : int;\n  cg_args : K.typ list;\n  arg_names : string list;\n}\n(** A record to hold a builtin *function* with all relevant information for both krml and the\n    transpilation phase in AstOfLlbc *)\n\nlet expr_of_builtin { name; typ; cg_args; _ } =\n  (* let open Krml in *)\n  (* let open PrintAst.Ops in *)\n  (* KPrint.bprintf \"%a:\\n  typ = %a\\n  cg_args=%a\\n\\n\" plid name ptyp typ ptyps cg_args; *)\n  let typ = List.fold_right (fun t acc -> K.TArrow (t, acc)) cg_args typ in\n  K.(with_type typ (EQualified name))\n\nlet chop_cg_args n t =\n  let t, ts = Krml.Helpers.flatten_arrow t in\n  let _, ts = Krml.KList.split n ts in\n  let t = Krml.Helpers.fold_arrow ts t in\n  t\n\nlet expr_of_builtin_t builtin ?(cgs = 0, []) ts =\n  let open Krml.DeBruijn in\n  let builtin = expr_of_builtin builtin in\n  let diff, cg_exprs = cgs in\n  let cgs = List.map (cg_of_expr diff) cg_exprs in\n  let t = chop_cg_args (List.length cgs) (subst_tn ts (subst_ctn' cgs builtin.typ)) in\n  K.(with_type t (ETApp (builtin, cg_exprs, [], ts)))\n\nmodule Op128Map = Map.Make (struct\n  type t = string * string\n\n  let compare = Stdlib.compare\nend)\n\n(* Builtins for i128 and u128 are defined here but implemented in C. *)\nlet mk_128_builtin_op kind op lhs_typ rhs_typ ret_typ =\n  let name = [ \"Eurydice\"; \"Int128\" ], kind ^ \"128_\" ^ op in\n  let args, arg_names =\n    match rhs_typ with\n    | K.TUnit -> [ lhs_typ ], [ \"lhs\" ]\n    | rhs -> [ lhs_typ; rhs ], [ \"lhs\"; \"rhs\" ]\n  in\n  { name; typ = Krml.Helpers.fold_arrow args ret_typ; n_type_args = 0; cg_args = []; arg_names }\n\nlet op_128_cfgs =\n  [\n    (\"i\", \"from_bits\"), (Krml.Helpers.uint64, Krml.Helpers.uint64, int128_t);\n    (\"i\", \"add\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"sub\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"mul\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"div\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"mod\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"bor\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"band\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"bxor\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"shl\"), (int128_t, TInt UInt32, int128_t);\n    (\"i\", \"shr\"), (int128_t, TInt UInt32, int128_t);\n    (\"i\", \"bnot\"), (int128_t, K.TUnit, int128_t);\n    (\"i\", \"neg\"), (int128_t, K.TUnit, int128_t);\n    (\"u\", \"neg\"), (uint128_t, K.TUnit, uint128_t);\n    (\"i\", \"eq\"), (int128_t, int128_t, TBool);\n    (\"i\", \"lt\"), (int128_t, int128_t, TBool);\n    (\"i\", \"gt\"), (int128_t, int128_t, TBool);\n    (\"i\", \"lte\"), (int128_t, int128_t, TBool);\n    (\"i\", \"gte\"), (int128_t, int128_t, TBool);\n    (\"i\", \"neq\"), (int128_t, int128_t, TBool);\n    (\"i\", \"addW\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"subW\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"divW\"), (int128_t, int128_t, int128_t);\n    (\"i\", \"multW\"), (int128_t, int128_t, int128_t);\n    (\"u\", \"from_bits\"), (Krml.Helpers.uint64, Krml.Helpers.uint64, uint128_t);\n    (\"u\", \"add\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"sub\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"mul\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"div\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"mod\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"bor\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"band\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"bxor\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"shl\"), (uint128_t, TInt UInt32, uint128_t);\n    (\"u\", \"shr\"), (uint128_t, TInt UInt32, uint128_t);\n    (\"u\", \"bnot\"), (uint128_t, K.TUnit, uint128_t);\n    (\"u\", \"eq\"), (uint128_t, uint128_t, TBool);\n    (\"u\", \"lt\"), (uint128_t, uint128_t, TBool);\n    (\"u\", \"gt\"), (uint128_t, uint128_t, TBool);\n    (\"u\", \"lte\"), (uint128_t, uint128_t, TBool);\n    (\"u\", \"gte\"), (uint128_t, uint128_t, TBool);\n    (\"u\", \"neq\"), (uint128_t, uint128_t, TBool);\n    (\"u\", \"addW\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"subW\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"divW\"), (uint128_t, uint128_t, uint128_t);\n    (\"u\", \"multW\"), (uint128_t, uint128_t, uint128_t);\n  ]\n  |> List.fold_left\n       (fun acc ((kind, op), (lhs_typ, rhs_typ, ret_typ)) ->\n         Op128Map.add (kind, op) (mk_128_builtin_op kind op lhs_typ rhs_typ ret_typ) acc)\n       Op128Map.empty\n\nlet get_128_op (kind, op) : K.expr = expr_of_builtin @@ Op128Map.find (kind, op) op_128_cfgs\n\n(** Get the size of the given type, corresponding to `sizeof` in C. This corresponds to\n    `NullOp::SizeOf` in Charon, which is itself used in metadata field `size` in vtable. *)\nlet sizeof =\n  {\n    name = [ \"Eurydice\" ], \"sizeof\";\n    typ = Krml.Helpers.fold_arrow [] (TInt SizeT);\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [];\n  }\n\n(** Get the alignment of the given type, corresponding to `alignof` in C. This corresponds to\n    `NullOp::AlignOf` in Charon, which is itself used in metadata field `align` in vtable. *)\nlet alignof =\n  {\n    name = [ \"Eurydice\" ], \"alignof\";\n    typ = Krml.Helpers.fold_arrow [] (TInt SizeT);\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [];\n  }\n\nlet suffix_of_const const =\n  if const then\n    \"_shared\"\n  else\n    \"_mut\"\n\n(* These two are placeholders that are inserted by AstOfLlbc with the intent that they should be\n   desugared later on, once monomorphization and data type compilation, respectively, have happened. *)\nlet array_repeat =\n  {\n    name = [ \"Eurydice\" ], \"array_repeat\";\n    typ = Krml.Helpers.fold_arrow [ TBound 0 ] (TCgArray (TBound 0, 0));\n    n_type_args = 1;\n    cg_args = [ TInt SizeT ];\n    arg_names = [ \"init\" ];\n  }\n\n(* Eurydice_discriminant<T,U>(x: T) -> U\n   T = type of the argument (an ADT)\n   U = expected type of the discriminant (usize, u8, etc.)\n   There is an unverified invariant that the algorithm in CStarToC11 to automatically pick suitable\n   sizes for the `tag` field is compatible with the expected type U here. *)\nlet discriminant =\n  {\n    name = [ \"Eurydice\" ], \"discriminant\";\n    typ = Krml.Helpers.fold_arrow [ TBound 1 ] (TBound 0);\n    n_type_args = 2;\n    cg_args = [];\n    arg_names = [ \"adt\" ];\n  }\n\nlet array_eq =\n  {\n    name = [ \"Eurydice\" ], \"array_eq\";\n    typ =\n      Krml.Helpers.fold_arrow\n        [ TBuf (mk_arr (TBound 0) (CgVar 0), true); TBuf (mk_arr (TBound 0) (CgVar 0), true) ]\n        TBool;\n    n_type_args = 1;\n    cg_args = [ TInt SizeT ];\n    arg_names = [ \"arr\"; \"arr2\" ];\n  }\n\nlet array_eq_slice const =\n  {\n    name = [ \"Eurydice\" ], \"array_eq_slice\" ^ suffix_of_const const;\n    typ =\n      Krml.Helpers.fold_arrow\n        [ TBuf (mk_arr (TBound 0) (CgVar 0), true); TBuf (mk_slice ~const (TBound 0), true) ]\n        TBool;\n    n_type_args = 1;\n    cg_args = [ TInt SizeT ];\n    arg_names = [ \"arr\"; \"slice\" ];\n  }\n\n(* Unlike other builtins in this file, comparing an array for \n   equality with a slice has a single implementation in Rust. \n   It should, by default, take a const pointer to the slice, \n   on the basis that the callee does not modify its argument. \n   However, when `--no-const` is passed as an option, we pick a \n   variant that takes a mutable slice so as to avoid generating \n   const slice types. *)\nlet array_eq_slice_shared = array_eq_slice true\nlet array_eq_slice_mut = array_eq_slice false\n\nlet slice_eq const =\n  {\n    name = [ \"Eurydice\" ], \"slice_eq\" ^ suffix_of_const const;\n    typ =\n      Krml.Helpers.fold_arrow\n        [ TBuf (mk_slice ~const (TBound 0), true); TBuf (mk_slice ~const (TBound 0), true) ]\n        TBool;\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [ \"s1\"; \"s2\" ];\n  }\n\nlet slice_eq_shared = slice_eq true\nlet slice_eq_mut = slice_eq false\n\n(* XXX investigate whether this can be extracted now...?\n\n   This is incorrect: the function receives e.g.\n   - Range<usize> as its type argument,\n   - &StepBy<Range<usize>> for the type of its argument,\n   then returns Option<usize> for its return value. Which we can't really type. *)\nlet range_iterator_step_by =\n  {\n    name = [ \"Eurydice\" ], \"range_iterator_step_by\";\n    typ =\n      Krml.Helpers.fold_arrow [ mk_range (TBound 0); TInt SizeT ] (mk_step_by (mk_range (TBound 0)));\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [ \"iter\" ];\n  }\n\nlet range_step_by_iterator_next =\n  {\n    name = [ \"Eurydice\" ], \"range_step_by_iterator_next\";\n    typ =\n      Krml.Helpers.fold_arrow\n        [ TBuf (mk_step_by (mk_range (TBound 0)), false) ]\n        (mk_option (TBound 0));\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [ \"iter\" ];\n  }\n\nlet slice_index const =\n  {\n    name = [ \"Eurydice\" ], \"slice_index\" ^ suffix_of_const const;\n    typ = Krml.Helpers.fold_arrow [ mk_slice ~const (TBound 0); TInt SizeT ] (TBound 0);\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [ \"s\"; \"i\" ];\n  }\n\nlet slice_index_shared = slice_index true\nlet slice_index_mut = slice_index false\n\n(* The three entries below do not need a shared/mut variant because of the way the &mut[T] vs &[T]\n   is passed as an argument to the type application *)\n\n(* This is replaced in PreCleanup because we need to allocate a Arr<T,C> *)\nlet slice_to_array =\n  {\n    name = [ \"Eurydice\" ], \"slice_to_array\";\n    typ = Krml.Helpers.fold_arrow [ TBound 2 ] (mk_result (TBound 1) (TBound 0));\n    n_type_args = 3;\n    cg_args = [];\n    arg_names = [ \"s\" ];\n  }\n\n(* This is replaced by slice_to_ref_array2 by allocate a  Arr<T,C> and pass the ref as arg*)\nlet slice_to_ref_array =\n  {\n    name = [ \"Eurydice\" ], \"slice_to_ref_array\";\n    typ = Krml.Helpers.fold_arrow [ TBound 2 ] (mk_result (TBound 1) (TBound 0));\n    n_type_args = 3;\n    cg_args = [ TInt SizeT ];\n    arg_names = [ \"s\" ];\n  }\n\nlet slice_to_ref_array2 =\n  {\n    name = [ \"Eurydice\" ], \"slice_to_ref_array2\";\n    typ = Krml.Helpers.fold_arrow [ TBound 2; TBound 1 ] (mk_result (TBound 1) (TBound 0));\n    n_type_args = 3;\n    cg_args = [ TInt SizeT ];\n    arg_names = [ \"s\" ];\n  }\n\nlet box_new =\n  {\n    name = [ \"Eurydice\" ], \"box_new\";\n    typ = Krml.Helpers.fold_arrow [ TBound 0 ] (TBuf (TBound 0, false));\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [ \"v\" ];\n  }\n\nlet empty_array =\n  {\n    name = [ \"Eurydice\" ], \"empty_array\";\n    typ = Krml.Helpers.fold_arrow [ TBound 0 ] (mk_arr (TBound 0) (CgConst (SizeT, \"0\")));\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [ \"x\" ];\n  }\n\nlet replace =\n  {\n    name = [ \"Eurydice\" ], \"replace\";\n    typ = Krml.Helpers.fold_arrow [ TBuf (TBound 0, false); TBound 0 ] (TBound 0);\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [ \"v\"; \"x\" ];\n  }\n\n(* pointer, value *)\nlet bitand_pv_u8 =\n  {\n    name = [ \"Eurydice\" ], \"bitand_pv_u8\";\n    typ = Krml.Helpers.fold_arrow [ TBuf (TInt UInt8, false); TInt UInt8 ] (TInt UInt8);\n    n_type_args = 0;\n    cg_args = [];\n    arg_names = [ \"x\"; \"y\" ];\n  }\n\nlet shr_pv_u8 =\n  {\n    name = [ \"Eurydice\" ], \"shr_pv_u8\";\n    typ = Krml.Helpers.fold_arrow [ TBuf (TInt UInt8, false); TInt Int32 ] (TInt UInt8);\n    n_type_args = 0;\n    cg_args = [];\n    arg_names = [ \"x\"; \"y\" ];\n  }\n\nlet min_u32 =\n  {\n    name = [ \"Eurydice\" ], \"min_u32\";\n    typ = Krml.Helpers.fold_arrow [ TInt UInt32; TInt UInt32 ] (TInt UInt32);\n    n_type_args = 0;\n    cg_args = [];\n    arg_names = [ \"x\"; \"y\" ];\n  }\n\n(* A non error-checking function that returns a vector whose ptr component is potentially NULL *)\nlet vec_alloc =\n  {\n    name = [ \"Eurydice\" ], \"vec_alloc\";\n    typ = Krml.Helpers.fold_arrow [ TInt SizeT ] (mk_vec (TBound 0));\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [ \"len\" ];\n  }\n\n(* Will allocating len elements of type T overflow SIZE_MAX? *)\nlet vec_overflows =\n  {\n    name = [ \"Eurydice\" ], \"vec_overflows\";\n    typ = Krml.Helpers.fold_arrow [ TInt SizeT ] TBool;\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [ \"len\" ];\n  }\n\n(* Since Eurydice_vec is opaque from the point of view of krml, we expose a helper (implemented with\n   a macro) that can determine whether this a failed allocation *)\nlet vec_failed =\n  {\n    name = [ \"Eurydice\" ], \"vec_failed\";\n    typ = Krml.Helpers.fold_arrow [ mk_vec (TBound 0) ] TBool;\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [ \"v\" ];\n  }\n\n(* Compute a layout from a type *)\nlet layout =\n  {\n    name = [ \"Eurydice\" ], \"layout\";\n    typ = Krml.Helpers.fold_arrow [ TUnit ] layout_t;\n    n_type_args = 1;\n    cg_args = [];\n    arg_names = [];\n  }\n\n(* 6. Implementations, defined as DFunction using abstract syntax.\n\n We still provide a corresponding `builtin` to facilitate interop between AstOfLlbc and later phases\n -- we still need to convey type information for AstOfLlbc to generate well-typed nodes. *)\n\n(* Helpers for common use *)\n\n(* let array_to_slice<T;N> (a : &Arr<T,N>) = dst_ref { ptr = a->data; meta = N }  *)\nlet array_to_slice_func const =\n  let open Krml in\n  let open Ast in\n  let element_t = TBound 0 in\n  let arrref_t = TBuf (mk_arr (TBound 0) (CgVar 0), const) in\n  let ret_t = mk_slice ~const element_t in\n  let lid = [ \"Eurydice\" ], \"array_to_slice\" ^ suffix_of_const const in\n  let binders = [ Helpers.fresh_binder \"N\" (TInt SizeT); Helpers.fresh_binder \"a\" arrref_t ] in\n  let expr =\n    (* args *)\n    let n = mk_sizeT (EBound 1) in\n    let arrref = with_type arrref_t (EBound 0) in\n    let data = data_of_arrref ~const:true arrref element_t 0 in\n    with_type ret_t (EFlat [ Some \"ptr\", data; Some \"meta\", n ])\n  in\n  DFunction (None, [ Private ], 1, 1, ret_t, lid, binders, expr)\n\nlet array_to_slice_func_shared = array_to_slice_func true\nlet array_to_slice_func_mut = array_to_slice_func false\n\n(* let array_to_subslice<T, _, _;N> (r: Range<SizeT>, x : &Arr<T,N>)\n   = dst_ref { ptr = a->data + r.start ; meta = r.end - r.start }  *)\nlet array_to_subslice_func const =\n  let open Krml in\n  let open Ast in\n  let element_t = TBound 2 in\n  let arrref_t = TBuf (mk_arr (TBound 2) (CgVar 0), const) in\n  let ret_t = mk_slice ~const element_t in\n  let lid = [ \"Eurydice\" ], \"array_to_subslice\" ^ suffix_of_const const in\n  let binders =\n    [\n      Helpers.fresh_binder \"N\" (TInt SizeT);\n      Helpers.fresh_binder \"a\" arrref_t;\n      Helpers.fresh_binder \"r\" (mk_range (TInt SizeT));\n    ]\n  in\n  let expr =\n    (* args *)\n    let arrref = with_type arrref_t (EBound 1) in\n    let range = with_type (mk_range (TInt SizeT)) (EBound 0) in\n    let data = data_of_arrref ~const:true arrref element_t 0 in\n    let r_start = mk_sizeT (EField (range, \"start\")) in\n    let r_end = mk_sizeT (EField (range, \"end\")) in\n    let meta = mk_sizeT (EApp (Helpers.mk_op Sub (TInt SizeT), [ r_end; r_start ])) in\n    let ptr = with_type (TBuf (element_t, const)) (EBufSub (data, r_start)) in\n    with_type ret_t (EFlat [ Some \"ptr\", ptr; Some \"meta\", meta ])\n  in\n  DFunction (None, [ Private ], 1, 3, ret_t, lid, binders, expr)\n\nlet array_to_subslice_func_shared = array_to_subslice_func true\nlet array_to_subslice_func_mut = array_to_subslice_func false\n\n(* let array_to_subslice_to<T;N> (r: RangeTo<SizeT>, x : &Arr<T,N>)\n   = dst_ref { ptr = a->data; meta = r.end } *)\nlet array_to_subslice_to_func const =\n  let open Krml in\n  let open Ast in\n  let element_t = TBound 2 in\n  let arrref_t = TBuf (mk_arr (TBound 2) (CgVar 0), const) in\n  let ret_t = mk_slice ~const element_t in\n  let lid = [ \"Eurydice\" ], \"array_to_subslice_to\" ^ suffix_of_const const in\n  let binders =\n    [\n      Helpers.fresh_binder \"N\" (TInt SizeT);\n      Helpers.fresh_binder \"a\" arrref_t;\n      Helpers.fresh_binder \"r\" (mk_range_to (TInt SizeT));\n    ]\n  in\n  let expr =\n    (* args *)\n    let arrref = with_type arrref_t (EBound 1) in\n    let range = with_type (mk_range_to (TInt SizeT)) (EBound 0) in\n    (* { .ptr = a->data + r.start, .meta = r.end - r.start }*)\n    let data = data_of_arrref ~const:true arrref element_t 0 in\n    let meta = with_type (TInt SizeT) (EField (range, \"end\")) in\n    with_type ret_t (EFlat [ Some \"ptr\", data; Some \"meta\", meta ])\n  in\n  DFunction (None, [ Private ], 1, 3, ret_t, lid, binders, expr)\n\nlet array_to_subslice_to_func_shared = array_to_subslice_to_func true\nlet array_to_subslice_to_func_mut = array_to_subslice_to_func false\n\n(* let array_to_subslice_from<T, _, _;N> (r: RangeFrom<SizeT>, x : &Arr<T,N>)\n   = dst_ref { ptr = a->data + r.start; meta = N - r.start } *)\nlet array_to_subslice_from_func const =\n  let open Krml in\n  let open Ast in\n  let element_t = TBound 2 in\n  let arrref_t = TBuf (mk_arr (TBound 2) (CgVar 0), const) in\n  let ret_t = mk_slice ~const element_t in\n  let lid = [ \"Eurydice\" ], \"array_to_subslice_from\" ^ suffix_of_const const in\n  let binders =\n    [\n      Helpers.fresh_binder \"N\" (TInt SizeT);\n      Helpers.fresh_binder \"a\" arrref_t;\n      Helpers.fresh_binder \"r\" (mk_range_from (TInt SizeT));\n    ]\n  in\n  let expr =\n    (* args *)\n    let n = mk_sizeT (EBound 2) in\n    let arrref = with_type arrref_t (EBound 1) in\n    let range = with_type (mk_range_from (TInt SizeT)) (EBound 0) in\n    let data = data_of_arrref ~const:true arrref element_t 0 in\n    let start = mk_sizeT (EField (range, \"start\")) in\n    let meta = mk_sizeT (EApp (Helpers.mk_op Sub (TInt SizeT), [ n; start ])) in\n    let ptr = with_type (TBuf (element_t, const)) (EBufSub (data, start)) in\n    with_type ret_t (EFlat [ Some \"ptr\", ptr; Some \"meta\", meta ])\n  in\n  DFunction (None, [ Private ], 1, 3, ret_t, lid, binders, expr)\n\nlet array_to_subslice_from_func_shared = array_to_subslice_from_func true\nlet array_to_subslice_from_func_mut = array_to_subslice_from_func false\n\n(* let slice_subslice<T, _, _> (r: Range<SizeT>, s : DstRef<T,N>)\n   = dst_ref { ptr = s.ptr + r.start; meta = r.end - r.start } *)\nlet slice_subslice_func const =\n  let open Krml in\n  let open Ast in\n  let element_t = TBound 2 in\n  let slice_t = mk_slice ~const element_t in\n  let lid = [ \"Eurydice\" ], \"slice_subslice\" ^ suffix_of_const const in\n  let binders =\n    [ Helpers.fresh_binder \"s\" slice_t; Helpers.fresh_binder \"r\" (mk_range (TInt SizeT)) ]\n  in\n  let expr =\n    (* args *)\n    let slice = with_type slice_t (EBound 1) in\n    let range = with_type (mk_range (TInt SizeT)) (EBound 0) in\n    let ptr = with_type (TBuf (element_t, const)) (EField (slice, \"ptr\")) in\n    let r_start = mk_sizeT (EField (range, \"start\")) in\n    let r_end = mk_sizeT (EField (range, \"end\")) in\n    let meta = mk_sizeT (EApp (Helpers.mk_op Sub (TInt SizeT), [ r_end; r_start ])) in\n    let ptr = with_type (TBuf (element_t, const)) (EBufSub (ptr, r_start)) in\n    with_type slice_t (EFlat [ Some \"ptr\", ptr; Some \"meta\", meta ])\n  in\n  DFunction (None, [ Private ], 0, 3, slice_t, lid, binders, expr)\n\nlet slice_subslice_func_shared = slice_subslice_func true\nlet slice_subslice_func_mut = slice_subslice_func false\n\n(* let slice_subslice_to<T, _, _> (r: RangeTo<SizeT>, s : DstRef<T,N>)\n   = dst_ref { ptr = s.ptr ; meta = r.end } *)\nlet slice_subslice_to_func const =\n  let open Krml in\n  let open Ast in\n  let element_t = TBound 2 in\n  let slice_t = mk_slice ~const element_t in\n  let lid = [ \"Eurydice\" ], \"slice_subslice_to\" ^ suffix_of_const const in\n  let binders =\n    [ Helpers.fresh_binder \"s\" slice_t; Helpers.fresh_binder \"r\" (mk_range_to (TInt SizeT)) ]\n  in\n  let expr =\n    (* args *)\n    let slice = with_type slice_t (EBound 1) in\n    let range = with_type (mk_range_to (TInt SizeT)) (EBound 0) in\n    let ptr = with_type (TBuf (element_t, const)) (EField (slice, \"ptr\")) in\n    let meta = with_type (TInt SizeT) (EField (range, \"end\")) in\n    with_type slice_t (EFlat [ Some \"ptr\", ptr; Some \"meta\", meta ])\n  in\n  DFunction (None, [ Private ], 0, 3, slice_t, lid, binders, expr)\n\nlet slice_subslice_to_func_shared = slice_subslice_to_func true\nlet slice_subslice_to_func_mut = slice_subslice_to_func false\n\n(* let slice_subslice_from<T, _, _> (r: RangeFrom<SizeT>, s : DstRef<T,N>)\n   = dst_ref { ptr = s.ptr + r.start ; meta = s.meta - r.start } *)\nlet slice_subslice_from_func const =\n  let open Krml in\n  let open Ast in\n  let element_t = TBound 2 in\n  let slice_t = mk_slice ~const element_t in\n  let lid = [ \"Eurydice\" ], \"slice_subslice_from\" ^ suffix_of_const const in\n  let binders =\n    [ Helpers.fresh_binder \"s\" slice_t; Helpers.fresh_binder \"r\" (mk_range_from (TInt SizeT)) ]\n  in\n  let expr =\n    (* args *)\n    let slice = with_type slice_t (EBound 1) in\n    let range = with_type (mk_range_from (TInt SizeT)) (EBound 0) in\n    let ptr = with_type (TBuf (element_t, const)) (EField (slice, \"ptr\")) in\n    let meta = mk_sizeT (EField (slice, \"meta\")) in\n    let start = mk_sizeT (EField (range, \"start\")) in\n    let ptr = with_type (TBuf (element_t, const)) (EBufSub (ptr, start)) in\n    let meta = mk_sizeT (EApp (Helpers.mk_op Sub (TInt SizeT), [ meta; start ])) in\n    with_type slice_t (EFlat [ Some \"ptr\", ptr; Some \"meta\", meta ])\n  in\n  DFunction (None, [ Private ], 0, 3, slice_t, lid, binders, expr)\n\nlet slice_subslice_from_func_shared = slice_subslice_from_func true\nlet slice_subslice_from_func_mut = slice_subslice_from_func false\n\n(* Not fully general *)\nlet static_assert, static_assert_ref =\n  let name = [ \"Eurydice\" ], \"assert\" in\n  let typ = Krml.Helpers.fold_arrow [ TBool; Krml.Checker.c_string ] TUnit in\n  ( K.DExternal (None, [ Krml.Common.Private; Macro ], 0, 0, name, typ, [ \"test\"; \"msg\" ]),\n    K.(with_type typ (EQualified name)) )\n\n(* Replacements, now applied on-the-fly in AstOfLlbc.\n\n IMPORTANT: such replacements are written in abstract syntax that *already* has cleanups applied,\n meaning that some passes like Cleanup1.remove_assignments and un-necessary and will actually error\n out. We maintain a list of such functions in Cleanup1, to be kept in sync with this. *)\n\nlet unwrap =\n  let open Krml in\n  let open Ast in\n  let t_T = TBound 1 in\n  let t_E = TBound 0 in\n  let b = Krml.Helpers.fresh_binder \"f0\" t_T in\n  let t_result = mk_result t_T t_E in\n  let binders = [ Helpers.fresh_binder \"self\" t_result ] in\n  (* Ensures this returns always the same term (structurally equal) *)\n  fun lid ->\n    DFunction\n      ( None,\n        [ Private ],\n        0,\n        2,\n        t_T,\n        lid,\n        binders,\n        with_type t_T\n          (EMatch\n             ( Unchecked,\n               with_type t_result (EBound 0),\n               [\n                 ( [ b ],\n                   with_type t_result (PCons (\"Ok\", [ with_type t_T (PBound 0) ])),\n                   with_type t_T (EBound 0) );\n                 ( [],\n                   with_type t_result PWild,\n                   with_type t_T (EAbort (Some t_T, Some \"unwrap not Ok\")) );\n               ] )) )\n\n(* Easier this way rather than implement a macro with an expression-statement.\n\n   external core_slice_{@Slice<T>}_swap <1>:<cg: 0>\n    Eurydice_slice\n    0 ->\n    size_t ->\n      size_t ->\n        ()\n*)\nlet slice_swap =\n  let open Krml in\n  let open Ast in\n  let t = TBound 0 in\n  (* Slice must be mut for elements to be swapped *)\n  let mk_slice = mk_slice ~const:false in\n  let binders =\n    [\n      Helpers.fresh_binder ~mut:true \"s\" (mk_slice t);\n      Helpers.fresh_binder \"i\" (TInt SizeT);\n      Helpers.fresh_binder \"j\" (TInt SizeT);\n    ]\n  in\n  (* with slice type *)\n  let mk_slice = with_type (mk_slice t) in\n  (* with usize type *)\n  let index s i =\n    let slice_index = expr_of_builtin_t slice_index_mut [ t ] in\n    with_type t (EApp (slice_index, [ s; i ]))\n  in\n  let lhs s i =\n    with_type t (EBufRead (with_type (TBuf (t, false)) (EAddrOf (index s i)), Helpers.zero_usize))\n  in\n  fun lid ->\n    DFunction\n      ( None,\n        [ Private ],\n        0,\n        1,\n        TUnit,\n        lid,\n        binders,\n        (* let tmp = s[i]; *)\n        with_type TUnit\n          (ELet\n             ( Helpers.fresh_binder \"tmp\" t,\n               index (mk_slice (EBound 2)) (mk_sizeT (EBound 1)),\n               with_type TUnit\n                 (ESequence\n                    [\n                      (* s[i] = s[j] *)\n                      with_type TUnit\n                        (EAssign\n                           ( lhs (mk_slice (EBound 3)) (mk_sizeT (EBound 2)),\n                             index (mk_slice (EBound 3)) (mk_sizeT (EBound 1)) ));\n                      (* s[j] = tmp *)\n                      with_type TUnit\n                        (EAssign\n                           (lhs (mk_slice (EBound 3)) (mk_sizeT (EBound 1)), with_type t (EBound 0)));\n                    ]) )) )\n\n(* Formerly a macro, using GCC expression-statements:\n\n#define alloc_vec__alloc__vec__Vec_T___try_with_capacity(len, t_elt, t_ret) \\\n  ({ \\\n    size_t element_sz = sizeof(t_elt); \\\n    Eurydice_vec v = Eurydice_vec_try_with_capacity(len, sizeof(t_elt)); \\\n    t_ret r; \\\n    if (!(len <= SIZE_MAX/element_sz)) \\\n      r = ((t_ret){ .tag = core_result_Err, .val = { .case_Err = { .tag = alloc_collections_CapacityOverflow } } }); \\\n    else if (v.ptr != NULL) { \\\n      r = ((t_ret){ .tag = core_result_Ok, .val = { .case_Ok = v }}); \\\n    } else { \\\n      r = ((t_ret){ .tag = core_result_Err, .val = { .case_Err = { \\\n         .tag = alloc_collections_AllocError, /* CHECK ??? */ \\\n         .layout = { .size = len * sizeof(t_elt), .align = 8 } \\\n       }}}); \\\n    } \\\n    r; \\\n  })\n\n  Remember that this is all pre-monomorphization.\n\n*)\nlet try_with_capacity =\n  let open Krml in\n  let open Ast in\n  let t = TBound 0 in\n  let t_try_reserve_error = TQualified ([ \"alloc\"; \"collections\" ], \"TryReserveError\") in\n  (* Result<Vec<T>, TryReserveError> *)\n  let t_ret = TApp (([ \"core\"; \"result\" ], \"Result\"), [ mk_vec t; t_try_reserve_error ]) in\n  (* TryReserveError { kind = TryReserveErrorKind::Cons args } *)\n  let mk_try_reserve_error cons args =\n    with_type t_try_reserve_error\n      (EFlat\n         [\n           ( Some \"kind\",\n             with_type\n               (TQualified ([ \"alloc\"; \"collections\" ], \"TryReserveErrorKind\"))\n               (ECons (cons, args)) );\n         ])\n  in\n  let mk_res_error err = with_type t_ret (ECons (\"Err\", [ err ])) in\n  let mk_res_ok ok = with_type t_ret (ECons (\"Ok\", [ ok ])) in\n  let binders = [ Helpers.fresh_binder \"len\" (TInt SizeT) ] in\n  (* with size *)\n  let ws = with_type (TInt SizeT) in\n  fun lid ->\n    DFunction\n      ( None,\n        [ Private ],\n        0,\n        1,\n        t_ret,\n        lid,\n        binders,\n        with_type t_ret\n          (EIfThenElse\n             ( (* if vec_overflows<t_elt>(len) then *)\n               with_type TBool (EApp (expr_of_builtin_t vec_overflows [ t ], [ ws (EBound 0) ])),\n               (* Result::Error(TryReserveError { kind = TryReserveErrorKind::CapacityOverflow }) *)\n               mk_res_error (mk_try_reserve_error \"CapacityOverflow\" []),\n               (* else let v: vec<t_elt> = vec_alloc len in *)\n               with_type t_ret\n                 (ELet\n                    ( Helpers.fresh_binder \"v\" (mk_vec t),\n                      with_type (mk_vec t)\n                        (EApp (expr_of_builtin_t vec_alloc [ t ], [ ws (EBound 0) ])),\n                      (* if vec_failed v then *)\n                      with_type t_ret\n                        (EIfThenElse\n                           ( with_type TBool\n                               (EApp\n                                  ( expr_of_builtin_t vec_failed [ t ],\n                                    [ with_type (mk_vec t) (EBound 0) ] )),\n                             (* Result::Error(\n                  TryReserveError { kind = TryReserveErrorKind::AllocError { layout: layout<T>(), non_exhaustive: () }}\n                 )\n              *)\n                             mk_res_error\n                               (mk_try_reserve_error \"AllocError\"\n                                  [\n                                    (* \"layout\", *)\n                                    with_type layout_t\n                                      (EApp (expr_of_builtin_t layout [ t ], [ Helpers.eunit ]));\n                                    (* \"non_exhaustive\", *)\n                                    Helpers.eunit;\n                                  ]),\n                             (* Result::Ok(v) *)\n                             mk_res_ok (with_type (mk_vec t) (EBound 0)) )) )) )) )\n\nlet null_mut =\n  let open Krml.Ast in\n  let t = TBound 0 in\n  fun lid ->\n    DFunction\n      ( None,\n        [ Private ],\n        0,\n        1,\n        TBuf (t, false),\n        lid,\n        [ Krml.Helpers.fresh_binder \"_\" TUnit ],\n        with_type (TBuf (t, false)) EBufNull )\n\n(* -------------------------------------------------------------------------- *)\n\nlet builtin_funcs =\n  [\n    sizeof;\n    alignof;\n    array_repeat;\n    array_eq;\n    array_eq_slice_mut;\n    array_eq_slice_shared;\n    slice_eq_shared;\n    slice_eq_mut;\n    slice_index_shared;\n    slice_index_mut;\n    slice_to_array;\n    slice_to_ref_array;\n    slice_to_ref_array2;\n    discriminant;\n    range_iterator_step_by;\n    range_step_by_iterator_next;\n    box_new;\n    empty_array;\n    replace;\n    bitand_pv_u8;\n    shr_pv_u8;\n    min_u32;\n    vec_alloc;\n    vec_overflows;\n    vec_failed;\n    layout;\n  ]\n  (* Declares the 128-bit operations *)\n  @ begin\n      Op128Map.to_seq op_128_cfgs |> List.of_seq |> List.map snd\n    end\n\nlet builtin_defined_funcs =\n  [\n    array_to_slice_func_shared;\n    array_to_slice_func_mut;\n    array_to_subslice_func_shared;\n    array_to_subslice_func_mut;\n    array_to_subslice_to_func_shared;\n    array_to_subslice_to_func_mut;\n    array_to_subslice_from_func_shared;\n    array_to_subslice_from_func_mut;\n    slice_subslice_func_shared;\n    slice_subslice_func_mut;\n    slice_subslice_to_func_shared;\n    slice_subslice_to_func_mut;\n    slice_subslice_from_func_shared;\n    slice_subslice_from_func_mut;\n  ]\n\nlet files =\n  [\n    Krml.Builtin.lowstar_ignore;\n    (let externals =\n       List.map\n         (fun { name; typ; cg_args; n_type_args; arg_names } ->\n           let typ = Krml.Helpers.fold_arrow cg_args typ in\n           let flags = [ Krml.Common.Private ] in\n           K.DExternal (None, flags, List.length cg_args, n_type_args, name, typ, arg_names))\n         builtin_funcs\n       @ builtin_defined_funcs\n       @ [ nonzero_def; static_assert; c_string_def ]\n     in\n     \"Eurydice\", externals);\n  ]\n\nlet is_a_builtin_func_name (name : K.lident) =\n  (* Potentially make the list of built-in funcs a Map to speed up if necessary. *)\n  List.exists (fun { name = n; _ } -> n = name) builtin_funcs\n"
  },
  {
    "path": "lib/Bundles.ml",
    "content": "(* A more modern version of the krml facility that matches on lids (instead of file names), and\n   relies on a YAML file for configuration (rather than the cryptic syntax). *)\n\nmodule L = Logging\nmodule K = Krml.Ast\nopen Krml.Ast\n\ntype pattern = Prefix of string list | Exact of string list | Lid of lident [@@deriving show]\ntype visibility = Api | Internal | Private [@@deriving show]\n\nlet string_of_pattern = function\n  | Exact p -> \"[ \" ^ String.concat \", \" p ^ \" ]\"\n  | Prefix p -> \"[ \" ^ String.concat \", \" p ^ \", '*' ]\"\n  | Lid name -> String.concat \"_\" (fst name @ [ snd name ])\n\ntype file = {\n  name : string;\n  target : string;\n  inline_static : bool;\n  library : bool;\n  definitions : (pattern * visibility) list;\n  monomorphizations_using : (pattern * visibility) list;\n  monomorphizations_of : (pattern * visibility) list;\n  monomorphizations_exact : (pattern * visibility) list;\n}\n\ntype config = file list\n\n(** Loading & parsing *)\n\nlet load_config (path : string) : Yaml.value =\n  (* TODO: library not found: Yaml_unix *)\n  let contents = Krml.Utils.file_get_contents path in\n  match Yaml.of_string contents with\n  | Error (`Msg s) -> Krml.Warn.fatal_error \"Issue reading configuration file: %s\" s\n  | Ok v -> v\n\nlet parsing_error f = Krml.Warn.fatal_error (\"Issue parsing configuration file: \" ^^ f)\n\nlet parse_pattern (v : Yaml.value) : pattern =\n  match v with\n  | `A vs ->\n      let rec parse acc = function\n        | `String \"*\" :: [] -> Prefix (List.rev acc)\n        | `String \"*\" :: _ -> parsing_error \"wildcards only allowed at the end\"\n        | `String s :: tl -> parse (s :: acc) tl\n        | _ :: _ -> parsing_error \"only strings in patterns\"\n        | [] -> Exact (List.rev acc)\n      in\n      parse [] vs\n  | _ -> parsing_error \"pattern not a list\"\n\nlet parse_exact v : pattern =\n  match parse_pattern v with\n  | Exact lid -> Lid (Krml.KList.split_at_last lid)\n  | _ -> parsing_error \"monomorphizations_exact does not take wildcards\"\n\nlet parse_file (v : Yaml.value) : file =\n  match v with\n  | `O ls ->\n      let count = ref 0 in\n      let lookup k =\n        try\n          let r = List.assoc k ls in\n          incr count;\n          Some r\n        with Not_found -> None\n      in\n      let lookup_ k ls =\n        try\n          let r = List.assoc k ls in\n          incr count;\n          Some r\n        with Not_found -> None\n      in\n      let name =\n        match lookup \"name\" with\n        | Some (`String name) -> name\n        | Some _ -> parsing_error \"name not a string\"\n        | None -> parsing_error \"missing name\"\n      in\n      let target =\n        match lookup \"target\" with\n        | Some (`String target) -> target\n        | Some _ -> parsing_error \"target not a string\"\n        | None -> \"\"\n      in\n      let inline_static =\n        match lookup \"inline_static\" with\n        | Some (`Bool inline_static) -> inline_static\n        | Some _ -> parsing_error \"inline_static not a bool\"\n        | None -> false\n      in\n      let library =\n        match lookup \"library\" with\n        | Some (`Bool library) -> library\n        | Some _ -> parsing_error \"library not a bool\"\n        | None -> false\n      in\n      let map_or f o k =\n        match lookup_ k o with\n        | None -> []\n        | Some (`A l) -> List.map f l\n        | Some _ -> failwith (k ^ \" is not a list\")\n      in\n      (* TODO: fix copy-pasting *)\n      let definitions, monomorphizations_of, monomorphizations_using, monomorphizations_exact =\n        (* Preserve order *)\n        let rec parse ls =\n          match ls with\n          | [] -> [], [], [], []\n          | (((\"api\" | \"internal\" | \"private\") as k), o) :: ls ->\n              incr count;\n              let vis =\n                match k with\n                | \"api\" -> Api\n                | \"internal\" -> Internal\n                | \"private\" -> Private\n                | _ -> assert false\n              in\n              let parse_pattern_vis p = parse_pattern p, vis in\n              let parse_exact_vis p = parse_exact p, vis in\n              let defs, m_of, m_using, m_exact = parse ls in\n              begin\n                match o with\n                | `A pats -> List.map parse_pattern_vis pats @ defs, m_of, m_using, m_exact\n                | `O o ->\n                    ( map_or parse_pattern_vis o \"patterns\" @ map_or parse_exact_vis o \"exact\" @ defs,\n                      map_or parse_pattern_vis o \"monomorphizations_of\" @ m_of,\n                      map_or parse_pattern_vis o \"monomorphizations_using\" @ m_using,\n                      map_or parse_exact_vis o \"monomorphizations_exact\" @ m_exact )\n                | _ -> failwith (k ^ \" neither a list nor object\")\n              end\n          | _ :: ls -> parse ls\n        in\n        parse ls\n      in\n      let include_ =\n        match lookup \"include_in_h\" with\n        | None -> []\n        | Some (`A include_) ->\n            List.map\n              (function\n                | `String s -> Krml.Options.HeaderOnly name, s\n                | _ -> parsing_error \"include_in_h must be a string\")\n              include_\n        | Some _ -> parsing_error \"include_in_h must be a list\"\n      in\n      let include_internal =\n        match lookup \"include_in_internal_h\" with\n        | None -> []\n        | Some (`A include_) ->\n            List.map\n              (function\n                | `String s -> Krml.Options.InternalOnly name, s\n                | _ -> parsing_error \"include_in_internal_h must be a string\")\n              include_\n        | Some _ -> parsing_error \"include_in_internal_h must be a list\"\n      in\n      let c_include_ =\n        match lookup \"include_in_c\" with\n        | None -> []\n        | Some (`A include_) ->\n            List.map\n              (function\n                | `String s -> Krml.Options.COnly name, s\n                | _ -> parsing_error \"include_in_c must be a string\")\n              include_\n        | Some _ -> parsing_error \"include_in_c must be a list\"\n      in\n      if !count < List.length ls then\n        parsing_error \"extraneous fields in file\";\n      Krml.Options.(\n        add_early_include := include_ @ c_include_ @ include_internal @ !add_early_include);\n      {\n        name;\n        definitions;\n        inline_static;\n        library;\n        monomorphizations_using;\n        monomorphizations_of;\n        monomorphizations_exact;\n        target;\n      }\n  | _ -> parsing_error \"file must be an object\"\n\nlet parse_config (v : Yaml.value) : config =\n  match v with\n  | `O entries ->\n      (match List.assoc_opt \"naming\" entries with\n      | None -> ()\n      | Some naming ->\n          let skip_prefix =\n            match naming with\n            | `O [ (\"skip_prefix\", `A prefixes) ] -> prefixes\n            | `O [ (\"skip_prefix\", _) ] -> parsing_error \"skip_prefix must be a list\"\n            | _ -> parsing_error \"naming must be an object with the following keys: skip_prefix\"\n          in\n          let skip_prefix =\n            List.map\n              (function\n                | `A m ->\n                    List.map\n                      (function\n                        | `String s -> s\n                        | _ -> parsing_error \"skip_prefix component not a list of strings\")\n                      m\n                | _ -> parsing_error \"entries under skip prefix must be a list of strings\")\n              skip_prefix\n          in\n          let skip_prefix = List.map (fun p -> Krml.Bundle.Module p) skip_prefix in\n          Krml.Options.(no_prefix := !no_prefix @ skip_prefix));\n      begin\n        match List.assoc_opt \"files\" entries with\n        | Some (`A files) -> List.map parse_file files\n        | _ -> parsing_error \"files is not a sequence\"\n      end\n  | _ -> parsing_error \"YAML file must be an object with key files\"\n\n(** Constructing bundles *)\n\nlet starts_with l prefix =\n  List.length prefix <= List.length l && fst (Krml.KList.split (List.length prefix) l) = prefix\n\n(* `lid` matches pattern `p` *)\nlet matches lid p =\n  match p with\n  | Exact m -> m = fst lid\n  | Prefix prefix -> starts_with (fst lid) prefix\n  | Lid lid' -> lid = lid'\n\nlet find_map desc f l =\n  List.find_map\n    (fun (arg, ret) ->\n      if f arg then\n        Some (arg, ret, desc)\n      else\n        None)\n    l\n\nlet mark_internal =\n  let add_if name flags =\n    let is_internal = List.mem Krml.Common.Internal flags in\n    if (not is_internal) && not (Krml.Inlining.always_live name) then\n      Krml.Common.Internal :: List.filter (( <> ) Krml.Common.Private) flags\n    else\n      List.filter (( <> ) Krml.Common.Private) flags\n  in\n  function\n  | DFunction (cc, flags, n_cgs, n, typ, name, binders, body) ->\n      DFunction (cc, add_if name flags, n_cgs, n, typ, name, binders, body)\n  | DGlobal (flags, name, n, typ, body) -> DGlobal (add_if name flags, name, n, typ, body)\n  | DType (lid, flags, n_cgs, n, def) -> DType (lid, add_if lid flags, n_cgs, n, def)\n  | DExternal (cc, flags, n_cg, n, lid, t, pp) ->\n      DExternal (cc, add_if lid flags, n_cg, n, lid, t, pp)\n\nlet adjust vis decl =\n  match vis with\n  | Api -> decl\n  | Private -> Krml.Bundles.mark_private decl\n  | Internal -> mark_internal decl\n\nlet record_inline_static lid = Krml.Options.(static_header := Lid lid :: !static_header)\n\nlet bundle (files : Krml.Ast.file list) (c : config) : files =\n  let bundled = Hashtbl.create 137 in\n  let bundle name decl =\n    if Hashtbl.mem bundled name then\n      Hashtbl.replace bundled name (decl :: Hashtbl.find bundled name)\n    else\n      Hashtbl.add bundled name [ decl ]\n  in\n  let record_library lid = Krml.Options.(library := Lid lid :: !library) in\n  let files =\n    List.map\n      (fun ((filename : string), (decls : Krml.Ast.decl list)) ->\n        ( filename,\n          List.filter_map\n            (fun decl ->\n              let lid = lid_of_decl decl in\n              let rec find config =\n                match config with\n                | [] ->\n                    Krml.(KPrint.bprintf \"%a doesn't go anywhere\\n\" PrintAst.Ops.plid lid);\n                    false\n                | { name; definitions; inline_static; library; _ } :: config -> (\n                    (* Krml.KPrint.bprintf \"for %s, definitions are :\\n\" name; *)\n                    (* List.iter (fun (p, vis) -> *)\n                    (*   Krml.KPrint.bprintf \"%s: %s\\n\" (show_visibility vis) (show_pattern p) *)\n                    (* ) definitions; *)\n                    match\n                      List.find_map\n                        (fun (pat, vis) ->\n                          if matches lid pat then\n                            Some vis\n                          else\n                            None)\n                        definitions\n                    with\n                    | None -> find config\n                    | Some vis ->\n                        (* Krml.(KPrint.bprintf \"%a goes into %s at vis %s\\n\" PrintAst.Ops.plid lid name (show_visibility vis)); *)\n                        (* if List.length vis_ > 1 then *)\n                        (*   Krml.(KPrint.bprintf \"vis_ was: %s\\n\" (String.concat \", \" (List.map show_visibility vis_))); *)\n                        let decl = adjust vis decl in\n                        bundle name decl;\n                        if inline_static then\n                          record_inline_static lid;\n                        if library then\n                          record_library lid;\n                        true)\n              in\n              if find c then\n                None\n              else\n                Some decl)\n            decls ))\n      files\n  in\n  let files =\n    List.filter\n      (fun (filename, decls) ->\n        (* Collision between the original crate name (e.g. libcrux_kyber) and the destination bundle\n           (e.g. libcrux_kyber). *)\n        if Hashtbl.mem bundled filename then begin\n          List.iter (bundle filename) decls;\n          false\n        end\n        else\n          true)\n      files\n  in\n  Hashtbl.fold\n    (fun filename decls acc -> (filename, List.rev decls) :: acc)\n    bundled\n    (List.filter (fun (_, decls) -> decls <> []) files)\n\nlet libraries (files : Krml.Ast.file list) : files =\n  List.map\n    (fun (f, decls) ->\n      ( f,\n        List.filter_map\n          (fun d ->\n            let lid = Krml.Ast.lid_of_decl d in\n            if List.exists (fun p -> Krml.(Bundle.pattern_matches_lid p lid)) !Krml.Options.library\n            then begin\n              Logging.log \"Libraries\" \"%a becomes abstract\\n\" Krml.PrintAst.Ops.plid lid;\n              match d with\n              | DType (_, _, _, _, Abbrev _) as t -> Some t\n              | DType _ -> None\n              | d -> Krml.Builtin.make_abstract_function_or_global d\n            end\n            else\n              Some d)\n          decls ))\n    files\n\nlet topological_sort decls =\n  let module T = struct\n    type color = White | Gray | Black\n  end in\n  let open T in\n  let graph = Hashtbl.create 41 in\n  let is_forward = function\n    | DType (_, _, _, _, Forward _) -> `Forward\n    | _ -> `Regular\n  in\n  List.iter\n    (fun decl ->\n      let deps =\n        begin\n          object (self)\n            inherit [_] reduce as super\n            method zero = []\n            method plus = ( @ )\n            method! visit_EQualified (under_ref, _) lid = [ lid, under_ref ]\n            method! visit_TQualified under_ref lid = [ lid, under_ref ]\n\n            method! visit_TApp under_ref lid ts =\n              [ lid, under_ref ] @ List.concat_map (self#visit_typ under_ref) ts\n\n            method! visit_TBuf _ t const = super#visit_TBuf true t const\n          end\n        end\n          #visit_decl\n          false decl\n      in\n      Hashtbl.add graph (lid_of_decl decl, is_forward decl) (ref White, deps, decl))\n    decls;\n\n  if L.has_logging \"dfs\" then\n    Hashtbl.iter\n      (fun (lid, forward) (_, deps, _) ->\n        let open Krml in\n        let open PrintAst.Ops in\n        KPrint.bprintf \"%a(%s) depends on: %s\\n\" plid lid\n          (match forward with\n          | `Forward -> \"forward\"\n          | `Regular -> \"regular\")\n          (String.concat \" ++ \"\n             (List.map (fun (lid, b) -> KPrint.bsprintf \"%a(%b)\" plid lid b) deps)))\n      graph;\n\n  let stack = ref [] in\n  let rec dfs (lid, under_ref) =\n    let has_forward_decl = Hashtbl.mem graph (lid, `Forward) in\n    if Hashtbl.mem graph (lid, `Regular) || has_forward_decl then\n      let key =\n        if has_forward_decl && under_ref then\n          lid, `Forward\n        else\n          lid, `Regular\n      in\n      let r, deps, decl = Hashtbl.find graph key in\n      match !r with\n      | Black -> ()\n      | Gray -> ()\n      | White ->\n          r := Gray;\n          List.iter dfs deps;\n          r := Black;\n          (* Krml.(PrintAst.Ops.(KPrint.bprintf \"%a %b\\n\" plid lid under_ref)); *)\n          stack := decl :: !stack\n  in\n  List.iter (fun decl -> dfs (lid_of_decl decl, false)) decls;\n  List.rev !stack\n\nmodule LidMap = Krml.Idents.LidMap\n\n(* Because the krml monomorphization procedure is not optimal, it is sometimes\n   the case the our topological sort places a forward declaration *after* the\n   corresponding struct. Filter those out! *)\nlet filter_forward files =\n  let seen = Hashtbl.create 41 in\n  List.map\n    (fun (file, decls) ->\n      ( file,\n        List.filter_map\n          (fun decl ->\n            match decl with\n            | DType (lid, _, _, _, Forward _) when Hashtbl.mem seen lid -> None\n            | _ ->\n                Hashtbl.add seen (lid_of_decl decl) ();\n                Some decl)\n          decls ))\n    files\n\n(* Second phase of bundling, post-monomorphization. This is Eurydice-specific,\n   as we oftentimes need to move definitions that have been /specialized/ using\n   e.g. a platform-specific trait into their own file.\n\n   Note that there may be multiple definitions per `lid`, because of forward structs. *)\nlet reassign_monomorphizations (files : Krml.Ast.file list) (config : config) =\n  let open Krml.Ast in\n  let open Krml.PrintAst.Ops in\n  (* Pure sanity check *)\n  let count_decls files =\n    List.fold_left\n      (fun acc (_, decls) ->\n        let add_incr lid map =\n          if LidMap.mem lid map then\n            LidMap.add lid (LidMap.find lid map + 1) map\n          else\n            LidMap.add lid 1 map\n        in\n        List.fold_left (fun acc decl -> add_incr (lid_of_decl decl) acc) acc decls)\n      LidMap.empty files\n  in\n  let c0 = count_decls files in\n  let target_of_lid = Hashtbl.create 41 in\n  let ( ||| ) o1 o2 =\n    match o1 with\n    | Some _ -> o1\n    | None -> o2\n  in\n  let reverse_type_map =\n    (* Maps t____u (an lid) to t<u> (a type application) *)\n    let map = Hashtbl.create 41 in\n    Hashtbl.iter\n      (fun node (_, monomorphized_lid) ->\n        assert (snd3 node <> [] || thd3 node <> []);\n        Hashtbl.add map monomorphized_lid (fold_tapp node))\n      Krml.MonomorphizationState.state;\n    map\n  in\n  let uses monomorphizations_using t =\n    begin\n      object (self)\n        inherit [_] reduce as super\n\n        method private visit_through_map lid =\n          Option.bind (Hashtbl.find_opt reverse_type_map lid) (self#visit_typ ())\n\n        method zero = None\n\n        method plus o1 o2 =\n          if o1 = None then\n            o2\n          else\n            o1\n\n        method! visit_TQualified _ lid' =\n          find_map \"monomorphizations_using\" (matches lid') monomorphizations_using\n          ||| self#visit_through_map lid'\n\n        method! visit_TApp _ lid' ts =\n          find_map \"monomorphizations_using\" (matches lid') monomorphizations_using\n          ||| self#visit_through_map lid' ||| super#visit_TApp () lid' ts\n      end\n    end\n      #visit_typ\n      () t\n  in\n  (* Review the function monomorphization state.\n\n     THOUGHTS: maybe this should just all be grouped as a single field? Do we really care about\n     catching `t<u>` but not `u<t>`? (i.e., distinguish monomorphizations *of* from\n     monomorphizations using?\n\n     Semantics of `monomorphizations_using`:\n       if `lid`, below, is the result of a (function) monomorphization that\n       *uses* (in its arguments, `cgs`, below) an `lid'` that matches a\n       `monomorphizations_using` clause of file `name`, then `lid` moves to\n       `name`.\n     Semantics of `monomorphizations_of`: unlike above, this matches a\n       generic lid (e.g., we want all the monomorphized instances of `Result` to\n       go into a single file)\n     Semantics of `monomorphizations_exact`: self-explanatory\n  *)\n  Hashtbl.iter\n    (fun (generic_lid, cgs, ts) monomorphized_lid ->\n      match\n        List.find_map\n          (fun {\n                 name;\n                 inline_static;\n                 monomorphizations_using;\n                 monomorphizations_of;\n                 monomorphizations_exact;\n                 _;\n               } ->\n            (* Monomorphization resulting in exactly this name *)\n            find_map \"monomorphizations_exact\" (matches monomorphized_lid) monomorphizations_exact\n            |||\n            (* Monomorphization using given trait name, amongst the arguments *)\n            List.find_map\n              (fun e ->\n                match e.node with\n                | EQualified lid' ->\n                    find_map \"monomorphizations_using\" (matches lid') monomorphizations_using\n                | _ -> None)\n              cgs\n            |||\n            (* Monomorphization using given type name *)\n            List.find_map (uses monomorphizations_using) ts\n            |||\n            (* Monomorphization of a given polymorphic name *)\n            find_map \"monomorphizations_of\" (matches generic_lid) monomorphizations_of\n            |> Option.map (fun vis -> name, inline_static, vis))\n          config\n      with\n      | Some name -> Hashtbl.add target_of_lid monomorphized_lid name\n      | None -> ())\n    Krml.MonomorphizationState.generated_lids;\n  (* Review the type monomorphization state. *)\n  Hashtbl.iter\n    (fun (generic_lid, ts, _) (_, monomorphized_lid) ->\n      (* Krml.KPrint.bprintf \"generic=%a, monomorphized=%a\\n\" plid generic_lid plid monomorphized_lid; *)\n      match\n        List.find_map\n          (fun {\n                 name;\n                 inline_static;\n                 monomorphizations_of;\n                 monomorphizations_using;\n                 monomorphizations_exact;\n                 _;\n               } ->\n            find_map \"monomorphizations_exact\" (matches monomorphized_lid) monomorphizations_exact\n            ||| List.find_map (uses monomorphizations_using) ts\n            ||| find_map \"monomorphizations_of\" (matches generic_lid) monomorphizations_of\n            |> Option.map (fun vis -> name, inline_static, vis))\n          config\n      with\n      | Some name -> Hashtbl.add target_of_lid monomorphized_lid name\n      | None -> ())\n    Krml.MonomorphizationState.state;\n  (* Debug *)\n  Hashtbl.iter\n    (fun lid (target, _inline_static, (pat, vis, desc)) ->\n      L.log \"Reassign\"\n        \"declaration %a goes into file %s (at visibility: %s) because it matched %s in a %s section\"\n        plid lid target (show_visibility vis) (string_of_pattern pat) desc)\n    target_of_lid;\n  (* Filter the files, plucking out those that move and registering them under\n     the right file name in `reassigned`. We maintain the invariant of one entry\n     per key in the table. *)\n  let reassigned = Hashtbl.create 41 in\n  let files =\n    List.map\n      (fun (f, decls) ->\n        ( f,\n          List.filter\n            (fun decl ->\n              let lid = lid_of_decl decl in\n              match Hashtbl.find_all target_of_lid lid with\n              | exception Not_found -> true\n              | [] -> true\n              | entries ->\n                  List.iter\n                    (fun (target, inline_static, (_, vis, _)) ->\n                      let decl = adjust vis decl in\n                      if inline_static then\n                        record_inline_static lid;\n                      if Hashtbl.mem reassigned target then\n                        Hashtbl.replace reassigned target (decl :: Hashtbl.find reassigned target)\n                      else\n                        Hashtbl.add reassigned target [ decl ])\n                    (List.rev entries);\n                  false)\n            decls ))\n      files\n  in\n  (* Extend each file with the definitions that are moving into it. *)\n  let files =\n    List.map\n      (fun (f, decls) ->\n        let reassigned =\n          if Hashtbl.mem reassigned f then (\n            let r = Hashtbl.find reassigned f in\n            Hashtbl.remove reassigned f;\n            r)\n          else\n            []\n        in\n        f, decls @ reassigned)\n      files\n  in\n\n  (* Deal with files that did not exist previously. *)\n  let files = files @ Hashtbl.fold (fun f reassigned acc -> (f, reassigned) :: acc) reassigned [] in\n\n  (* A quick topological sort to make sure type declarations come *before*\n     functions that use them. Note that this is incompatible with forward structs. *)\n  let files = List.map (fun (f, decls) -> f, topological_sort decls) files in\n  let c1 = count_decls files in\n  ignore\n    (LidMap.merge\n       (fun lid v1 v2 ->\n         match v1, v2 with\n         | None, None -> failwith \"impossible\"\n         | Some v1, None -> Krml.Warn.fatal_error \"lost %d declaration for %a\\n\" v1 plid lid\n         | None, Some v2 -> Krml.Warn.fatal_error \"gained %d declaration for %a\\n\" v2 plid lid\n         | Some v1, Some v2 ->\n             if v1 != v2 then\n               Krml.Warn.fatal_error \"mismatch on %a: %d != %d\\n\" plid lid v1 v2\n             else\n               None)\n       c0 c1);\n  let files = filter_forward files in\n  files\n"
  },
  {
    "path": "lib/Cleanup1.ml",
    "content": "open Krml.Ast\nopen Krml.DeBruijn\nmodule H = Krml.Helpers\nmodule AtomMap = Map.Make (Krml.Atom)\nmodule AtomSet = Set.Make (Krml.Atom)\n\nlet set_of_map_keys m = AtomSet.of_list (List.map fst (AtomMap.bindings m))\n\nlet count_atoms =\n  object\n    inherit [_] reduce\n    method private zero = AtomSet.empty\n    method private plus = AtomSet.union\n    method! visit_EOpen _ _ a = AtomSet.singleton a\n  end\n\ntype remove_env = (string * typ * node_meta list * meta list) AtomMap.t\n\nlet pmeta buf ({ meta; _ } : 'a with_type) =\n  List.iter\n    (function\n      | CommentBefore s | CommentAfter s ->\n          Buffer.add_string buf s;\n          Buffer.add_char buf '\\n')\n    meta\n\nlet mk typ meta node = { node; typ; meta }\nlet is_sequence = Krml.Simplify.is_sequence\n\nlet already_clean = function\n  | [ \"core\"; \"slice\"; _ ], \"swap\" -> true\n  | [ \"alloc\"; \"vec\"; _ ], \"try_with_capacity\" -> true\n  | _ -> false\n\nlet remove_assignments =\n  object (self)\n    inherit [_] map\n\n    method private peel_lets (to_close : remove_env) e =\n      match e.node with\n      | ELet (b, e1, e2) ->\n          (if not (e1.node = EAny || e1.node = EUnit) then\n             Krml.(Warn.fatal_error \"Initializer of let-binding is %a\" PrintAst.Ops.pexpr e1));\n          (* Krml.(KPrint.bprintf \"peeling %s\\n\" b.node.name); *)\n          let b, e2 = open_binder b e2 in\n          (* Krml.KPrint.bprintf \"peel: let-binding meta %a\\n\" pmeta b; *)\n          let to_close =\n            AtomMap.add b.node.atom (b.node.name, b.typ, b.meta, b.node.meta) to_close\n          in\n          self#peel_lets to_close e2\n      | _ ->\n          let e = Krml.Simplify.sequence_to_let#visit_expr_w () e in\n          (* Krml.(KPrint.bprintf \"after peeling:\\n%a\\n\\n\" PrintAst.Ops.ppexpr e); *)\n          self#visit_expr_w to_close e\n\n    method! visit_DFunction (to_close : remove_env) cc flags n_cgs n t name bs e =\n      (* Krml.(KPrint.bprintf \"visiting %a\\n\" PrintAst.Ops.plid name); *)\n      assert (AtomMap.is_empty to_close);\n      DFunction\n        ( cc,\n          flags,\n          n_cgs,\n          n,\n          t,\n          name,\n          bs,\n          if already_clean name then\n            e\n          else\n            self#peel_lets to_close e )\n\n    method! visit_DGlobal (to_close : remove_env) flags n t name e =\n      assert (AtomMap.is_empty to_close);\n      DGlobal (flags, n, t, name, self#peel_lets to_close e)\n\n    method! visit_ELet ((not_yet_closed : remove_env), t) b e1 e2 =\n      (* If [not_yet_closed] represents the set of bindings that have yet to be\n         closed (i.e. for which we have yet to insert a let-binding, as close as\n         possible to the first use-site), and [candidates] represents the atoms\n         that we know for sure must be closed right now, then [close_now_over]\n         inserts suitable let-bindings for the candidates that have not yet been\n         closed, then calls the continuation with the remaining subset of\n         not_yet_closed. *)\n      let close_now_over (not_yet_closed : remove_env) candidates mk_node =\n        let to_close_now = AtomSet.inter candidates (set_of_map_keys not_yet_closed) in\n        let bs = List.of_seq (AtomSet.to_seq to_close_now) in\n        let bs =\n          List.map\n            (fun atom ->\n              let name, typ, meta, binder_meta = AtomMap.find atom not_yet_closed in\n              ( {\n                  node = { atom; name; mut = true; mark = ref Krml.Mark.default; meta = binder_meta };\n                  typ;\n                  meta;\n                },\n                if typ = TUnit then\n                  Krml.Helpers.eunit\n                else\n                  Krml.Helpers.any ))\n            bs\n        in\n        (* For the subexpressions, we now need to insert declarations for those variables that we're\n           not handling now. *)\n        let not_yet_closed =\n          AtomMap.filter (fun a _ -> not (AtomSet.mem a to_close_now)) not_yet_closed\n        in\n        let node = mk_node not_yet_closed in\n        (* XXX why is the with_type necessary here?? *)\n        (Krml.Helpers.nest bs t (with_type t node)).node\n      in\n\n      let count e = count_atoms#visit_expr_w () e in\n\n      let ( ++ ) = AtomSet.union in\n\n      (* Called when hitting a node in terminal position: either fall back into\n         the general case if it's a let-node; special treatment if it's\n         control-flow (match, if, while); otherwise, just close everything now and\n         move on (wildcard case). *)\n      let rec recurse_or_close (not_yet_closed : remove_env) e0 =\n        let t = e0.typ in\n        match e0.node with\n        | ELet _ ->\n            (* let node: restart logic and jump back to match below *)\n            self#visit_expr_w not_yet_closed e0\n        | EIfThenElse (e, e', e'') ->\n            mk t e0.meta\n            @@ close_now_over not_yet_closed\n                 ((* We must now bind: *)\n                  count e\n                ++\n                (* whichever variables were in the condition *)\n                AtomSet.empty)\n                 (* unlike below, we are in terminal position, so we do not need to\n                    close immediately variables that appear in both branches -- we can simply declare them\n                    twice in each branch! is this a better code-gen choice? yes, absolutely -- owing to\n                    the structure of MIR, NOT doing this generates awful code *)\n                 (fun not_yet_closed ->\n                   EIfThenElse\n                     ( self#visit_expr_w not_yet_closed e,\n                       recurse_or_close not_yet_closed e',\n                       recurse_or_close not_yet_closed e'' ))\n        | EWhile (e, e') ->\n            mk t e0.meta\n            @@ close_now_over not_yet_closed (count e) (fun not_yet_closed ->\n                   EWhile (self#visit_expr_w not_yet_closed e, recurse_or_close not_yet_closed e'))\n        | ESwitch (e, branches) ->\n            mk t e0.meta\n            @@ close_now_over not_yet_closed\n                 ((* We must now bind: *)\n                  count e\n                ++\n                (* i.e., whichever variables were in the condition *)\n                AtomSet.empty)\n                 (* see above *)\n                 (fun not_yet_closed ->\n                   ESwitch\n                     ( self#visit_expr_w not_yet_closed e,\n                       List.map (fun (p, e) -> p, recurse_or_close not_yet_closed e) branches ))\n        | EMatch (c, e, branches) ->\n            mk t e0.meta\n            @@ close_now_over not_yet_closed\n                 ((* We must now bind: *)\n                  count e\n                ++\n                (* i.e., whichever variables were in the condition *)\n                AtomSet.empty)\n                 (* see above *)\n                 (fun not_yet_closed ->\n                   EMatch\n                     ( c,\n                       self#visit_expr_w not_yet_closed e,\n                       List.map\n                         (fun (bs, p, e) -> bs, p, recurse_or_close not_yet_closed e)\n                         branches ))\n        | _ ->\n            (* There are opportunities for finesse here, for instance, if we reach\n               an assignment in terminal position, *and* the variable has yet to\n               be closed, it means that the assignment is useless since no one\n               else will be using the variable after that. *)\n            mk t e0.meta\n            @@ close_now_over not_yet_closed (count e0) (fun not_yet_closed ->\n                   (* not_yet_closed should be empty at this stage *)\n                   (self#visit_expr_w not_yet_closed e0).node)\n      in\n\n      match e1.node with\n      | EAssign ({ node = EOpen (_, atom); _ }, e_rhs) when AtomMap.mem atom not_yet_closed ->\n          close_now_over not_yet_closed (count e_rhs) (fun not_yet_closed ->\n              (* Combined \"close now\" (above) + let-binding insertion in lieu of the assignment *)\n              assert (is_sequence b.node.meta);\n              let e2 = snd (open_binder b e2) in\n              let name, typ, meta, binder_meta = AtomMap.find atom not_yet_closed in\n              let b =\n                {\n                  node =\n                    { atom; name; mut = true; mark = ref Krml.Mark.default; meta = binder_meta };\n                  typ;\n                  meta = meta @ e1.meta;\n                }\n              in\n              let not_yet_closed = AtomMap.remove atom not_yet_closed in\n              (* Krml.(KPrint.bprintf \"rebuilt: %a\\n\" PrintAst.Ops.pexpr (with_type TUnit (ELet (b, e_rhs, e2)))); *)\n              let e2 = recurse_or_close not_yet_closed (close_binder b e2) in\n              ELet (b, e_rhs, e2))\n      | EIfThenElse (e, e', e'') ->\n          assert (is_sequence b.node.meta);\n          close_now_over not_yet_closed\n            ((* We must now bind: *)\n             count e\n            ++\n            (* whichever variables were in the condition *)\n            AtomSet.inter (count e') (count e'')\n            ++\n            (* variables that appear in both branches *)\n            AtomSet.inter (count e' ++ count e'') (count e2))\n            (* variables in either branch *and* used later *)\n            (fun not_yet_closed ->\n              ELet\n                ( b,\n                  mk e1.typ e1.meta\n                    (EIfThenElse\n                       ( self#visit_expr_w not_yet_closed e,\n                         recurse_or_close not_yet_closed e',\n                         recurse_or_close not_yet_closed e'' )),\n                  recurse_or_close not_yet_closed e2 ))\n      | EWhile (e, e') ->\n          assert (is_sequence b.node.meta);\n          close_now_over not_yet_closed\n            (* We must be here variables that are declared in the condition, and variables that\n               appear both in the loop body and its continuation. *)\n            (count e ++ AtomSet.inter (count e') (count e2))\n            (fun not_yet_closed ->\n              ELet\n                ( b,\n                  mk e1.typ e1.meta\n                    (EWhile (self#visit_expr_w not_yet_closed e, recurse_or_close not_yet_closed e')),\n                  recurse_or_close not_yet_closed e2 ))\n      | ESwitch (e, branches) ->\n          assert (is_sequence b.node.meta);\n          close_now_over not_yet_closed\n            ((* We must now bind: *)\n             count e\n            ++\n            (* i.e., whichever variables were in the condition *)\n            Krml.KList.reduce AtomSet.inter (List.map (fun (_p, e) -> count e) branches)\n            ++\n            (* i.e., variables that appear in all branches -- note that\n                  switches don't bind variables in their branches so it's simpler\n                  than the match below*)\n            AtomSet.inter\n              (Krml.KList.reduce ( ++ ) (List.map (fun (_, e) -> count e) branches))\n              (count e2))\n            (* i.e., variables in either one of the branches *and* used later *)\n            (fun not_yet_closed ->\n              ELet\n                ( b,\n                  mk e1.typ e1.meta\n                    (ESwitch\n                       ( self#visit_expr_w not_yet_closed e,\n                         List.map (fun (p, e) -> p, recurse_or_close not_yet_closed e) branches )),\n                  recurse_or_close not_yet_closed e2 ))\n      | EMatch (c, e, branches) ->\n          assert (is_sequence b.node.meta);\n          close_now_over not_yet_closed\n            ((* We must now bind: *)\n             count e\n            ++\n            (* i.e., whichever variables were in the condition *)\n            Krml.KList.reduce AtomSet.inter (List.map (fun (_bs, _p, e) -> count e) branches)\n            ++\n            (* i.e., variables that appear in all branches -- note that we\n                  don't open _bs meaning that we don't collect bound variables in this branch *)\n            AtomSet.inter\n              (Krml.KList.reduce ( ++ ) (List.map (fun (_, _, e) -> count e) branches))\n              (count e2))\n            (* i.e., variables in either one of the branches *and* used later *)\n            (fun not_yet_closed ->\n              ELet\n                ( b,\n                  mk e1.typ e1.meta\n                    (EMatch\n                       ( c,\n                         self#visit_expr_w not_yet_closed e,\n                         List.map\n                           (fun (bs, p, e) -> bs, p, recurse_or_close not_yet_closed e)\n                           branches )),\n                  recurse_or_close not_yet_closed e2 ))\n      | _ ->\n          (* The open variables in e1 for which we have not yet inserted a declaration need to be closed now *)\n          close_now_over not_yet_closed (count e1) (fun not_yet_closed ->\n              ELet (b, self#visit_expr_w not_yet_closed e1, recurse_or_close not_yet_closed e2))\n  end\n\nlet remove_terminal_returns =\n  object (self)\n    inherit [_] map\n\n    method! visit_DFunction env cc flags n_cgs n t name bs e =\n      DFunction\n        ( cc,\n          flags,\n          n_cgs,\n          n,\n          t,\n          name,\n          bs,\n          if already_clean name then\n            e\n          else\n            self#visit_expr_w env e )\n\n    method! visit_ELet (terminal, _) b e1 e2 =\n      (* let _ = x := e in\n         return x                 ~~~>      return e\n      *)\n      match e1.node, e2.node with\n      | EAssign ({ node = EBound i; _ }, e1), EReturn { node = EBound j; _ } when j = i + 1 ->\n          (* This early optimization is important to avoid superfluous variable\n             declarations for the return value of the function -- these\n             interfere with pattern-matches such as resugar_loops. See\n             test/for.rs *)\n          self#visit_EReturn (terminal, e2.typ) e1\n      | _ -> ELet (b, self#visit_expr_w false e1, self#visit_expr_w terminal e2)\n\n    method! visit_EWhile _ e1 e2 = EWhile (self#visit_expr_w false e1, self#visit_expr_w false e2)\n\n    method! visit_EFor _ b e1 e2 e3 e4 =\n      EFor\n        ( b,\n          self#visit_expr_w false e1,\n          self#visit_expr_w false e2,\n          self#visit_expr_w false e3,\n          self#visit_expr_w false e4 )\n\n    method! visit_EReturn (terminal, _) e =\n      if terminal then\n        (self#visit_expr_w terminal e).node\n      else\n        EReturn (self#visit_expr_w terminal e)\n\n    method! visit_ESequence (terminal, _) es =\n      let es, e = Krml.KList.split_at_last es in\n      ESequence (List.map (self#visit_expr_w false) es @ [ self#visit_expr_w terminal e ])\n\n    method! visit_EIfThenElse (terminal, _) e1 e2 e3 =\n      EIfThenElse\n        (self#visit_expr_w false e1, self#visit_expr_w terminal e2, self#visit_expr_w terminal e3)\n\n    method! visit_EMatch (terminal, _) f e branches =\n      EMatch\n        ( f,\n          self#visit_expr_w false e,\n          List.map (fun (b, p, e) -> b, p, self#visit_expr_w terminal e) branches )\n  end\n\nlet remove_terminal_continues =\n  object (self)\n    inherit [_] map\n\n    method! visit_DFunction env cc flags n_cgs n t name bs e =\n      DFunction\n        ( cc,\n          flags,\n          n_cgs,\n          n,\n          t,\n          name,\n          bs,\n          if already_clean name then\n            e\n          else\n            self#visit_expr_w env e )\n\n    method! visit_ELet (terminal, _) b e1 e2 =\n      ELet (b, self#visit_expr_w false e1, self#visit_expr_w terminal e2)\n\n    method! visit_EWhile _ e1 e2 = EWhile (self#visit_expr_w false e1, self#visit_expr_w true e2)\n\n    method! visit_EFor _ b e1 e2 e3 e4 =\n      EFor\n        ( b,\n          self#visit_expr_w false e1,\n          self#visit_expr_w false e2,\n          self#visit_expr_w false e3,\n          self#visit_expr_w true e4 )\n\n    method! visit_EContinue (terminal, t) =\n      if terminal then begin\n        assert (t = TUnit);\n        EUnit\n      end\n      else\n        EContinue\n\n    method! visit_ESequence (terminal, _) es =\n      let es, e = Krml.KList.split_at_last es in\n      ESequence (List.map (self#visit_expr_w false) es @ [ self#visit_expr_w terminal e ])\n\n    method! visit_EIfThenElse (terminal, _) e1 e2 e3 =\n      EIfThenElse\n        (self#visit_expr_w false e1, self#visit_expr_w terminal e2, self#visit_expr_w terminal e3)\n\n    method! visit_EMatch (terminal, _) f e branches =\n      EMatch\n        ( f,\n          self#visit_expr_w false e,\n          List.map (fun (b, p, e) -> b, p, self#visit_expr_w terminal e) branches )\n  end\n\nlet unsigned_overflow_is_ok_in_c =\n  object\n    inherit [_] map as super\n\n    method! visit_EApp env e es =\n      let is_u = function\n        | \"u8\" | \"u16\" | \"u32\" | \"u64\" | \"usize\" -> true\n        | _ -> false\n      in\n      let as_w = function\n        | \"u8\" -> K.UInt8\n        | \"u16\" -> UInt16\n        | \"u32\" -> UInt32\n        | \"u64\" -> UInt64\n        | \"usize\" -> SizeT\n        | _ -> failwith \"not an unsigned crate name\"\n      in\n      let as_t t = TInt (as_w t) in\n      match e.node with\n      | EQualified ([ \"core\"; \"num\"; t; _ ], \"wrapping_add\") when is_u t ->\n          EApp (Krml.Helpers.mk_op Add (as_t t), es)\n      | EQualified ([ \"core\"; \"num\"; t; _ ], \"wrapping_sub\") when is_u t ->\n          EApp (Krml.Helpers.mk_op Sub (as_t t), es)\n      | EQualified ([ \"core\"; \"num\"; t; _ ], \"wrapping_mul\") when is_u t ->\n          EApp (Krml.Helpers.mk_op Mult (as_t t), es)\n      | _ -> super#visit_EApp env e es\n  end\n\n(* PPrint.(Krml.Print.(print (Krml.PrintAst.print_files files ^^ hardline))); *)\n\nlet remove_slice_eq =\n  object (self)\n    inherit [_] map as super\n\n    method private do_it ~const eq t u s1 s2 =\n      assert (t = u);\n      let slice_eq =\n        if const then\n          Builtin.slice_eq_shared\n        else\n          Builtin.slice_eq_mut\n      in\n      match flatten_tapp t with\n      | lid, [ t ], [] when lid = Builtin.derefed_slice ->\n          let rec is_flat = function\n            | TArray (t, _) -> is_flat t\n            | TInt _ | TBool | TUnit -> true\n            | _ -> false\n          in\n          if not (is_flat t) then\n            failwith \"TODO: slice eq at non-flat types\";\n          with_type TBool (EApp (Builtin.expr_of_builtin_t slice_eq [ t ], [ s1; s2 ]))\n      | _ ->\n          let deref e = with_type (H.assert_tbuf e.typ) (EBufRead (e, H.zero_usize)) in\n          with_type TBool (EApp (List.hd eq, [ deref s1; deref s2 ]))\n\n    method! visit_expr _ e =\n      match e with\n      | [%cremepat {| core::cmp::impls::?impl::eq(#?eq..)<?t,?u>(?s1, ?s2) |}] -> begin\n          match impl with\n          | \"{core::cmp::PartialEq<&0 mut (B)> for &1 mut (A)}\" ->\n              self#do_it ~const:false eq t u s1 s2\n          | \"{core::cmp::PartialEq<&0 (B)> for &1 (A)}\" -> self#do_it ~const:true eq t u s1 s2\n          | _ -> failwith \"unknown eq impl in core::cmp::impls\"\n        end\n      | _ -> super#visit_expr ((), e.typ) e\n  end\n\nlet remove_units =\n  object (self)\n    inherit [_] map as super\n\n    (* Every local variable at type unit is suitably initialized *)\n    method! visit_ELet env b e1 e2 =\n      if b.typ = TUnit && e1.node = EAny then\n        ELet (b, Krml.Helpers.eunit, self#visit_expr_w () e2)\n      else\n        super#visit_ELet env b e1 e2\n\n    (* Assigning into a local variable of type unit is meaningless and the rhs can be used instead\n       -- no uninitialized variables issues, because of ELet above. *)\n    method! visit_EAssign env e1 e2 =\n      match e1.node with\n      | EBound _ when e1.typ = TUnit -> (self#visit_expr_w () e2).node\n      | _ -> super#visit_EAssign env e1 e2\n\n    (* Returning a local variable of type unit is equivalent to returning a unit *)\n    method! visit_EReturn env e =\n      match e.node with\n      | EBound _ when e.typ = TUnit -> EReturn Krml.Helpers.eunit\n      | _ -> super#visit_EReturn env e\n\n    method! visit_ESequence _env es =\n      let es = List.filter (fun x -> x.node <> EUnit) (List.map (self#visit_expr_w ()) es) in\n      match es with\n      | [] -> EUnit\n      | [ e ] -> e.node\n      | _ -> ESequence es\n  end\n\nlet cleanup files =\n  let files = remove_units#visit_files () files in\n  let files = remove_assignments#visit_files AtomMap.empty files in\n  let files = unsigned_overflow_is_ok_in_c#visit_files () files in\n  let files = remove_terminal_returns#visit_files true files in\n  let files = Krml.Simplify.optimize_lets files in\n  (* Krml.(PPrint.(Print.(print (PrintAst.print_files files ^^ hardline)))); *)\n  let files = remove_terminal_continues#visit_files false files in\n  let files = Krml.Simplify.let_to_sequence#visit_files () files in\n  let files = remove_slice_eq#visit_files () files in\n  files\n"
  },
  {
    "path": "lib/Cleanup2.ml",
    "content": "open Krml.Ast\nopen Krml.DeBruijn\nmodule H = Krml.Helpers\nmodule L = Logging\nopen Krml.PrintAst.Ops\n\n(* Target cleanups invoked from bin/main.ml *)\n\n(* A note on the various cleanup phases for arrays to preserve the semantics of Rust. Assume\n   `struct S { y: [u32; 4] }`.\n   ... pass by ref\n   1. remove_array_repeats: [e; N] becomes bufcreate e N, or bufcreateL, depending on some\n      heuristics -- see comments in this phase \n   2. remove_literals: let x = S { y: foo } --> let x; x.y := foo; x\n      where the assignment has an array type -- this is either because foo would decay in C and as\n      such cannot appear in the initializer; or because of foo if of a syntactic form that does not\n      suit itself to becoming an initializer (e.g. is an if-then-else).\n   3. remove_implicit_array_copies: handles x := e1 at array types, including nested array cases\n   ... hoist\n\n   Phase 2. performs a limited form of hoisting, There is an invariant that hoist cannot be more\n   aggressive than 2., otherwise, there will be array copy-assignments that won't be compiled.\n*)\n\n(* In the initial value of a variable, is this a suitable expression to initialize something that\n   has an array type (or a struct that may contain arrays)? *)\nlet rec is_suitable_array_initializer =\n  let rec subarrays_only_literals e =\n    (* Underneath an initializer list *)\n    match e.node, e.typ with\n    | _, TArray _ ->\n        (* In the case of nested arrays *)\n        begin\n          match e.node with\n          | EBufCreateL (_, es) ->\n              (* We only allow sub-initializer lists *)\n              List.for_all subarrays_only_literals es\n          | _ ->\n              (* Anything else (e.g. variable) is not copy-assignment in C *)\n              false\n        end\n    | EFlat es, _ -> List.for_all subarrays_only_literals (List.map snd es)\n    | _ ->\n        (* If this is not a nested array, then anything goes *)\n        true\n  in\n  function\n  | EAny | EBufCreate _ -> true\n  | EBufCreateL (_, es) -> List.for_all subarrays_only_literals es\n  | EFlat es -> List.for_all subarrays_only_literals (List.map snd es)\n  | _ -> false\n\n(* A general phase that removes assignments at array types. Note that all array repeat expressions\n   are desugared before this. We try to reduce all cases to the assignment case (e1 := e2). *)\nlet remove_implicit_array_copies =\n  object (self)\n    inherit [_] map as super\n\n    (* Desugar `lhs := rhs in e2`, because `rhs` has an array type and `not (is_suitable_initializer rhs)`. *)\n    method private remove_assign n lhs rhs e2 =\n      (* Krml.KPrint.bprintf \"remove_assign %a := %a\\n\" pexpr lhs pexpr rhs; *)\n      let is_array = function\n        | TArray _ -> true\n        | _ -> false\n      in\n\n      (* What are we trying to assign? *)\n      match rhs.node with\n      | EBufCreateL (Stack, es) ->\n          if List.for_all (( = ) (List.hd es)) es && not (is_array (List.hd es).typ) then\n            (* We assign a list of elements that are all identical -- optimize *)\n            let lift = Krml.DeBruijn.lift 1 in\n            ELet\n              ( H.sequence_binding (),\n                H.with_unit (EBufFill (lhs, List.hd es, Krml.Helpers.mk_uint32 (List.length es))),\n                lift e2 )\n          else begin\n            (* lhs := bufcreatel e1, e2, ... ~~> lhs[0] := e1, lhs[1] := e2, ...\n               we possibly recurse if the type of elements is an array *)\n            assert (List.length es = int_of_string (snd n));\n            let lift = Krml.DeBruijn.lift in\n            let rec nest lifting_index array_index es =\n              match es with\n              | [] -> lift lifting_index (self#visit_expr_w () e2)\n              | e :: es -> (\n                  let array_index_ =\n                    with_type H.usize (EConstant (SizeT, string_of_int array_index))\n                  in\n                  let lhs_i =\n                    with_type (H.assert_tbuf_or_tarray lhs.typ) (EBufRead (lhs, array_index_))\n                  in\n                  match e.typ with\n                  | TArray (_, n) ->\n                      with_type e2.typ\n                        (self#remove_assign n (lift lifting_index lhs_i) (lift lifting_index e)\n                           (nest lifting_index (array_index + 1) es))\n                  | _ ->\n                      with_type e2.typ\n                        (ELet\n                           ( H.sequence_binding (),\n                             H.with_unit (EAssign (lift lifting_index lhs_i, lift lifting_index e)),\n                             nest (lifting_index + 1) (array_index + 1) es )))\n            in\n            (nest 0 0 es).node\n          end\n      | _ ->\n          (* Something else, e.g. a variable -- generate a memcpy *)\n          let zero = Krml.(Helpers.zero Constant.SizeT) in\n          let rhs = self#visit_expr_w () rhs in\n          let lhs = self#visit_expr_w () lhs in\n          ELet\n            ( H.sequence_binding (),\n              H.with_unit (EBufBlit (rhs, zero, lhs, zero, PreCleanup.expr_of_constant n)),\n              lift 1 (self#visit_expr_w () e2) )\n\n    method! visit_ELet (((), _) as env) b e1 e2 =\n      match b.typ, e1.node with\n      (* INVALID INITIALIZATION: let b = e1 in e2 -- explode into assignments, recursively *)\n      | TArray (_, n), _ when not (is_suitable_array_initializer e1.node) ->\n          (* let b = <uninitialized> in *)\n          ELet\n            ( b,\n              H.any,\n              (* b := *)\n              with_type e2.typ\n                (self#remove_assign n (with_type b.typ (EBound 0)) (Krml.DeBruijn.lift 1 e1)\n                   (* e2 *)\n                   (self#visit_expr env e2)) )\n      (* COPY: let _ = lhs := rhs with lhs.typ == TArray _ ... *)\n      | _, EAssign (lhs, rhs) when H.is_array lhs.typ ->\n          let n =\n            match lhs.typ with\n            | TArray (_, n) -> n\n            | _ -> failwith \"impossible\"\n          in\n          (* Fixpoint here for multi-dimensional arrays. *)\n          self#remove_assign n lhs rhs (subst H.eunit 0 e2)\n      | _ -> super#visit_ELet env b e1 e2\n\n    method! visit_EAssign env lhs rhs =\n      (* COPY: lhs := rhs with lhs.typ == TArray _ ... *)\n      match lhs.typ with\n      | TArray (_, n) -> self#remove_assign n lhs rhs H.eunit\n      | _ -> super#visit_EAssign env lhs rhs\n  end\n\nlet remove_array_temporaries =\n  object (self)\n    inherit [_] map as _super\n\n    method! visit_ELet (((), _) as env) b e1 e2 =\n      (* let x: TArray (t, n) = any;\n         blit (src, 0, dst, 0, n); // same length\n         x\n         ~~>\n         src\n      *)\n      match snd !(b.node.mark), b.typ, e1.node, e2.node with\n      | ( AtMost 2,\n          TArray (_, l),\n          EAny,\n          ESequence\n            [\n              {\n                node =\n                  EBufBlit\n                    ( src,\n                      { node = EConstant (_, \"0\"); _ },\n                      { node = EBound 0; _ },\n                      { node = EConstant (_, \"0\"); _ },\n                      { node = EConstant l'; _ } );\n                _;\n              };\n              { node = EBound 0; _ };\n            ] )\n        when l = l' -> (subst H.eunit 0 src).node\n      | _ -> ELet (b, self#visit_expr env e1, self#visit_expr env e2)\n  end\n\n(* We remove array repeat expressions.\n\n   Such expressions might occur in any position; we rewrite everything into a\n   single form let x = [e; n] with a let-binding. (The later hoist phase is\n   going to do this anyhow, so we might as well do it now for simplicity.)\n\n   - If the array repeat is made up of zeroes, or array repeats made of zeroes,\n     then we generate (complete) initializer lists that the subsequent code-gen\n     in CStarToC will be able to emit as = { 0 } (note that this works because\n     we ensure such expressions are let-bound.) We could expand and generate\n     EBufCreateL nodes for *any* array repeat whose bounds are statically known,\n     but that's generally a bad idea.\n   - If the array repeat is of a /simple form/ (i.e., e is a scalar value), then\n     we use the BufCreate node, to be emitted later on (also in CStarToC) as a\n     zero-initializer, a memset, or a for-loop.\n   - Barring that, we use a for-loop and recurse.\n\n   This happens BEFORE remove_implicit_array_copies above. *)\nlet remove_array_repeats =\n  object (self)\n    inherit [_] map as super\n\n    method! visit_EApp env e es =\n      (* This is the case where the declaration is not in let-binding position. This happens with\n         e.g. `fn init() -> ... { [0; 32] }`. *)\n      match e.node, es with\n      | ETApp ({ node = EQualified lid; _ }, [ _ ], _, [ _ ]), [ _ ]\n        when lid = Builtin.array_repeat.name ->\n          (* Same logic as below: if we can do something smart (like, only zeroes), then we expand,\n             let the subsequent `hoist` phase lift this into a let-binding, and code-gen will optimize this into\n             { 0 }. If we can't do something smart, we let-bind, and fall back onto the general case. *)\n          begin\n            try (self#expand_repeat (fst env) (with_type (snd env) (EApp (e, es)))).node\n            with Not_found ->\n              (self#visit_expr env\n                 (with_type (snd env)\n                    (ELet\n                       ( H.fresh_binder \"repeat_expression\" (snd env),\n                         with_type (snd env) (EApp (e, es)),\n                         with_type (snd env) (EBound 0) ))))\n                .node\n          end\n      | _ -> super#visit_EApp env e es\n\n    method private assert_length len =\n      match len.node with\n      | EConstant (_, s) -> int_of_string s\n      | _ -> failwith \"impossible\"\n\n    method private is_arr_typ t =\n      match t with\n      | TQualified ([ s1 ], s2) -> s1 = \"Eurydice\" && String.sub s2 0 3 = \"arr\"\n      | _ -> false\n\n    (* This function recursively expands nested repeat expressions as initializer lists\n       (EBufCreateL) as long as the innermost initial value is a zero, otherwise, it throws\n       Not_found. For instance:\n       - [[0; 2]; 2] --> { {0, 0}, {0, 0} }.\n       - [[1; 2]; 2] --> error -- better code quality with a BufCreate expression which will give\n         rise to a for-loop initializer\n\n       We override this behavior when we're already underneath a visit_DGlobal -- here, we've already\n       committed to an initializer list (and Charon will suitably \"fold\" repeat expressions\n       automatically for us), so we might as well expand.\n       \n    *)\n    method private expand_repeat under_global e =\n      match e.node with\n      | EApp\n          ( { node = ETApp ({ node = EQualified lid; _ }, [ len ], _, [ _ ]); _ },\n            [ ({ node = EConstant (_, \"0\"); _ } as init) ] )\n        when lid = Builtin.array_repeat.name ->\n          (* [0; n] -> ok *)\n          with_type e.typ @@ EBufCreateL (Stack, List.init (self#assert_length len) (fun _ -> init))\n      | EApp\n          ( { node = ETApp ({ node = EQualified lid; _ }, [ len ], _, [ _ ]); _ },\n            [ ({ node = EConstant _; _ } as init) ] )\n        when lid = Builtin.array_repeat.name && under_global ->\n          (* [c; n] -> get translated when we are under DGlobal *)\n          with_type e.typ @@ EBufCreate (Stack, init, Krml.Helpers.mk_sizet (self#assert_length len))\n      | EApp ({ node = ETApp ({ node = EQualified lid; _ }, [ len ], _, [ _ ]); _ }, [ init ])\n        when lid = Builtin.array_repeat.name ->\n          (* [e; n] -> ok if e ok -- n is a constant here Rust has no VLAs *)\n          let init = self#expand_repeat under_global init in\n          with_type e.typ @@ EBufCreateL (Stack, List.init (self#assert_length len) (fun _ -> init))\n      | EFlat [ (lido, e1) ] when lido = Some \"data\" && self#is_arr_typ e.typ ->\n          (* { .data = e } -> ok if e ok *)\n          let e1 = self#expand_repeat under_global e1 in\n          with_type e.typ (EFlat [ lido, e1 ])\n      | EBufCreateL (l, es) when under_global ->\n          (* { e1, e2, ... en } -> get recursively expanded when are under DGlobal *)\n          with_type e.typ @@ EBufCreateL (l, List.map (self#expand_repeat true) es)\n      | _ ->\n          if under_global then\n            e\n          else\n            raise Not_found\n\n    method! visit_DGlobal _env flags name n t e1 = super#visit_DGlobal true flags name n t e1\n\n    method! visit_ELet ((under_global, _) as env) b e1 e2 =\n      match e1.node with\n      (* Nothing special here for EBufCreateL otherwise it breaks the invariant expected by\n         remove_implicit_array_copies *)\n      | EApp ({ node = ETApp ({ node = EQualified lid; _ }, [ len ], _, [ _ ]); _ }, [ init ])\n        when lid = Builtin.array_repeat.name -> begin\n          try\n            (* Case 1 (only zeroes). *)\n            let r = ELet (b, (self#expand_repeat under_global) e1, self#visit_expr env e2) in\n            r\n          with Not_found -> (\n            match init.node with\n            | EConstant _ ->\n                (* Case 2. *)\n                let e1 =\n                  with_type e1.typ\n                    (EBufCreate (Stack, init, Krml.Helpers.mk_sizet (self#assert_length len)))\n                in\n                ELet (b, e1, self#visit_expr env e2)\n            | _ ->\n                (* Case 3. *)\n\n                (* let b = [ init; len ] *)\n                let module H = Krml.Helpers in\n                let len = self#visit_expr env len in\n                let init = self#visit_expr env init in\n                (* let b; *)\n                ELet\n                  ( b,\n                    H.any,\n                    (* let _ = *)\n                    with_type e2.typ\n                      (ELet\n                         ( H.sequence_binding (),\n                           (* for *)\n                           H.with_unit\n                             (EFor\n                                ( Krml.Helpers.fresh_binder ~mut:true \"i\" H.usize,\n                                  H.zero_usize (* i = 0 *),\n                                  H.mk_lt_usize (Krml.DeBruijn.lift 2 len) (* i < len *),\n                                  H.mk_incr_usize (* i++ *),\n                                  let i = with_type H.usize (EBound 0) in\n                                  let b = with_type b.typ (EBound 1) in\n                                  let b_i =\n                                    with_type (H.assert_tbuf_or_tarray b.typ) (EBufRead (b, i))\n                                  in\n                                  (* b[i] := init *)\n                                  H.with_unit (EAssign (b_i, Krml.DeBruijn.lift 2 init)) )),\n                           (* e2 *)\n                           Krml.DeBruijn.lift 1 (self#visit_expr env e2) )) ))\n        end\n      | _ -> super#visit_ELet env b e1 e2\n  end\n\nlet remove_array_from_fn files =\n  let defs =\n    Krml.Helpers.build_map files (fun tbl d ->\n        match d with\n        | DFunction (_, _, _, _, _, name, _, body) -> Hashtbl.add tbl name body\n        | _ -> ())\n  in\n  begin\n    object\n      inherit [_] map as super\n\n      method! visit_DFunction _ cc flags n_cgs n t name bs e =\n        assert (n_cgs = 0 && n = 0);\n        Hashtbl.add defs name e;\n        super#visit_DFunction () cc flags n_cgs n t name bs e\n\n      method! visit_EApp env e es =\n        match e.node with\n        | ETApp\n            ( { node = EQualified ([ \"core\"; \"array\" ], \"from_fn\"); _ },\n              [ len ],\n              [ call_mut; _call_once ],\n              [ t_elements; _t_captured_state ] ) ->\n            L.log \"Cleanup2\" \"%a %a\" ptyp t_elements ptyp t_elements;\n            (* By translating array into struct, we return a struct of array for [from_fn] here *)\n            let state = Krml.KList.one es in\n            let t_struct, _ = Krml.Helpers.flatten_arrow e.typ in\n            let t_element, _ = Krml.Helpers.flatten_arrow call_mut.typ in\n            let t_array =\n              match len.node with\n              | EConstant c -> TArray (t_element, c)\n              | _ -> assert false\n            in\n            let x, dst_struct = H.mk_binding ~mut:true \"arr_struct\" t_struct in\n            let dst = with_type t_array (EField (dst_struct, \"data\")) in\n            let bindx = x, with_type t_struct EAny in\n            let t_dst = H.assert_tbuf_or_tarray t_array in\n            let for_assign =\n              let lift1 = Krml.DeBruijn.lift 1 in\n              with_type TUnit\n                (EFor\n                   ( Krml.Helpers.fresh_binder ~mut:true \"i\" H.usize,\n                     H.zero_usize (* i: size_t = 0 *),\n                     H.mk_lt_usize (Krml.DeBruijn.lift 1 len) (* i < len *),\n                     H.mk_incr_usize (* i++ *),\n                     let i = with_type H.usize (EBound 0) in\n                     Krml.Helpers.with_unit\n                       (EBufWrite\n                          ( lift1 dst,\n                            i,\n                            with_type t_dst\n                              (EApp\n                                 ( call_mut,\n                                   [\n                                     with_type (TBuf (state.typ, false)) (EAddrOf (lift1 state));\n                                     with_type (TInt SizeT) (EBound 0);\n                                   ] )) )) ))\n            in\n            (H.nest [ bindx ] t_struct (with_type t_struct (ESequence [ for_assign; dst_struct ])))\n              .node\n        | ETApp\n            ( { node = EQualified (\"core\" :: \"array\" :: _, \"map\"); _ },\n              [ len ],\n              [ call_mut; _call_once ],\n              ts ) ->\n            let t_src, t_dst =\n              match ts with\n              | [ t_src; t_state; t_dst ] ->\n                  assert (t_state = TUnit);\n                  L.log \"Cleanup2\" \"found array map from %a to %a\" ptyp t_src ptyp t_dst;\n                  t_src, t_dst\n              | _ ->\n                  failwith \"TODO: unknown map closure shape; is it an array outparam? (see above)\"\n            in\n            let e_src, e_state =\n              match es with\n              | [ e_src; e_state ] -> e_src, e_state\n              | _ -> failwith \"unknown shape of arguments to array map\"\n            in\n            let len_c =\n              match len.node with\n              | EConstant c -> c\n              | _ -> failwith \"unable to get the const length for array map\"\n            in\n            let lift1 = Krml.DeBruijn.lift 1 in\n            let e_state = with_type (TBuf (e_state.typ, false)) (EAddrOf (lift1 e_state)) in\n            let e_src = with_type (TArray (t_src, len_c)) (EField (e_src, \"data\")) in\n            let t_dst_str, _ = Krml.Helpers.flatten_arrow e.typ in\n            let t_dst_arr = TArray (t_dst, len_c) in\n            let x, dst_struct = H.mk_binding ~mut:true \"arr_mapped_str\" t_dst_str in\n            let e_dst = with_type t_dst_arr (EField (dst_struct, \"data\")) in\n            let bindx = x, with_type t_dst_str EAny in\n            let for_assign =\n              with_type TUnit\n                (EFor\n                   ( Krml.Helpers.fresh_binder ~mut:true \"i\" H.usize,\n                     H.zero_usize (* i = 0 *),\n                     H.mk_lt_usize (Krml.DeBruijn.lift 1 len) (* i < len *),\n                     H.mk_incr_usize (* i++ *),\n                     let i = with_type H.usize (EBound 0) in\n                     let e_src_i = with_type t_src (EBufRead (lift1 e_src, i)) in\n                     Krml.Helpers.with_unit\n                       (EBufWrite\n                          ( lift1 e_dst,\n                            i,\n                            with_type t_dst (EApp (call_mut, [ lift1 e_state; e_src_i ])) )) ))\n            in\n            (H.nest [ bindx ] t_dst_str\n               (with_type t_dst_str (ESequence [ for_assign; dst_struct ])))\n              .node\n        | _ -> super#visit_EApp env e es\n    end\n  end\n    #visit_files\n    () files\n\nlet remove_trivial_into =\n  object (self)\n    inherit [_] map as _super\n\n    method! visit_EApp env e es =\n      let e = self#visit_expr_w () e in\n      let es = List.map (self#visit_expr env) es in\n      match e.node, es with\n      | ( ETApp ({ node = EQualified ([ \"core\"; \"convert\"; _ ], \"into\"); _ }, [], _, [ t1; t2 ]),\n          [ e1 ] )\n        when t1 = t2 -> e1.node\n      | ( ETApp\n            ( { node = EQualified ([ \"core\"; \"convert\"; _ ], \"into\"); _ },\n              [],\n              _,\n              [ TInt _; (TInt _ as t2) ] ),\n          [ e1 ] ) -> ECast (e1, t2)\n      | _ -> EApp (e, es)\n  end\n\nlet remove_trivial_ite =\n  object (self)\n    inherit [_] map as super\n\n    method! visit_EIfThenElse (((), _) as env) e1 e2 e3 =\n      match e1.node with\n      | EApp\n          ( { node = EOp (Eq, _); _ },\n            [ { node = EConstant (w1, c1); _ }; { node = EConstant (w2, c2); _ } ] )\n        when w1 = w2 ->\n          if int_of_string c1 = int_of_string c2 then\n            (self#visit_expr env e2).node\n          else\n            (self#visit_expr env e3).node\n      | EBool true -> (self#visit_expr env e2).node\n      | EBool false -> (self#visit_expr env e3).node\n      | _ -> super#visit_EIfThenElse env e1 e2 e3\n\n    method! visit_ESwitch env scrut branches =\n      let const_eq (w1, s1) (w2, s2) = w1 = w2 && int_of_string s1 = int_of_string s2 in\n      let fits s (w' : K.width) =\n        let s = Z.of_string s in\n        match w' with\n        | UInt8 -> Z.leq s (Z.of_string \"0xff\")\n        | UInt16 -> Z.leq s (Z.of_string \"0xffff\")\n        | UInt32 -> Z.leq s (Z.of_string \"0xffffffff\")\n        | UInt64 -> Z.leq s (Z.of_string \"0xffffffffffffffff\")\n        | _ -> false (* conservative decision *)\n      in\n      let normalize = function\n        | ECast ({ node = EConstant (_, s); _ }, TInt w') when fits s w' -> EConstant (w', s)\n        | c -> c\n      in\n      match normalize scrut.node with\n      | EConstant c -> begin\n          match\n            List.find_opt\n              (function\n                | SConstant c', _ -> const_eq c c'\n                | _ -> false)\n              branches\n          with\n          | Some (_, b) -> (self#visit_expr env b).node\n          | None -> begin\n              match List.find_opt (fun (sv, _) -> sv = SWild) branches with\n              | Some (_, b) -> (self#visit_expr env b).node\n              | None ->\n                  assert (snd env = TUnit);\n                  EUnit\n            end\n        end\n      | _ -> super#visit_ESwitch env scrut branches\n  end\n\nlet contains_array t =\n  begin\n    object (_self)\n      inherit [_] reduce as _super\n      method zero = false\n      method plus = ( || )\n      method! visit_TBuf _ _ _ = false\n      method! visit_TArray _ _ _ = true\n      method! visit_TCgArray _ _ _ = true\n    end\n  end\n    #visit_expr_w\n    () t\n\nlet must_explode e =\n  (* Note that this visits the whole type (including the type of fields) *)\n  contains_array e && not (is_suitable_array_initializer e.node)\n\nlet remove_literals tbl =\n  object (_self)\n    inherit [_] map as super_map\n    inherit! Krml.Structs.remove_literals tbl as super_krml\n\n    method! visit_ELet env b e1 e2 =\n      if must_explode e1 then\n        super_krml#visit_ELet env b e1 e2\n      else\n        super_map#visit_ELet env b e1 e2\n\n    method! visit_EFlat (((), t) as env) fields =\n      if must_explode (with_type t (EFlat fields)) then\n        super_krml#visit_EFlat env fields\n      else\n        super_map#visit_EFlat env fields\n\n    method! visit_DGlobal _env flags name n t body =\n      (* No point: can't have let-bindings in globals *)\n      DGlobal (flags, name, n, t, body)\n  end\n\nlet remove_literals files =\n  (remove_literals (Krml.Structs.build_remove_literals_map files))#visit_files () files\n\nlet build_macros (macros : Krml.Idents.LidSet.t ref) =\n  object (_self)\n    inherit [_] map as super\n\n    method! visit_DGlobal env flags name n t body =\n      (if List.mem Krml.Common.Macro flags then\n         macros := Krml.Idents.LidSet.(union !macros (singleton name)));\n      super#visit_DGlobal env flags name n t body\n  end\n\nlet build_macros files =\n  let map = ref Krml.Idents.LidSet.empty in\n  let files = (build_macros map)#visit_files () files in\n  files, !map\n\nlet rec ends_with pred e =\n  match e.node with\n  | EIfThenElse (_, e1, e2) -> ends_with pred e1 && ends_with pred e2\n  | EMatch (_, _, es) -> List.for_all (fun (_, _, e) -> ends_with pred e) es\n  | ELet (_, _, e) -> ends_with pred e\n  | ESequence es -> ends_with pred (Krml.KList.last es)\n  | _ -> pred e\n\nlet ends_with_continue =\n  ends_with (fun n ->\n      match n.node with\n      | EContinue -> true\n      | _ -> false)\n\nlet ends_with_return =\n  ends_with (fun n ->\n      match n.node with\n      | EReturn _ -> true\n      | _ -> false)\n\nlet resugar_loops =\n  object(self)\n  inherit [_] map as super\n\n  method! visit_expr ((), _ as env) e =\n    let open Krml.Helpers in\n    let step_by = match e with\n      (* Non-terminal position (step-by for-loop) *)\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter<\n            core::iter::adapters::step_by::StepBy<core::ops::range::Range<?..>>,\n            ?..\n          >(core::iter::range::?::step_by<?..>(\n            { start: ?e_start, end: ?e_end },\n            ?e_increment\n          ));\n        while true {\n          let x = core::iter::adapters::step_by::?::next<?, ?t1>(&iter);\n          match x {\n            None -> break,\n            Some ? -> ?e_body\n          }\n        };\n        ?rest..\n      |}] -> \n        let e_some_i = with_type (Builtin.mk_option t1) (ECons (\"Some\", [with_type t1 (EBound 0)])) in\n        let e_body = Krml.DeBruijn.subst e_some_i 0 e_body in\n        Some (t1, e_start, e_end, e_increment, [e_body], rest)\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter<\n            core::iter::adapters::step_by::StepBy<core::ops::range::Range<?..>>,\n            ?..\n          >(core::iter::range::?::step_by<?..>(\n            { start: ?e_start, end: ?e_end },\n            ?e_increment\n          ));\n        while true {\n          let x = core::iter::adapters::step_by::?::next<?, ?t1>(&iter);\n          match x {\n            None -> break,\n            Some ? -> ?e_body\n          };\n          ?loop_rest..\n        };\n        ?rest..\n      |}] -> \n        let e_some_i = with_type (Builtin.mk_option t1) (ECons (\"Some\", [with_type t1 (EBound 0)])) in\n        let e_body = List.map (Krml.DeBruijn.subst e_some_i 0) (e_body :: loop_rest) in\n        Some (t1, e_start, e_end, e_increment, e_body, rest)\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter<\n            core::iter::adapters::step_by::StepBy<core::ops::range::Range<?..>>,\n            ?..\n          >(core::iter::range::?::step_by<?..>(\n            { start: ?e_start, end: ?e_end },\n            ?e_increment\n          ));\n        while true {\n          match (core::iter::adapters::step_by::?::next<?, ?t1>(&iter)) {\n            None -> break,\n            Some ? -> ?e_body\n          }\n        };\n        ?rest..\n      |}] -> Some (t1, e_start, e_end, e_increment, [e_body], rest)\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter<\n            core::iter::adapters::step_by::StepBy<core::ops::range::Range<?..>>,\n            ?..\n          >(core::iter::range::?::step_by<?..>(\n            { start: ?e_start, end: ?e_end },\n            ?e_increment\n          ));\n        while true {\n          match (core::iter::adapters::step_by::?::next<?, ?t1>(&iter)) {\n            None -> break,\n            Some ? -> ?e_body\n          };\n          ?loop_rest..\n        };\n        ?rest..\n      |}] -> Some (t1, e_start, e_end, e_increment, e_body :: loop_rest, rest)\n\n      (* Terminal position (step-by for-loop) *)\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter<\n            core::iter::adapters::step_by::StepBy<core::ops::range::Range<?..>>,\n            ?..\n          >(core::iter::range::?::step_by<?..>(\n            { start: ?e_start, end: ?e_end },\n            ?e_increment\n          ));\n        while true {\n          let x = core::iter::adapters::step_by::?::next<?, ?t1>(&iter);\n          match x {\n            None -> break,\n            Some ? -> ?e_body\n          }\n        }\n      |}] ->\n        let e_some_i = with_type (Builtin.mk_option t1) (ECons (\"Some\", [with_type t1 (EBound 0)])) in\n        let e_body = Krml.DeBruijn.subst e_some_i 0 e_body in\n        Some (t1, e_start, e_end, e_increment, [e_body], [])\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter<\n            core::iter::adapters::step_by::StepBy<core::ops::range::Range<?..>>,\n            ?..\n          >(core::iter::range::?::step_by<?..>(\n            { start: ?e_start, end: ?e_end },\n            ?e_increment\n          ));\n        while true {\n          let x = core::iter::adapters::step_by::?::next<?, ?t1>(&iter);\n          match x {\n            None -> break,\n            Some ? -> ?e_body\n          };\n          ?loop_rest..\n        }\n      |}] ->\n        let e_some_i = with_type (Builtin.mk_option t1) (ECons (\"Some\", [with_type t1 (EBound 0)])) in\n        let e_body = List.map (Krml.DeBruijn.subst e_some_i 0) (e_body :: loop_rest) in\n        Some (t1, e_start, e_end, e_increment, e_body, [])\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter<\n            core::iter::adapters::step_by::StepBy<core::ops::range::Range<?..>>,\n            ?..\n          >(core::iter::range::?::step_by<?..>(\n            { start: ?e_start, end: ?e_end },\n            ?e_increment\n          ));\n        while true {\n          match (core::iter::adapters::step_by::?::next<?, ?t1>(&iter)) {\n            None -> break,\n            Some ? -> ?e_body\n          }\n        }\n      |}] -> Some (t1, e_start, e_end, e_increment, [e_body], [])\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter<\n            core::iter::adapters::step_by::StepBy<core::ops::range::Range<?..>>,\n            ?..\n          >(core::iter::range::?::step_by<?..>(\n            { start: ?e_start, end: ?e_end },\n            ?e_increment\n          ));\n        while true {\n          match (core::iter::adapters::step_by::?::next<?, ?t1>(&iter)) {\n            None -> break,\n            Some ? -> ?e_body\n          };\n          ?loop_rest..\n        }\n      |}] -> Some (t1, e_start, e_end, e_increment, e_body :: loop_rest, [])\n\n      | _ -> None\n    in\n\n    let range_iter = match e with\n      (* Terminal position (regular range for-loop) *)\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter\n            <core::ops::range::Range<?..>, ?..>\n            ({ start: ?e_start, end: ?e_end });\n        while true {\n          let x = core::iter::range::?::next<?t1>(&iter);\n          match x {\n            None -> break,\n            Some ? -> ?e_body\n          }\n        }\n      |}] ->\n        let e_some_i = with_type (Builtin.mk_option t1) (ECons (\"Some\", [with_type t1 (EBound 0)])) in\n        let e_body = Krml.DeBruijn.subst e_some_i 0 e_body in\n        Some (t1, e_start, e_end, [e_body], [])\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter\n            <core::ops::range::Range<?..>, ?..>\n            ({ start: ?e_start, end: ?e_end });\n        while true {\n          let x = core::iter::range::?::next<?t1>(&iter);\n          match x {\n            None -> break,\n            Some ? -> ?e_body\n          };\n          ?loop_rest..\n        }\n      |}] ->\n        let e_some_i = with_type (Builtin.mk_option t1) (ECons (\"Some\", [with_type t1 (EBound 0)])) in\n        let e_body = List.map (Krml.DeBruijn.subst e_some_i 0) (e_body :: loop_rest) in\n        Some (t1, e_start, e_end, e_body, [])\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter\n            <core::ops::range::Range<?..>, ?..>\n            ({ start: ?e_start, end: ?e_end });\n        while true {\n          match (core::iter::range::?::next<?t1>(&iter)) {\n            None -> break,\n            Some ? -> ?e_body\n          }\n        }\n      |}] -> Some (t1, e_start, e_end, [e_body], [])\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter\n            <core::ops::range::Range<?..>, ?..>\n            ({ start: ?e_start, end: ?e_end });\n        while true {\n          match (core::iter::range::?::next<?t1>(&iter)) {\n            None -> break,\n            Some ? -> ?e_body\n          };\n          ?loop_rest..\n        }\n      |}] -> Some (t1, e_start, e_end, e_body :: loop_rest, [])\n\n      (* Non-terminal position (regular range for-loop) *)\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter\n            <core::ops::range::Range<?>, ?..>\n            ({ start: ?e_start, end: ?e_end });\n        while true {\n          let x = core::iter::range::?::next<?t1>(&iter);\n          match x {\n            None -> break,\n            Some ? -> ?e_body\n          }\n        };\n        ?rest..\n      |}] ->\n        let e_some_i = with_type (Builtin.mk_option t1) (ECons (\"Some\", [with_type t1 (EBound 0)])) in\n        let e_body = Krml.DeBruijn.subst e_some_i 0 e_body in\n        Some (t1, e_start, e_end, [e_body], rest)\n\n      (* Non-terminal position (regular range for-loop) *)\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter\n            <core::ops::range::Range<?>, ?..>\n            ({ start: ?e_start, end: ?e_end });\n        while true {\n          let x = core::iter::range::?::next<?t1>(&iter);\n          match x {\n            None -> break,\n            Some ? -> ?e_body\n          };\n          ?loop_rest..\n        };\n        ?rest..\n      |}] ->\n        let e_some_i = with_type (Builtin.mk_option t1) (ECons (\"Some\", [with_type t1 (EBound 0)])) in\n        let e_body = List.map (Krml.DeBruijn.subst e_some_i 0) (e_body :: loop_rest) in\n        Some (t1, e_start, e_end, e_body, rest)\n\n      (* Special variant that appears in external crates -- TODO: do we need variants of all other\n         patterns? *)\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter\n            <core::ops::range::Range<?>, ?..>\n            ({ start: ?e_start, end: ?e_end });\n        while true {\n          let x = core::iter::range::?::next<?t1>(&iter);\n          match x {\n            None -> ?e2,\n            Some ? -> ?e_body\n          };\n          abort\n        }\n      |}] when ends_with_return e2 && ends_with_continue e_body\n      (* && x does not appear in e2 *) ->\n        let e_some_i = with_type (Builtin.mk_option t1) (ECons (\"Some\", [with_type t1 (EBound 0)])) in\n        let e_body = Krml.DeBruijn.subst e_some_i 0 e_body in\n        Some (t1, e_start, e_end, [e_body], [])\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter\n            <core::ops::range::Range<?>, ?..>\n            ({ start: ?e_start, end: ?e_end });\n        while true {\n          match (core::iter::range::?::next<?t1>(&iter)) {\n            None -> break,\n            Some ? -> ?e_body\n          }\n        };\n        ?rest..\n      |}] -> Some (t1, e_start, e_end, [e_body], rest)\n\n      | [%cremepat {|\n        let iter =\n          core::iter::traits::collect::?::into_iter\n            <core::ops::range::Range<?>, ?..>\n            ({ start: ?e_start, end: ?e_end });\n        while true {\n          match (core::iter::range::?::next<?t1>(&iter)) {\n            None -> break,\n            Some ? -> ?e_body\n          };\n          ?loop_rest..\n        };\n        ?rest..\n      |}] -> Some (t1, e_start, e_end, e_body :: loop_rest, rest)\n\n      | _ -> None\n    in\n\n    match step_by with\n    | Some (t1, e_start, e_end, e_increment, e_body, rest) -> \n      let w = match t1 with TInt w -> w | _ -> assert false in\n      with_type e.typ @@\n        ESequence (\n          with_type TUnit (EFor (\n            fresh_binder ~mut:true \"i\" t1,\n            e_start,\n            mk_lt w (Krml.DeBruijn.lift 1 e_end),\n            (* XXX seems like the increment is always size_t here ?! *)\n            mk_incr_e w (with_type t1 (ECast (e_increment, t1))),\n            with_type TUnit (ESequence (\n              List.map (self#visit_expr env) e_body\n            ))\n          )) :: List.map (fun e -> self#visit_expr env (Krml.DeBruijn.subst eunit 0 e)) rest\n      )\n    | None -> begin match range_iter with\n      | Some (t1, e_start, e_end, e_body, rest) -> \n        let w = match t1 with TInt w -> w | _ -> assert false in\n        with_type e.typ @@ ESequence (\n          with_type TUnit (EFor (\n            fresh_binder ~mut:true \"i\" t1,\n            e_start,\n            mk_lt w (Krml.DeBruijn.lift 1 e_end),\n            mk_incr w,\n            with_type TUnit (ESequence (\n              List.map (self#visit_expr env) e_body\n            ))\n          )) :: List.map (fun e -> self#visit_expr env (Krml.DeBruijn.subst eunit 0 e)) rest\n        )\n      | None -> super#visit_expr env e\n    end\n\nend\n[@ocamlformat \"disable\"]\n\nlet improve_names files =\n  let renamed = Hashtbl.create 41 in\n  let allocated = Hashtbl.create 41 in\n  (object (_self)\n     inherit [_] iter\n\n     method! visit_DFunction _ _ _ _ _ _ ((m, n) as lid) _ _ =\n       let trait_impl, m = List.partition (fun s -> s.[0] = '{') m in\n       match trait_impl with\n       | [ trait_impl ] ->\n           let hash = Hashtbl.hash trait_impl in\n           let n = Printf.sprintf \"%s_%02x\" n (hash land 0xFF) in\n           Krml.Monomorphization.maybe_debug_hash hash\n             (lazy PPrint.(string \"trait impl:\" ^/^ string trait_impl));\n           let n = Krml.Idents.mk_fresh n (fun n -> Hashtbl.mem allocated (m, n)) in\n           Hashtbl.add renamed lid ((m, n), trait_impl);\n           Hashtbl.add allocated (m, n) ()\n       | _ -> ()\n  end)\n    #visit_files\n    () files;\n  (* Hashtbl.iter (fun k (v, _) -> *)\n  (*   Krml.KPrint.bprintf \"%a --> %a\\n\" plid k plid v *)\n  (* ) renamed; *)\n  (* TODO: are there other global maps like this whose lids need to be\n     updated??? *)\n  Krml.Options.static_header :=\n    List.map\n      (function\n        | Krml.Bundle.Lid lid when Hashtbl.mem renamed lid ->\n            Krml.Bundle.Lid (fst (Hashtbl.find renamed lid))\n        | x -> x)\n      !Krml.Options.static_header;\n  (object (self)\n     inherit [_] map\n\n     method! visit_DFunction env cc flags n_cgs n t lid bs e =\n       match Hashtbl.find_opt renamed lid with\n       | Some (lid, trait_impl) ->\n           let comment = Krml.KPrint.bsprintf \"This function found in impl %s\" trait_impl in\n           DFunction (cc, flags @ [ Comment comment ], n_cgs, n, t, lid, bs, self#visit_expr_w env e)\n       | None -> DFunction (cc, flags, n_cgs, n, t, lid, bs, self#visit_expr_w env e)\n\n     method! visit_EQualified _ lid =\n       EQualified\n         (match Hashtbl.find_opt renamed lid with\n         | Some (lid, _) -> lid\n         | None -> lid)\n  end)\n    #visit_files\n    () files\n\nlet recognize_asserts =\n  object (_self)\n    inherit [_] map as super\n\n    method! visit_EIfThenElse (((), _) as env) e1 e2 e3 =\n      match e1.typ, e2.node, e3.node with\n      | TBool, EUnit, EAbort (_, msg) ->\n          (* if e1 then () else abort msg -->  static_assert(e1, msg) *)\n          EApp\n            ( Builtin.static_assert_ref,\n              [ e1; with_type Krml.Checker.c_string (EString (Option.value ~default:\"\" msg)) ] )\n      | TBool, EAbort (_, msg), EUnit ->\n          (* if not (e1) then abort msg else ()  -->  static_assert(e1, msg) *)\n          EApp\n            ( Builtin.static_assert_ref,\n              [\n                Krml.Helpers.mk_not e1;\n                with_type Krml.Checker.c_string (EString (Option.value ~default:\"\" msg));\n              ] )\n      | _ -> super#visit_EIfThenElse env e1 e2 e3\n  end\n\n(* Reconstructing for-loops from while nodes introduced by c_for!. *)\n\nclass iter_counting =\n  object\n    (* The environment [i] has type [int]. *)\n    inherit [_] iter\n\n    (* The environment [i] keeps track of how many binders have been\n       entered. It is incremented at each binder. *)\n    method! extend i (_ : binder) = i + 1\n  end\n\n(* De Bruijn index i is found in expression e *)\nlet found i e =\n  let exception Found in\n  let find =\n    object\n      inherit iter_counting\n\n      method! visit_EBound (i, _) j =\n        if i = j then\n          raise Found\n    end\n  in\n  try\n    find#visit_expr_w i e;\n    false\n  with Found -> true\n\nlet smallest =\n  object\n    inherit [_] reduce\n    method zero = max_int\n    method plus x y = min x y\n    method visit_EBound _ i = i\n  end\n\nlet rec find_terminal_incr i e =\n  if e.typ <> TUnit && e.typ <> TAny then\n    Krml.Warn.failwith \"e_then has type: %a\\n\" ptyp e.typ;\n  let ( let* ) = Option.bind in\n  let hoist e = Krml.DeBruijn.subst_n e (List.init i (fun _ -> Krml.Helpers.eunit)) in\n  match e.node with\n  | ELet (b, e1, e2) ->\n      let* e2, e_incr = find_terminal_incr (i + 1) e2 in\n      Some ({ e with node = ELet (b, e1, e2) }, e_incr)\n  | ESequence es ->\n      let es, e_incr = Krml.KList.split_at_last es in\n      let nearest = smallest#visit_expr_w () e_incr in\n      if nearest < i then\n        None\n      else\n        Some ({ e with node = ESequence es }, hoist e_incr)\n  | _ ->\n      let nearest = smallest#visit_expr_w () e in\n      if nearest < i then\n        None\n      else\n        Some (Krml.Helpers.eunit, hoist e)\n\nlet reconstruct_for_loops =\n  let no_control_flow (e : expr) =\n    match e.node with\n    | EWhile _ | EFor _ | ELet _ | EFun _ | EIfThenElse _ | ESequence _ | EMatch _ | ESwitch _ ->\n        false\n    | _ -> true\n  in\n\n  object (self)\n    inherit [_] map as super\n\n    method! visit_ELet (((), _) as env) b e1 e2 =\n      match e1.node, e1.typ, e2.node with\n      (* t x = e1; while (true) { if (e_cond) { ...;  e_incr } else { break; } *)\n      | ( _,\n          _,\n          EWhile\n            ( { node = EBool true; _ },\n              { node = EIfThenElse (e_cond, e_then, { node = EBreak; _ }); _ } ) ) -> begin\n          match find_terminal_incr 0 e_then with\n          | Some (e_then, e_incr) when no_control_flow e_incr ->\n              let e_then = self#visit_expr env e_then in\n              EFor (b, e1, e_cond, e_incr, e_then)\n          | _ -> super#visit_ELet env b e1 e2\n        end\n      (* let t x = e1 in\n         let _ = while (true) { if (e_cond) { e_then; e_incr } else { break; } in\n         e2\n         ~~~>\n         let _ = for (t x = e1; e_cond; e_incr) { e_then } in\n         e2 *)\n      | ( _,\n          _,\n          ELet\n            ( _,\n              {\n                node =\n                  EWhile\n                    ( { node = EBool true; _ },\n                      { node = EIfThenElse (e_cond, e_then, { node = EBreak; _ }); _ } );\n                _;\n              },\n              e2' ) )\n        when not (found 1 e2') -> begin\n          match find_terminal_incr 0 e_then with\n          | Some (e_then, e_incr) when no_control_flow e_incr ->\n              let e_then = self#visit_expr env e_then in\n              let e2 = self#visit_expr env e2' in\n              let shift1 = Krml.(DeBruijn.subst Helpers.eunit 0) in\n              ELet\n                ( Krml.Helpers.sequence_binding (),\n                  with_type TUnit (EFor (b, e1, e_cond, e_incr, e_then)),\n                  shift1 e2 )\n          | _ -> super#visit_ELet env b e1 e2\n        end\n      | _ -> super#visit_ELet env b e1 e2\n\n    method! visit_EWhile env e1 e2 =\n      (* while (true) { if (e_cond) { e_then } else { break } } ~~>\n         while (e_cond) { e_then } *)\n      match e1.node, e2.node with\n      | EBool true, EIfThenElse (e_cond, e_then, { node = EBreak; _ }) ->\n          EWhile (e_cond, self#visit_expr env e_then)\n      | _ -> super#visit_EWhile env e1 e2\n\n    (*     method! visit_DFunction _ cc flags n_cgs n t name bs e = *)\n    (*       Krml.KPrint.bprintf \"for-loop reconstruction: visiting %a\\n\" plid name; *)\n    (*       super#visit_DFunction () cc flags n_cgs n t name bs e *)\n  end\n\nlet remove_assign_return =\n  object (self)\n    inherit [_] map as super\n\n    method! visit_ESequence (((), _) as env) es =\n      match List.rev es with\n      | { node = EReturn { node = EBound i; _ }; typ = t; _ }\n        :: { node = EAssign ({ node = EBound i'; _ }, e); _ }\n        :: es\n        when i = i' ->\n          ESequence (List.rev (with_type t (EReturn e) :: List.map (self#visit_expr env) es))\n      | { node = EBound i; _ } :: { node = EAssign ({ node = EBound i'; _ }, e); _ } :: es\n        when i = i' -> ESequence (List.rev (e :: List.map (self#visit_expr env) es))\n      | _ -> super#visit_ESequence env es\n  end\n\nlet bonus_cleanups =\n  let open Krml in\n  object (self)\n    inherit [_] map as super\n    method! extend env b = b.node.name :: env\n\n    method! visit_lident _ lid =\n      match lid with\n      | [ \"core\"; \"slice\"; \"{[T]}\" ], \"len\" -> [ \"Eurydice\" ], \"slice_len\"\n      | [ \"core\"; \"slice\"; \"{[T]}\" ], \"copy_from_slice\" -> [ \"Eurydice\" ], \"slice_copy\"\n      | [ \"core\"; \"slice\"; \"{[T]}\" ], \"split_at\" -> [ \"Eurydice\" ], \"slice_split_at\"\n      | [ \"core\"; \"slice\"; \"{[T]}\" ], \"split_at_mut\" -> [ \"Eurydice\" ], \"slice_split_at_mut\"\n      | _ -> lid\n\n    (* { f = e; ... }.f ~~> e\n\n     scheduled late because we need all the let-inlining *)\n    method! visit_EField env e f =\n      match e.node with\n      | EFlat fields -> (List.assoc (Some f) fields).node\n      | _ -> EField (self#visit_expr env e, f)\n\n    method! visit_ELet ((bs, _) as env) b e1 e2 =\n      match e1.node, e1.typ, e2.node with\n      (* let x; x := e; return x  -->  x*)\n      | ( EAny,\n          _,\n          ESequence [ { node = EAssign ({ node = EBound 0; _ }, e3); _ }; { node = EBound 0; _ } ] )\n        -> (DeBruijn.subst Helpers.eunit 0 e3).node\n      (* let uu; memcpy(uu, ..., src, ...); e2  -->  let copy_of_src; ... *)\n      | ( EAny,\n          TArray (_, (_, n)),\n          ESequence\n            [\n              {\n                node =\n                  EBufBlit\n                    ( { node = EBound src; _ },\n                      { node = EConstant (_, \"0\"); _ },\n                      { node = EBound 0; _ },\n                      { node = EConstant (_, \"0\"); _ },\n                      { node = EConstant (_, n'); _ } );\n                _;\n              };\n              _;\n            ] )\n        when n = n' && Krml.Helpers.is_uu b.node.name ->\n          super#visit_ELet env\n            {\n              b with\n              node = { b.node with name = \"copy_of_\" ^ List.nth bs (src - 1) };\n              meta = [ CommentBefore \"Passing arrays by value in Rust generates a copy in C\" ];\n            }\n            e1 e2\n      (* let uu = f(e); y = uu; e2  -->  let y = f(e); e2 *)\n      | ( EApp ({ node = EQualified _; _ }, es),\n          _,\n          ESequence [ { node = EAssign (e2, { node = EBound 0; _ }); _ }; e3 ] )\n        when Helpers.is_uu b.node.name && List.for_all Helpers.is_readonly_c_expression es ->\n          ESequence\n            [\n              with_type TUnit (EAssign (DeBruijn.subst Helpers.eunit 0 e2, e1));\n              self#visit_expr env (DeBruijn.subst Helpers.eunit 0 e3);\n            ]\n      | _ -> super#visit_ELet env b e1 e2\n  end\n\nlet cosmetic =\n  object (_self)\n    inherit [_] map as super\n\n    method! visit_expr _ e =\n      match e with\n      | [%cremepat {| core::slice::?impl::len<?>(Eurydice::array_to_slice_shared[#?n]<?>(?)) |}]\n        when impl = \"{[T]}\" -> n\n      | [%cremepat {| core::slice::?impl::len<?>(Eurydice::array_to_slice_mut[#?n]<?>(?)) |}]\n        when impl = \"{[T]}\" -> n\n      | [%cremepat {| core::slice::?impl::len<?>(?e) |}] when impl = \"{[T]}\" ->\n          with_type (TInt SizeT) (EField (e, \"meta\"))\n      | [%cremepat {| Eurydice::slice_index_mut<?t>(?s, ?i) |}] ->\n          with_type e.typ\n            (EBufRead (with_type (TBuf (t, false)) (EField (super#visit_expr_w () s, \"ptr\")), i))\n      | [%cremepat {| Eurydice::slice_index_shared<?t>(?s, ?i) |}] ->\n          with_type e.typ\n            (EBufRead (with_type (TBuf (t, true)) (EField (super#visit_expr_w () s, \"ptr\")), i))\n      | _ -> super#visit_expr ((), e.typ) e\n  end\n\n(* This is a potentially tricky phase because if it's too aggressive, it'll\n   generate a copy -- for instance, f(&x[3]) is not the same as let tmp = x[3];\n   f(&tmp). Such cases might be hidden behind macros! (Like\n   Eurydice_slice_index.) *)\nlet check_addrof =\n  object (self)\n    inherit [_] map\n\n    method! visit_EAddrOf ((), t) e =\n      (* see https://en.cppreference.com/w/c/language/operator_member_access *)\n      match e.node with\n      | EQualified _ (* case 1 *) | EBufRead _ (* case 4 *) -> EAddrOf (self#visit_expr_w () e)\n      | EApp ({ node = EQualified lid; _ }, _)\n      | EApp ({ node = ETApp ({ node = EQualified lid; _ }, _, _, _); _ }, _)\n        when lid = Builtin.slice_index_shared.name\n             || lid = Builtin.slice_index_mut.name\n             || Krml.KString.starts_with (snd lid) \"op_Bang_Star__\" (* case 4, case 3 *) ->\n          EAddrOf e\n      | _ ->\n          (* Recursively do for the internal expression first *)\n          let e = self#visit_expr_w () e in\n          if Krml.Structs.will_be_lvalue e then\n            EAddrOf e\n          else\n            let b = Krml.Helpers.fresh_binder ~mut:true \"lvalue\" e.typ in\n            let b =\n              {\n                b with\n                Krml.Ast.meta = [ CommentBefore \"original Rust expression is not an lvalue in C\" ];\n              }\n            in\n            ELet (b, e, with_type t (EAddrOf (with_type e.typ (EBound 0))))\n  end\n\n(* Aeneas requires hoisting loop bodies into separate functions. *)\nlet is_inline_loop lid = Krml.KString.exists (snd lid) \"inner_loop\"\n\nlet return_becomes_break =\n  object\n    inherit [_] Krml.Ast.map as super\n    method! visit_EReturn _ _ = EBreak\n    method! visit_EFor _ _ _ _ = failwith \"nested loop in a loop body\"\n\n    method! visit_EApp env e es =\n      match e.node with\n      | EQualified lid when is_inline_loop lid -> failwith \"nested loop in a loop body\"\n      | _ -> super#visit_EApp env e es\n  end\n\nlet inline_loops =\n  object\n    inherit [_] Krml.Ast.map\n\n    method! visit_DFunction () cc flags n_cgs n t name binders body =\n      if is_inline_loop name then\n        DFunction\n          ( cc,\n            [ Krml.Common.MustInline; MustDisappear ] @ flags,\n            n_cgs,\n            n,\n            t,\n            name,\n            binders,\n            return_becomes_break#visit_expr_w () body )\n      else\n        DFunction (cc, flags, n_cgs, n, t, name, binders, body)\n  end\n\n(** A better version of hoist (than [Krml.Simplify.hoist]), also work for [DGlobal]. *)\nlet hoist =\n  object\n    inherit Krml.Simplify.hoist\n\n    method! visit_DGlobal loc flags name n ret expr =\n      let loc = Krml.Loc.(InTop name :: loc) in\n      let lhs, expr = Krml.Simplify.maybe_hoist_initializer field_types loc ret expr in\n      let expr = H.nest lhs ret expr in\n      DGlobal (flags, name, n, ret, expr)\n  end\n\n(** Also fix for [DGlobal] as [hoist] above *)\nlet fixup_hoist =\n  object\n    inherit [_] map\n\n    method! visit_DFunction _ cc flags n_cgs n ret name binders expr =\n      DFunction (cc, flags, n_cgs, n, ret, name, binders, Krml.Simplify.fixup_return_pos expr)\n\n    method! visit_DGlobal () flags name n ret expr =\n      DGlobal (flags, name, n, ret, Krml.Simplify.fixup_return_pos expr)\n  end\n\n(** For any [DGlobal], if the expression has any locals remaining We should let them also be\n    globals, so to make the overall expr valid.\n\n    I.e., we make: [T VAL = let v1 : T1 = e1 in let v2 : T2 = e2 in ... let vN : TN = eN in e;]\n    become:\n    [T1 VAL_local_1 = e1; T2 VAL_local_2 = e2[v1/VAL_local_1]; ... TN VAL_local_N =\n     eN[v1/VAL_local_1; v2/VAL_local_2; ...; vN-1/VAL_local_(N-1)]; T VAL = e;]\n\n    Notably, the locals should be renamed to avoid potential naming conflicts. *)\nlet globalize_global_locals files =\n  let mapper = function\n    | DGlobal (flags, name, n_cgs, ty, expr) ->\n        let rec decompose_expr id info_acc expr =\n          match expr.node with\n          | ELet (_, e1, e2) ->\n              let name =\n                let lst, name = name in\n                lst, name ^ \"$local$\" ^ string_of_int id\n              in\n              (* Replace the variable with the new globalised name. *)\n              let e2 = subst Krml.Ast.(with_type e1.typ (EQualified name)) 0 e2 in\n              decompose_expr (id + 1) ((name, e1) :: info_acc) e2\n          | _ -> List.rev info_acc, expr\n        in\n        let info, expr = decompose_expr 0 [] expr in\n        (* Make the new globals private if possible -- with exception that\n       if it is a non-private macro, then the involved new globals should not be private *)\n        let module NameSet = Krml.Idents.LidSet in\n        let no_priv_names =\n          if List.mem Krml.Common.Macro flags && not (List.mem Krml.Common.Private flags) then\n            (object\n               inherit [_] reduce\n               method private zero = NameSet.empty\n               method private plus = NameSet.union\n               method! visit_EQualified _ name = NameSet.singleton name\n            end)\n              #visit_expr_w\n              () expr\n          else\n            NameSet.empty\n        in\n        let make_decl (name, expr) =\n          let flags =\n            if NameSet.mem name no_priv_names then\n              []\n            else\n              [ Krml.Common.Private ]\n          in\n          DGlobal (flags, name, n_cgs, expr.typ, expr)\n        in\n        List.map make_decl info @ [ DGlobal (flags, name, n_cgs, ty, expr) ]\n    | decl -> [ decl ]\n  in\n  List.map (fun (name, decls) -> name, List.concat_map mapper decls) files\n\n(* The elimination of single-field structs generates new types equations, which\n   we need to substitute away. *)\nlet fixup_monomorphization_map map =\n  (* Replace all occurences of lid, a struct that had a single field of type t,\n     with t *)\n  let replace =\n    object (self)\n      inherit [_] Krml.Ast.map\n\n      method! visit_TQualified () lid =\n        match Hashtbl.find_opt map lid with\n        | Some (Krml.DataTypes.Eliminate t) -> self#visit_typ () t\n        | _ -> TQualified lid\n    end\n  in\n  (* Must convert the hashtbl keys to a list instead of a lazy sequence Seq,\n     because this would result in modifying the hashtbl while accessing it. *)\n  List.iter\n    (fun ((lid, ts, cgs), v) ->\n      let ts = List.map (replace#visit_typ ()) ts in\n      Hashtbl.add Krml.MonomorphizationState.state (lid, ts, cgs) v)\n    (List.of_seq (Hashtbl.to_seq Krml.MonomorphizationState.state))\n\n(* Hoist comments to be attached to the nearest statement *)\nlet float_comments files =\n  let comments = ref [] in\n  let prepend c = comments := c :: !comments in\n  let flush () =\n    let r = List.rev !comments in\n    comments := [];\n    List.map (fun x -> CommentBefore x) r\n  in\n  let filter_meta meta =\n    meta\n    |> List.filter (function\n         | CommentBefore c ->\n             prepend c;\n             false\n         | _ -> true)\n    |> List.filter (function\n         | CommentAfter c ->\n             prepend c;\n             false\n         | _ -> true)\n  in\n  (object (self)\n     inherit [_] map as super\n\n     method! visit_expr env e =\n       let e = super#visit_expr env e in\n       { e with meta = filter_meta e.meta }\n\n     method private process_block e =\n       let float_one e =\n         let e = self#visit_expr_w () e in\n         { e with meta = flush () }\n       in\n       match e.node with\n       | ELet (b, e1, e2) ->\n           let e1 = self#visit_expr_w () e1 in\n           let e1 = { e1 with meta = filter_meta e1.meta } in\n           let b = { b with meta = filter_meta b.meta } in\n           let meta = flush () in\n           { e with node = ELet (b, e1, self#process_block e2); meta }\n       | ESequence es ->\n           let es = List.map float_one es in\n           { e with node = ESequence es; meta = filter_meta e.meta }\n       | _ -> float_one e\n\n     method! visit_EFor env b e1 e2 e3 e4 =\n       let e4 = self#process_block e4 in\n       EFor (b, self#visit_expr env e1, self#visit_expr env e2, self#visit_expr env e3, e4)\n\n     method! visit_EWhile env e1 e2 =\n       let e2 = self#process_block e2 in\n       EWhile (self#visit_expr env e1, e2)\n\n     method! visit_EIfThenElse env e1 e2 e3 =\n       let e2 = self#process_block e2 in\n       let e3 = self#process_block e3 in\n       EIfThenElse (self#visit_expr env e1, e2, e3)\n\n     method! visit_ESwitch env e bs =\n       let bs = List.map (fun (c, e) -> c, self#process_block e) bs in\n       ESwitch (self#visit_expr env e, bs)\n\n     method! visit_DFunction _ cc flags n_cgs n t name bs e =\n       DFunction (cc, flags, n_cgs, n, t, name, bs, self#process_block e)\n  end)\n    #visit_files\n    () files\n\n(* When krml is used with the F* frontend, all operations on signed integers\n   must fit in the destination type -- no overflow allowed!\n\n   When krml is used with the Rust frontend (here), overflow on signed integer\n   types is UB, except for left-shift which *is* defined (provided the places we\n   shift by do not exceed the width of the type, like in C).\n\n   We rely on the invariant that for signed integer arithmetic, every\n   subexpression may be as `int` as long as the representation is consistent\n   (i.e. the sign-extended version of the original value).\n   - add, mul, div: cannot overflow in Rust (panic)\n   - right-shift: ok (sign-extension in practice even though\n     implementation-defined)\n   - left-shift: must cast to unsigned to avoid UB, then cast back to signed to\n     clamp extra high bytes\n\n   *)\nlet rewrite_signed_shifts files =\n  let open Krml.Constant in\n  (object (self)\n     inherit [_] map as super\n\n     method! visit_EApp env e es =\n       match e.node, es with\n       | EOp (BShiftL, TInt w), [ e1; e2 ] when is_signed w ->\n           let unsigned_w = unsigned_of_signed w in\n           (* No point in casting to uint16 or uint8: this will be promoted to\n              `int` once in C, which AstToCStar defeats by casting to (uint32_t)\n              -- we simply anticipate this fact and cast straight to uint32_t. *)\n           let unsigned_w =\n             match unsigned_w with\n             | UInt8 | UInt16 -> UInt32\n             | _ -> unsigned_w\n           in\n           let e1 = self#visit_expr env e1 in\n           let e2 = self#visit_expr env e2 in\n           (* Note that in C, casting to a signed type is implementation-defined\n              (yay). We assume all implementations rely on two's complement. *)\n           let e1_unsigned = with_type (TInt unsigned_w) (ECast (e1, TInt unsigned_w)) in\n           let op_type = H.fold_arrow [ TInt unsigned_w; e2.typ ] (TInt unsigned_w) in\n           let shift =\n             with_type (TInt unsigned_w)\n               (EApp (with_type op_type (EOp (BShiftL, TInt unsigned_w)), [ e1_unsigned; e2 ]))\n           in\n           ECast (shift, TInt w)\n       | _ -> super#visit_EApp env e es\n  end)\n    #visit_files\n    () files\n\n(* Now that we have the allocation scheme of data types, we can eliminate the Eurydice_discriminant\n   placeholder *)\nlet remove_discriminant_reads (map : Krml.DataTypes.map) files =\n  let lookup_tag_lid lid =\n    let open Krml.DataTypes in\n    match Hashtbl.find (fst3 map) lid with\n    | exception Not_found -> `Direct (* was compiled straight to an enum via AstOfLlbc *)\n    | ToEnum -> `Direct\n    | ToTaggedUnion branches | ToFlatTaggedUnion branches ->\n        let tags = List.map (fun (cons, _) -> cons, None) branches in\n        `TagField (Hashtbl.find (snd3 map) tags)\n    | _ ->\n        failwith \"TODO: compile discriminant read for something that no longer has a discriminant\"\n  in\n  (object (_self)\n     inherit [_] map as super\n\n     method! visit_expr (((), _) as env) e =\n       match e with\n       | [%cremepat {| Eurydice::discriminant<?, ?u>(?e) |}] -> (\n           match lookup_tag_lid (H.assert_tlid e.typ) with\n           | `Direct -> with_type u (ECast (e, u))\n           | `TagField tag_lid ->\n               with_type u (ECast (with_type (TQualified tag_lid) (EField (e, \"tag\")), u)))\n       | _ -> super#visit_expr env e\n  end)\n    #visit_files\n    () files\n"
  },
  {
    "path": "lib/Cleanup3.ml",
    "content": "(* Administrative cleanups that do not get checked. *)\n\n(* CG-polymorphic external signatures generally cannot be implemented with C functions, and Eurydice\n   expects those to be hand-written using macros. There is one exception, though:\n   - all of the const generics appear in positions that would anyhow decay to pointers (e.g.,\n     void f<N>(int x[N]) can be replaced by void f(int *x) -- it's the same in C)\n   - the return type is unit -- the implementation doesn't need to receive the return type as an\n     argument\n*)\n\nmodule B = Builtin\nopen Krml\nopen Ast\n\nlet decay_cg_externals =\n  object (self)\n    inherit [_] Krml.Ast.map as super\n\n    (* Since we allocate new names, we reuse the C name allocation facility *)\n    inherit Simplify.scope_helpers\n\n    method! visit_file env f =\n      current_file <- fst f;\n      super#visit_file env f\n\n    method! visit_TCgArray (env, under_external) t n =\n      if under_external then\n        raise Exit\n      else\n        super#visit_TCgArray (env, under_external) t n\n\n    method! visit_TCgApp (env, under_external) t n =\n      if under_external then\n        raise Exit\n      else\n        super#visit_TCgApp (env, under_external) t n\n\n    method! visit_DExternal (scope_env, _) cc flags n_cgs n name t hints =\n      let t_ret, t_args = Helpers.flatten_arrow t in\n      (* MSVC throws a tantrum if it receives a zero-sized array parameter,\n         interpreting this as a stack allocation instead of an array type that\n         ought to decay to pointer. *)\n      let t_args =\n        List.map\n          (function\n            | TArray (t, (_, \"0\")) -> TBuf (t, false)\n            | t -> t)\n          t_args\n      in\n      if t_ret = TUnit && n_cgs > 0 then\n        let t_args =\n          List.map\n            (function\n              | TCgArray (t, _) -> TBuf (t, false)\n              | t -> t)\n            t_args\n        in\n        try\n          (* This throws and aborts if there are some const generics left. *)\n          let t_args = List.map (self#visit_typ (scope_env, true)) t_args in\n\n          (* We're good. Find the allocated C name for our declaration, and allocate a new C name for\n             the extra declaration *)\n          let c_name = Option.get (GlobalNames.lookup (fst scope_env) (name, Other)) in\n          let new_name = fst name, snd name ^ \"_\" in\n          self#record scope_env ~is_type:false ~is_external:true flags new_name;\n          let new_c_name = Option.get (GlobalNames.lookup (fst scope_env) (new_name, Other)) in\n\n          (* We build: #define <<c_name>>(x0, ..., xn, _ret_t) \\\n             <<new_c_name>>(x0, ..., xn) *)\n          let prelude =\n            (* Names of the arguments *)\n            let names =\n              if List.length hints = List.length t_args then\n                hints\n              else\n                List.init (List.length t_args) (fun i -> KPrint.bsprintf \"x_%d\" i)\n            in\n            KPrint.bsprintf \"#define %s(%s) %s(%s)\" c_name\n              (String.concat \", \" (names @ [ \"_ret_t\" ]))\n              new_c_name (String.concat \", \" names)\n          in\n          DExternal\n            ( cc,\n              [ Common.Prologue prelude ] @ flags,\n              0,\n              n,\n              new_name,\n              Helpers.fold_arrow t_args t_ret,\n              hints )\n        with Exit -> DExternal (cc, flags, n_cgs, n, name, Helpers.fold_arrow t_args t_ret, hints)\n      else\n        DExternal (cc, flags, n_cgs, n, name, Helpers.fold_arrow t_args t_ret, hints)\n  end\n\nlet build_cg_macros =\n  object (self)\n    inherit [_] Krml.Ast.reduce\n    method private zero = Krml.Idents.LidSet.empty\n    method private plus = Krml.Idents.LidSet.union\n\n    method! visit_DExternal () _ _ n_cgs n name _ _ =\n      if n > 0 || n_cgs > 0 then\n        Krml.Idents.LidSet.singleton name\n      else\n        self#zero\n  end\n\nlet distinguished_names =\n  [\n    (B.arr, [ TInt UInt8 ], [ CgConst (SizeT, \"2\") ]), ([ \"Eurydice\" ], \"array_u8x2\");\n    (B.arr, [ TInt UInt8 ], [ CgConst (SizeT, \"4\") ]), ([ \"Eurydice\" ], \"array_u8x4\");\n    (B.arr, [ TInt UInt8 ], [ CgConst (SizeT, \"8\") ]), ([ \"Eurydice\" ], \"array_u8x8\");\n    (B.dst_ref_shared, [ TInt UInt8; TInt SizeT ], []), ([ \"Eurydice\" ], \"borrow_slice_u8\");\n    (B.dst_ref_shared, [ TInt Int16; TInt SizeT ], []), ([ \"Eurydice\" ], \"borrow_slice_i16\");\n    (B.dst_ref_mut, [ TInt UInt8; TInt SizeT ], []), ([ \"Eurydice\" ], \"mut_borrow_slice_u8\");\n    (B.dst_ref_mut, [ TInt Int16; TInt SizeT ], []), ([ \"Eurydice\" ], \"mut_borrow_slice_i16\");\n  ]\n\n(*This identifies the decls which should be generated after monomorphism, but is already defined\n in eurydice_glue.h for implementing the builtin functions. The slices are for\n libcrux, specifically to be able to define the intrinsic function signatures *)\nlet is_builtin_lid lid =\n  match lid with\n  | [ \"Prims\" ], \"string\" (* used to pass the checker, defined in glue.h *) -> true\n  | _ -> List.exists (fun (_, lid') -> lid' = lid) distinguished_names\n\nlet remove_builtin_decls files =\n  let checker = function\n    | DType (lid, _, _, _, _) when is_builtin_lid lid -> None\n    | decl -> Some decl\n  in\n  List.map (fun (name, decls) -> name, List.filter_map checker decls) files\n\nlet also_skip_prefix_for_external_types (scope_env, _) =\n  let open Krml in\n  object (_self)\n    inherit [_] iter as _super\n\n    method! visit_TQualified () lid =\n      if GlobalNames.lookup scope_env (lid, Type) = None && GlobalNames.skip_prefix lid then\n        let target = GlobalNames.target_c_name ~attempt_shortening:true ~kind:Type lid in\n        let actual = GlobalNames.extend scope_env scope_env false (lid, Type) target in\n        if actual <> fst target then\n          KPrint.bprintf \"Warning! The skip_prefix options generate name conflicts\\n\"\n  end\n"
  },
  {
    "path": "lib/LoadLlbc.ml",
    "content": "let load_file filename =\n  match Charon.OfJson.crate_of_json_file filename with\n  | Ok r -> r\n  | Error e ->\n      Printf.fprintf stderr\n        \"Error loading JSON. This is typically due to a discrepancy between charon-ml and charon. \\\n         See error below. (Search for \\\"failed on\\\"). \\n\\n\\\n         %s\"\n        e;\n      exit 1\n"
  },
  {
    "path": "lib/Logging.ml",
    "content": "module StringSet = Set.Make (String)\n\ntype logging = None | All | Some of StringSet.t\n\nlet logging = ref None\n\nlet enable_logging (modules : string) =\n  let modules = String.split_on_char ',' modules in\n  if modules = [ \"*\" ] then\n    logging := All\n  else\n    logging := Some (StringSet.of_list modules)\n\nlet has_logging m =\n  match !logging with\n  | None -> false\n  | All -> true\n  | Some s -> StringSet.mem m s\n\nlet dummy = Buffer.create 1\n\nlet log (type a) (m : string) (fmt : (a, Buffer.t, unit, unit) format4) =\n  if has_logging m then\n    Krml.KPrint.bfprintf stdout (fmt ^^ \"\\n\")\n  else\n    Printf.ibprintf dummy fmt\n"
  },
  {
    "path": "lib/Options.ml",
    "content": "let log_level = ref \"\"\nlet config = ref \"\"\nlet comments = ref false\nlet fatal_errors = ref false\nlet keep_going = ref false\nlet no_const = ref false\n"
  },
  {
    "path": "lib/PreCleanup.ml",
    "content": "open Krml.Ast\nmodule H = Krml.Helpers\n\n(* All the transformations that need to happen in order for the program to type-check as valid Low*\n   *)\n\nlet expr_of_constant (w, n) = with_type (TInt w) (EConstant (w, n))\n\nlet remove_array_eq =\n  object\n    inherit Krml.DeBruijn.map_counting_cg as super\n\n    method! visit_expr (((n_cgs, n_binders) as env), _) e =\n      match e with\n      | [%cremepat {| core::array::equality::?impl::eq[#?n](#?..)<?t,?u>(?a1, ?a2) |}] ->\n          let rec is_flat = function\n            | TCgApp (TApp (lid, [ t ]), _) -> lid = Builtin.arr && is_flat t\n            | TInt _ | TBool | TUnit -> true\n            | _ -> false\n          in\n          assert (t = u);\n          if is_flat t then\n            let diff = n_binders - n_cgs in\n            match impl with\n            | \"{core::cmp::PartialEq<[U; N]> for [T; N]}\" ->\n                with_type TBool\n                  (EApp (Builtin.(expr_of_builtin_t ~cgs:(diff, [ n ]) array_eq [ t ]), [ a1; a2 ]))\n            | \"{core::cmp::PartialEq<&0 ([U])> for [T; N]}\" ->\n                let hd =\n                  if !Options.no_const then\n                    Builtin.array_eq_slice_mut\n                  else\n                    Builtin.array_eq_slice_shared\n                in\n                with_type TBool\n                  (EApp (Builtin.(expr_of_builtin_t ~cgs:(diff, [ n ]) hd [ t ]), [ a1; a2 ]))\n            | _ -> failwith (\"unknown array eq impl: \" ^ impl)\n          else\n            failwith \"TODO: non-byteeq array comparison\"\n      | _ -> super#visit_expr (env, e.typ) e\n\n    method! visit_DFunction _ cc flags n_cgs n t lid bs e =\n      super#visit_DFunction (n_cgs, 0) cc flags n_cgs n t lid bs e\n  end\n\nlet expression_of_cg (n_cgs, n_binders) (cg : cg) =\n  match cg with\n  | CgConst n -> H.mk_sizet (int_of_string (snd n))\n  | CgVar var ->\n      let diff = n_binders - n_cgs in\n      with_type (TInt SizeT) (EBound (var + diff))\n\n(* slice_to_array<&[T], [T; N], Error>(src) -> \n   let arr: Arr<T,N>; memcpy(arr.data, src.ptr, N); Ok arr \n   slice_to_ref_array<&[T], &[T;N], Error, len>(src) ->\n   let arr: Arr<T,N>; memcpy(arr.data, src.ptr); slice_to_ref_array2<&[T], &[T;N], Error, len>(src, &arr)\n   *)\nlet constness_of_slice_type t =\n  match t with\n  | TApp (lid, _) when lid = Builtin.dst_ref_shared -> true\n  | TApp (lid, _) when lid = Builtin.dst_ref_mut -> false\n  | _ -> assert false\n\nlet expand_slice_to_array =\n  object (_self)\n    inherit Krml.DeBruijn.map_counting_cg as super\n\n    method! visit_expr ((count, _) as env) e =\n      match e.node with\n      | EApp\n          ( {\n              node =\n                ETApp\n                  ( { node = EQualified lid; _ },\n                    _,\n                    _,\n                    [ _; (TCgApp (TApp (_, [ t ]), cg) as arr_t); _ ] );\n              _;\n            },\n            es )\n        when lid = Builtin.slice_to_array.name ->\n          let src = Krml.KList.one es in\n          let result_t = e.typ in\n          (*let arr = .. *)\n          let arr = with_type arr_t (EBound 0) in\n          let src = Krml.DeBruijn.lift 1 src in\n          let dst = with_type (TBuf (t, false)) (EField (arr, \"data\")) in\n          let src = with_type (TBuf (t, constness_of_slice_type src.typ)) (EField (src, \"ptr\")) in\n          let n = Krml.DeBruijn.lift 1 (expression_of_cg count cg) in\n          let zero = H.zero SizeT in\n          let memcpy = H.with_unit (EBufBlit (src, zero, dst, zero, n)) in\n          (* let arr = any in {memcpy (src, slice); OK (arr);} *)\n          with_type result_t\n            (ELet\n               ( H.fresh_binder \"arr\" arr_t,\n                 H.any,\n                 with_type result_t\n                   (ESequence [ memcpy; with_type result_t (ECons (\"Ok\", [ arr ])) ]) ))\n      | EApp\n          ( {\n              node =\n                ETApp\n                  ( { node = EQualified lid; _ },\n                    cgs,\n                    _,\n                    [\n                      slice_t;\n                      (TBuf ((TCgApp (TApp (_, [ t ]), cg) as arr_t), _) as arr_ref_t);\n                      err_t;\n                    ] );\n              _;\n            },\n            [ slice ] )\n        when lid = Builtin.slice_to_ref_array.name ->\n          (* allocate a Arr<T,C>, do memcpy and let the C macro do the choose and define the return\n             or error value *)\n          let const = constness_of_slice_type slice_t in\n          let slice_to_ref_array2 = Builtin.(expr_of_builtin slice_to_ref_array2) in\n          let ts = [ slice_t; arr_ref_t; err_t ] in\n          let slice_to_ref_array2 =\n            with_type\n              (Krml.DeBruijn.subst_tn ts Builtin.slice_to_ref_array2.typ)\n              (ETApp (slice_to_ref_array2, List.map (Krml.DeBruijn.lift 1) cgs, [], ts))\n          in\n          let arr = with_type arr_t (EBound 0) in\n          let arr_ref = with_type arr_ref_t (EAddrOf arr) in\n          let slice = Krml.DeBruijn.lift 1 slice in\n          let dst = with_type (TBuf (t, true)) (EField (arr, \"data\")) in\n          let src = with_type (TBuf (t, const)) (EField (slice, \"ptr\")) in\n          let n = Krml.DeBruijn.lift 1 (expression_of_cg count cg) in\n          (* let n = with_type (TInt SizeT) (EField (slice, \"meta\")) in *)\n          let zero = H.zero SizeT in\n          let memcpy = H.with_unit (EBufBlit (src, zero, dst, zero, n)) in\n          with_type e.typ\n            (ELet\n               ( H.fresh_binder \"arr\" arr_t,\n                 H.any,\n                 with_type e.typ\n                   (ESequence\n                      [ memcpy; with_type e.typ (EApp (slice_to_ref_array2, [ slice; arr_ref ])) ])\n               ))\n      | _ -> super#visit_expr env e\n\n    method! visit_DFunction _ cc flags n_cgs n t name bs e =\n      super#visit_DFunction (n_cgs, 0) cc flags n_cgs n t name bs e\n  end\n\n(** Comes from [drop_unused] in Inlining.ml, we use it to remove the builtin function defined using\n    abstract syntax when they are not used. Otherwise they will refer to the undefined Range type\n    and fail the check *)\n\nlet builtin_func_lids = List.map lid_of_decl Builtin.builtin_defined_funcs\n\nlet drop_unused_builtin files =\n  let open Krml in\n  let open Krml.Common in\n  let seen = Hashtbl.create 41 in\n\n  let body_of_lid = Helpers.build_map files (fun map d -> Hashtbl.add map (lid_of_decl d) d) in\n\n  let visitor =\n    object (self)\n      inherit [_] iter as super\n      method! visit_EQualified (before, _) lid = self#discover before lid\n      method! visit_TQualified before lid = self#discover before lid\n\n      method! visit_TApp before lid ts =\n        self#discover before lid;\n        List.iter (self#visit_typ before) ts\n\n      method private discover before lid =\n        if not (Hashtbl.mem seen lid) then begin\n          Hashtbl.add seen lid ();\n          if Hashtbl.mem body_of_lid lid then\n            ignore (super#visit_decl (lid :: before) (Hashtbl.find body_of_lid lid))\n        end\n\n      method! visit_decl _ d =\n        let flags = flags_of_decl d in\n        let lid = lid_of_decl d in\n        if (not (List.exists (( = ) Private) flags)) && not (Drop.lid lid) then begin\n          Hashtbl.add seen lid ();\n          super#visit_decl [ lid ] d\n        end\n    end\n  in\n  visitor#visit_files [] files;\n  Hashtbl.add seen ([ \"LowStar\"; \"Ignore\" ], \"ignore\") ();\n  filter_decls\n    (fun d ->\n      let flags = flags_of_decl d in\n      let lid = lid_of_decl d in\n      if\n        (List.exists (( = ) Private) flags || Drop.lid lid)\n        && (not (Hashtbl.mem seen lid))\n        && List.mem lid builtin_func_lids\n      then\n        None\n      else\n        Some d)\n    files\n\nlet precleanup files =\n  let files = remove_array_eq#visit_files (0, 0) files in\n  let files = drop_unused_builtin files in\n  let files = expand_slice_to_array#visit_files (0, 0) files in\n  files\n\nlet merge files =\n  let open Krml.Idents in\n  let open Krml.PrintAst.Ops in\n  let merge_decl lid d1 d2 =\n    match d1, d2 with\n    | _ when Krml.Idents.LidSet.mem lid Builtin.skip -> None\n    | Some d1, None | None, Some d1 -> Some d1\n    | None, None -> assert false\n    | Some d1, Some d2 -> (\n        let is_external = function\n          | DExternal _ -> true\n          | _ -> false\n        in\n        let check_equal () =\n          if d1 <> d2 then begin\n            Krml.KPrint.bprintf \"%a is:\\n%a\\n\\nVS\\n\\n%a\\n\" plid lid pdecl d1 pdecl d2;\n            failwith \"can't reconcile these two definitions\"\n          end\n        in\n        match d1, d2 with\n        | DExternal _, d2 | d2, DExternal _ ->\n            if is_external d2 then\n              check_equal ();\n            Some d2\n        | _ ->\n            check_equal ();\n            Some d1)\n  in\n  let decl_map decls = LidMap.of_seq (List.to_seq (List.map (fun d -> lid_of_decl d, d) decls)) in\n  let merge_decls decls1 decls2 = LidMap.merge merge_decl decls1 decls2 in\n  let concat_filenames f1 f2 =\n    if f1 = \"\" then\n      f2\n    else\n      f1 ^ \"_\" ^ f2\n  in\n  let merge_files (f1, decls1) (f2, decls2) =\n    concat_filenames f1 f2, merge_decls decls1 (decl_map decls2)\n  in\n  let f, decls = List.fold_left merge_files (\"\", LidMap.empty) files in\n  let decls = List.map snd (List.of_seq (LidMap.to_seq decls)) in\n  let decls = Bundles.topological_sort decls in\n  f, decls\n"
  },
  {
    "path": "lib/Utf8.ml",
    "content": "let ascii_of_utf8_str (str : string) =\n  let get_uchar_list (str : string) =\n    let rec get_uchar_list acc idx =\n      try\n        let uchar = Uchar.utf_decode_uchar (String.get_utf_8_uchar str idx) in\n        let char_len = Uchar.utf_8_byte_length uchar in\n        get_uchar_list (uchar :: acc) (idx + char_len)\n      with Invalid_argument _ -> List.rev acc\n    in\n    get_uchar_list [] 0\n  in\n  let uchar_list_to_ascii lst =\n    let to_str uchar =\n      if Uchar.is_char uchar then\n        Uchar.to_char uchar |> Char.escaped\n      else\n        Printf.sprintf \"\\\\u{%x}\" @@ Uchar.to_int uchar\n    in\n    List.map to_str lst |> String.concat \"\"\n  in\n  get_uchar_list str |> uchar_list_to_ascii\n"
  },
  {
    "path": "lib/dune",
    "content": "(library\n (name eurydice)\n (libraries charon krml yaml)\n (preprocess\n  (pps ppx_deriving.std cremepat)))\n\n(env\n (_\n  (flags\n   (:standard -w @1-2@3-7@8..12@14..21@23..29-30@31..38-39-40-41@43@57))))\n"
  },
  {
    "path": "out/test-array/array.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"array.h\"\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nstatic Eurydice_borrow_slice_u8\narray_to_subslice_shared_d4(const Eurydice_arr_ec *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\nuint8_t array_fun(Eurydice_dst_ref_shared_60 x)\n{\n  return\n    array_to_subslice_shared_d4(&x.ptr[0U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)1U })).ptr[0U];\n}\n\nEurydice_arr_ec array_init(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_ec){ .data = { 0U } });\n}\n\narray_Foo array_mk_foo(void)\n{\n  Eurydice_arr_a0 x = { .data = { 0U } };\n  Eurydice_arr_a0 y;\n  uint32_t repeat_expression[2U];\n  for (uint32_t _i = 0U; _i < (size_t)2U; ++_i)\n    repeat_expression[_i] = 1U;\n  memcpy(y.data, repeat_expression, (size_t)2U * sizeof (uint32_t));\n  return (KRML_CLITERAL(array_Foo){ .x = x, .y = y });\n}\n\narray_Foo array_mk_foo2(void)\n{\n  return array_mk_foo();\n}\n\nvoid array_mut_array(Eurydice_arr_a0 x)\n{\n  x.data[0U] = 1U;\n}\n\nvoid array_mut_foo(array_Foo f)\n{\n  f.x.data[0U] = 1U;\n  Eurydice_arr_a0 copy = f.y;\n  copy.data[0U] = 0U;\n  EURYDICE_ASSERT(copy.data[0U] != 1U, \"panic!\");\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), u32> for array::mk_incr::closure<K>}\n*/\n/**\nA monomorphic instance of array.mk_incr.call_mut_e2\nwith const generics\n- K= 10\n*/\nuint32_t array_mk_incr_call_mut_e2_55(void **_, size_t tupled_args)\n{\n  size_t i = tupled_args;\n  return (uint32_t)i;\n}\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), u32> for array::mk_incr::closure<K>}\n*/\n/**\nA monomorphic instance of array.mk_incr.call_once_b7\nwith const generics\n- K= 10\n*/\nuint32_t array_mk_incr_call_once_b7_55(size_t _)\n{\n  /* original Rust expression is not an lvalue in C */\n  void *lvalue = (void *)0U;\n  return array_mk_incr_call_mut_e2_55(&lvalue, _);\n}\n\n/**\nA monomorphic instance of array.mk_incr\nwith const generics\n- K= 10\n*/\nEurydice_arr_6c array_mk_incr_55(void)\n{\n  Eurydice_arr_6c arr_struct;\n  KRML_MAYBE_FOR10(i,\n    (size_t)0U,\n    (size_t)10U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = array_mk_incr_call_mut_e2_55(&lvalue, i););\n  return arr_struct;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), u32> for array::mk_incr2::closure<0, K>}\n*/\n/**\nA monomorphic instance of array.mk_incr2.call_mut_eb\nwith const generics\n- K= 10\n*/\nuint32_t array_mk_incr2_call_mut_eb_55(const uint32_t **_, size_t tupled_args)\n{\n  size_t i = tupled_args;\n  return (uint32_t)i + _[0U][0U];\n}\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), u32> for array::mk_incr2::closure<0, K>}\n*/\n/**\nA monomorphic instance of array.mk_incr2.call_once_ad\nwith const generics\n- K= 10\n*/\nuint32_t array_mk_incr2_call_once_ad_55(const uint32_t *_, size_t _0)\n{\n  return array_mk_incr2_call_mut_eb_55(&_, _0);\n}\n\n/**\nA monomorphic instance of array.mk_incr2\nwith const generics\n- K= 10\n*/\nEurydice_arr_6c array_mk_incr2_55(void)\n{\n  uint32_t j = 1U;\n  Eurydice_arr_6c arr_struct;\n  KRML_MAYBE_FOR10(i,\n    (size_t)0U,\n    (size_t)10U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    const uint32_t *lvalue = &j;\n    arr_struct.data[i] = array_mk_incr2_call_mut_eb_55(&lvalue, i););\n  return arr_struct;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(u32), u16> for array::plus_one::closure<K>}\n*/\n/**\nA monomorphic instance of array.plus_one.call_mut_8d\nwith const generics\n- K= 1\n*/\nuint16_t array_plus_one_call_mut_8d_6c(void **_, uint32_t tupled_args)\n{\n  uint32_t x = tupled_args;\n  return (uint16_t)(x + 1U);\n}\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(u32), u16> for array::plus_one::closure<K>}\n*/\n/**\nA monomorphic instance of array.plus_one.call_once_36\nwith const generics\n- K= 1\n*/\nuint16_t array_plus_one_call_once_36_6c(uint32_t _)\n{\n  /* original Rust expression is not an lvalue in C */\n  void *lvalue = (void *)0U;\n  return array_plus_one_call_mut_8d_6c(&lvalue, _);\n}\n\n/**\nA monomorphic instance of array.plus_one\nwith const generics\n- K= 1\n*/\nEurydice_arr_96 array_plus_one_6c(Eurydice_arr_d5 x)\n{\n  Eurydice_arr_96 arr_mapped_str;\n  {\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_mapped_str.data[0U] = array_plus_one_call_mut_8d_6c(&lvalue, x.data[0U]);\n  }\n  return arr_mapped_str;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), usize> for array::nested_from_fn::closure::closure<0, K>}\n*/\n/**\nA monomorphic instance of array.nested_from_fn.closure.call_mut_74\nwith const generics\n- K= 4\n*/\nsize_t array_nested_from_fn_closure_call_mut_74_23(const size_t **_, size_t tupled_args)\n{\n  size_t i = tupled_args;\n  return i + _[0U][0U];\n}\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), usize> for array::nested_from_fn::closure::closure<0, K>}\n*/\n/**\nA monomorphic instance of array.nested_from_fn.closure.call_once_4d\nwith const generics\n- K= 4\n*/\nsize_t array_nested_from_fn_closure_call_once_4d_23(const size_t *_, size_t _0)\n{\n  return array_nested_from_fn_closure_call_mut_74_23(&_, _0);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [usize; K]> for array::nested_from_fn::closure<K>}\n*/\n/**\nA monomorphic instance of array.nested_from_fn.call_mut_6c\nwith const generics\n- K= 4\n*/\nEurydice_arr_cc array_nested_from_fn_call_mut_6c_23(void **_, size_t tupled_args)\n{\n  size_t j = tupled_args;\n  Eurydice_arr_cc arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    const size_t *lvalue = &j;\n    arr_struct.data[i] = array_nested_from_fn_closure_call_mut_74_23(&lvalue, i););\n  return arr_struct;\n}\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), [usize; K]> for array::nested_from_fn::closure<K>}\n*/\n/**\nA monomorphic instance of array.nested_from_fn.call_once_d9\nwith const generics\n- K= 4\n*/\nEurydice_arr_cc array_nested_from_fn_call_once_d9_23(size_t _)\n{\n  /* original Rust expression is not an lvalue in C */\n  void *lvalue = (void *)0U;\n  return array_nested_from_fn_call_mut_6c_23(&lvalue, _);\n}\n\n/**\nA monomorphic instance of array.nested_from_fn\nwith const generics\n- K= 4\n*/\nEurydice_arr_89 array_nested_from_fn_23(void)\n{\n  Eurydice_arr_89 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = array_nested_from_fn_call_mut_6c_23(&lvalue, i););\n  return arr_struct;\n}\n\n/**\nA monomorphic instance of array.const_eq\nwith const generics\n- K= 2\n*/\nbool array_const_eq_af(Eurydice_arr_a0 x, Eurydice_arr_a0 y)\n{\n  return Eurydice_array_eq((size_t)2U, &x, &y, uint32_t);\n}\n\ntypedef struct const_uint32_t__x2_s\n{\n  const uint32_t *fst;\n  const uint32_t *snd;\n}\nconst_uint32_t__x2;\n\ntypedef struct const_uint16_t__x2_s\n{\n  const uint16_t *fst;\n  const uint16_t *snd;\n}\nconst_uint16_t__x2;\n\ntypedef struct const_size_t__x2_s\n{\n  const size_t *fst;\n  const size_t *snd;\n}\nconst_size_t__x2;\n\ntypedef struct const_bool__x2_s\n{\n  const bool *fst;\n  const bool *snd;\n}\nconst_bool__x2;\n\nvoid array_main(void)\n{\n  /* XXX1 */\n  array_Foo uu____0 = array_mk_foo2();\n  Eurydice_arr_a0 x = uu____0.x;\n  Eurydice_arr_a0 y = uu____0.y;\n  uint32_t unsigned0 = 0U;\n  array_mut_array(x);\n  /* XXX2 */\n  array_mut_foo((KRML_CLITERAL(array_Foo){ .x = x, .y = y }));\n  /* XXX3\n    XXX4 */\n  const_uint32_t__x2 uu____1 = { .fst = x.data, .snd = &unsigned0 };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n  Eurydice_arr_6c a = array_mk_incr_55();\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue0 = 9U;\n  const_uint32_t__x2 uu____2 = { .fst = &a.data[9U], .snd = &lvalue0 };\n  EURYDICE_ASSERT(uu____2.fst[0U] == uu____2.snd[0U], \"panic!\");\n  Eurydice_arr_6c a0 = array_mk_incr2_55();\n  uint32_t expected = 10U;\n  const_uint32_t__x2 uu____3 = { .fst = &a0.data[9U], .snd = &expected };\n  EURYDICE_ASSERT(uu____3.fst[0U] == uu____3.snd[0U], \"panic!\");\n  Eurydice_arr_96 a1 = array_plus_one_6c((KRML_CLITERAL(Eurydice_arr_d5){ .data = { 0U } }));\n  /* original Rust expression is not an lvalue in C */\n  uint16_t lvalue1 = 1U;\n  const_uint16_t__x2 uu____4 = { .fst = a1.data, .snd = &lvalue1 };\n  EURYDICE_ASSERT(uu____4.fst[0U] == uu____4.snd[0U], \"panic!\");\n  /* XXX5 */\n  Eurydice_arr_89 a2 = array_nested_from_fn_23();\n  /* original Rust expression is not an lvalue in C */\n  size_t lvalue2 = (size_t)6U;\n  const_size_t__x2 uu____5 = { .fst = &a2.data[3U].data[3U], .snd = &lvalue2 };\n  EURYDICE_ASSERT(uu____5.fst[0U] == uu____5.snd[0U], \"panic!\");\n  /* XXX6 */\n  Eurydice_arr_a0 x0;\n  uint32_t repeat_expression0[2U];\n  for (uint32_t _i = 0U; _i < (size_t)2U; ++_i)\n    repeat_expression0[_i] = 2U;\n  memcpy(x0.data, repeat_expression0, (size_t)2U * sizeof (uint32_t));\n  Eurydice_arr_a0 y0;\n  uint32_t repeat_expression[2U];\n  for (uint32_t _i = 0U; _i < (size_t)2U; ++_i)\n    repeat_expression[_i] = 2U;\n  memcpy(y0.data, repeat_expression, (size_t)2U * sizeof (uint32_t));\n  bool b = array_const_eq_af(x0, y0);\n  /* original Rust expression is not an lvalue in C */\n  bool lvalue = true;\n  const_bool__x2 uu____6 = { .fst = &b, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____6.fst[0U] == uu____6.snd[0U], \"panic!\");\n}\n\nvoid array_references(void)\n{\n  array_init();\n}\n\n"
  },
  {
    "path": "out/test-array/array.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef array_H\n#define array_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_a0_s { uint32_t data[2U]; } Eurydice_arr_a0;\n\ntypedef struct array_Foo_s\n{\n  Eurydice_arr_a0 x;\n  Eurydice_arr_a0 y;\n}\narray_Foo;\n\nextern bool\ncore_cmp_impls__core__cmp__PartialEq_u32__for_u32__eq(const uint32_t *x0, const uint32_t *x1);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $32size_t\n*/\ntypedef struct Eurydice_arr_ec_s { uint8_t data[32U]; } Eurydice_arr_ec;\n\n/**\nA monomorphic instance of core.ops.range.Range\nwith types size_t\n\n*/\ntypedef struct core_ops_range_Range_87_s\n{\n  size_t start;\n  size_t end;\n}\ncore_ops_range_Range_87;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types Eurydice_arr_ec, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_60_s\n{\n  const Eurydice_arr_ec *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_60;\n\nuint8_t array_fun(Eurydice_dst_ref_shared_60 x);\n\nEurydice_arr_ec array_init(void);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\narray_Foo array_mk_foo(void);\n\narray_Foo array_mk_foo2(void);\n\nvoid array_mut_array(Eurydice_arr_a0 x);\n\nvoid array_mut_foo(array_Foo f);\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), u32> for array::mk_incr::closure<K>}\n*/\n/**\nA monomorphic instance of array.mk_incr.call_mut_e2\nwith const generics\n- K= 10\n*/\nuint32_t array_mk_incr_call_mut_e2_55(void **_, size_t tupled_args);\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), u32> for array::mk_incr::closure<K>}\n*/\n/**\nA monomorphic instance of array.mk_incr.call_once_b7\nwith const generics\n- K= 10\n*/\nuint32_t array_mk_incr_call_once_b7_55(size_t _);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $10size_t\n*/\ntypedef struct Eurydice_arr_6c_s { uint32_t data[10U]; } Eurydice_arr_6c;\n\n/**\nA monomorphic instance of array.mk_incr\nwith const generics\n- K= 10\n*/\nEurydice_arr_6c array_mk_incr_55(void);\n\n/**\nA monomorphic instance of array.mk_incr2.closure\nwith const generics\n- $10size_t\n*/\ntypedef const uint32_t *array_mk_incr2_closure_e4;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), u32> for array::mk_incr2::closure<0, K>}\n*/\n/**\nA monomorphic instance of array.mk_incr2.call_mut_eb\nwith const generics\n- K= 10\n*/\nuint32_t array_mk_incr2_call_mut_eb_55(const uint32_t **_, size_t tupled_args);\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), u32> for array::mk_incr2::closure<0, K>}\n*/\n/**\nA monomorphic instance of array.mk_incr2.call_once_ad\nwith const generics\n- K= 10\n*/\nuint32_t array_mk_incr2_call_once_ad_55(const uint32_t *_, size_t _0);\n\n/**\nA monomorphic instance of array.mk_incr2\nwith const generics\n- K= 10\n*/\nEurydice_arr_6c array_mk_incr2_55(void);\n\n/**\nThis function found in impl {core::ops::function::FnMut<(u32), u16> for array::plus_one::closure<K>}\n*/\n/**\nA monomorphic instance of array.plus_one.call_mut_8d\nwith const generics\n- K= 1\n*/\nuint16_t array_plus_one_call_mut_8d_6c(void **_, uint32_t tupled_args);\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(u32), u16> for array::plus_one::closure<K>}\n*/\n/**\nA monomorphic instance of array.plus_one.call_once_36\nwith const generics\n- K= 1\n*/\nuint16_t array_plus_one_call_once_36_6c(uint32_t _);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint16_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_96_s { uint16_t data[1U]; } Eurydice_arr_96;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_d5_s { uint32_t data[1U]; } Eurydice_arr_d5;\n\n/**\nA monomorphic instance of array.plus_one\nwith const generics\n- K= 1\n*/\nEurydice_arr_96 array_plus_one_6c(Eurydice_arr_d5 x);\n\n/**\nA monomorphic instance of array.nested_from_fn.closure.closure\nwith const generics\n- $4size_t\n*/\ntypedef const size_t *array_nested_from_fn_closure_closure_34;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), usize> for array::nested_from_fn::closure::closure<0, K>}\n*/\n/**\nA monomorphic instance of array.nested_from_fn.closure.call_mut_74\nwith const generics\n- K= 4\n*/\nsize_t array_nested_from_fn_closure_call_mut_74_23(const size_t **_, size_t tupled_args);\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), usize> for array::nested_from_fn::closure::closure<0, K>}\n*/\n/**\nA monomorphic instance of array.nested_from_fn.closure.call_once_4d\nwith const generics\n- K= 4\n*/\nsize_t array_nested_from_fn_closure_call_once_4d_23(const size_t *_, size_t _0);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_cc_s { size_t data[4U]; } Eurydice_arr_cc;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [usize; K]> for array::nested_from_fn::closure<K>}\n*/\n/**\nA monomorphic instance of array.nested_from_fn.call_mut_6c\nwith const generics\n- K= 4\n*/\nEurydice_arr_cc array_nested_from_fn_call_mut_6c_23(void **_, size_t tupled_args);\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), [usize; K]> for array::nested_from_fn::closure<K>}\n*/\n/**\nA monomorphic instance of array.nested_from_fn.call_once_d9\nwith const generics\n- K= 4\n*/\nEurydice_arr_cc array_nested_from_fn_call_once_d9_23(size_t _);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_cc\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_89_s { Eurydice_arr_cc data[4U]; } Eurydice_arr_89;\n\n/**\nA monomorphic instance of array.nested_from_fn\nwith const generics\n- K= 4\n*/\nEurydice_arr_89 array_nested_from_fn_23(void);\n\n/**\nA monomorphic instance of array.const_eq\nwith const generics\n- K= 2\n*/\nbool array_const_eq_af(Eurydice_arr_a0 x, Eurydice_arr_a0 y);\n\nvoid array_main(void);\n\nvoid array_references(void);\n\n#define array_mk_incr_closure__core__marker__Destruct_for_array__mk_incr__closure_K___drop_in_place(x_0, x_1, _ret_t) array_mk_incr_closure__core__marker__Destruct_for_array__mk_incr__closure_K___drop_in_place_(x_0, x_1)\n\nextern void\narray_mk_incr_closure__core__marker__Destruct_for_array__mk_incr__closure_K___drop_in_place_(\n  size_t x0,\n  void **x1\n);\n\n#define array_nested_from_fn_closure__core__marker__Destruct_for_array__nested_from_fn__closure_K___drop_in_place(x_0, x_1, _ret_t) array_nested_from_fn_closure__core__marker__Destruct_for_array__nested_from_fn__closure_K___drop_in_place_(x_0, x_1)\n\nextern void\narray_nested_from_fn_closure__core__marker__Destruct_for_array__nested_from_fn__closure_K___drop_in_place_(\n  size_t x0,\n  void **x1\n);\n\n#define array_plus_one_closure__core__marker__Destruct_for_array__plus_one__closure_K___drop_in_place(x_0, x_1, _ret_t) array_plus_one_closure__core__marker__Destruct_for_array__plus_one__closure_K___drop_in_place_(x_0, x_1)\n\nextern void\narray_plus_one_closure__core__marker__Destruct_for_array__plus_one__closure_K___drop_in_place_(\n  size_t x0,\n  void **x1\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define array_H_DEFINED\n#endif /* array_H */\n"
  },
  {
    "path": "out/test-array2d/array2d.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"array2d.h\"\n\nbool array2d_f(Eurydice_arr_ac x)\n{\n  x.data[0U] = (KRML_CLITERAL(Eurydice_arr_a0){ .data = { 1U, 2U } });\n  Eurydice_arr_ac\n  y =\n    {\n      .data = {\n        { .data = { 1U, 2U } },\n        { .data = { 3U, 4U } },\n        { .data = { 1U, 2U } },\n        { .data = { 3U, 4U } }\n      }\n    };\n  return Eurydice_array_eq((size_t)4U, &x, &y, Eurydice_arr_a0);\n}\n\ntypedef struct const_bool__x2_s\n{\n  const bool *fst;\n  const bool *snd;\n}\nconst_bool__x2;\n\nvoid array2d_main(void)\n{\n  Eurydice_arr_ac y;\n  Eurydice_arr_a0 repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] = (KRML_CLITERAL(Eurydice_arr_a0){ .data = { 1U, 2U } }););\n  memcpy(y.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_a0));\n  y.data[1U] = (KRML_CLITERAL(Eurydice_arr_a0){ .data = { 3U, 4U } });\n  y.data[3U] = (KRML_CLITERAL(Eurydice_arr_a0){ .data = { 3U, 4U } });\n  bool actual = array2d_f(y);\n  bool expected = true;\n  const_bool__x2 uu____0 = { .fst = &actual, .snd = &expected };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-array2d/array2d.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef array2d_H\n#define array2d_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern bool\ncore_cmp_impls__core__cmp__PartialEq_u32__for_u32__eq(const uint32_t *x0, const uint32_t *x1);\n\nextern bool\ncore_cmp_impls__core__cmp__PartialEq_u32__for_u32__ne(const uint32_t *x0, const uint32_t *x1);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_a0_s { uint32_t data[2U]; } Eurydice_arr_a0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_a0\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_ac_s { Eurydice_arr_a0 data[4U]; } Eurydice_arr_ac;\n\nbool array2d_f(Eurydice_arr_ac x);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nvoid array2d_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define array2d_H_DEFINED\n#endif /* array2d_H */\n"
  },
  {
    "path": "out/test-castunsize/castunsize.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"castunsize.h\"\n\ntypedef struct const_uint32_t__x2_s\n{\n  const uint32_t *fst;\n  const uint32_t *snd;\n}\nconst_uint32_t__x2;\n\nvoid castunsize_main1(void)\n{\n  castunsize_S_e9 x = { .foo = 0U, .my_data = { .data = { 0U } } };\n  Eurydice_dst_ref_shared_8b x0 = { .ptr = (const castunsize_T *)&x, .meta = (size_t)4U };\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2\n  uu____0 = { .fst = &((const uint32_t *)x0.ptr->my_data)[3U], .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint32_t\nwith const generics\n- N= 4\n*/\nstatic Eurydice_dst_ref_mut_0c array_to_slice_mut_32(Eurydice_arr_e5 *a)\n{\n  Eurydice_dst_ref_mut_0c lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\nvoid castunsize_main3(void)\n{\n  Eurydice_dst_ref_mut_0c\n  x =\n    array_to_slice_mut_32(Eurydice_box_new((KRML_CLITERAL(Eurydice_arr_e5){ .data = { 0U } }),\n        Eurydice_arr_e5,\n        Eurydice_arr_e5 *));\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2 uu____0 = { .fst = &x.ptr[3U], .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n/**\nA monomorphic instance of castunsize.main2\nwith const generics\n- K= 5\n*/\nvoid castunsize_main2_a5(void)\n{\n  castunsize_S_b9 x = { .foo = 0U, .my_data = { .data = { 0U } } };\n  Eurydice_dst_ref_shared_8b x0 = { .ptr = (const castunsize_T *)&x, .meta = (size_t)5U };\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2\n  uu____0 = { .fst = &((const uint32_t *)x0.ptr->my_data)[3U], .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint32_t\nwith const generics\n- N= 5\n*/\nstatic Eurydice_dst_ref_mut_0c array_to_slice_mut_d0(Eurydice_arr_fb *a)\n{\n  Eurydice_dst_ref_mut_0c lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)5U;\n  return lit;\n}\n\n/**\nA monomorphic instance of castunsize.main4\nwith const generics\n- K= 5\n*/\nvoid castunsize_main4_a5(void)\n{\n  Eurydice_dst_ref_mut_0c\n  x =\n    array_to_slice_mut_d0(Eurydice_box_new((KRML_CLITERAL(Eurydice_arr_fb){ .data = { 0U } }),\n        Eurydice_arr_fb,\n        Eurydice_arr_fb *));\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2 uu____0 = { .fst = &x.ptr[3U], .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\nvoid castunsize_main(void)\n{\n  castunsize_main1();\n  castunsize_main2_a5();\n  castunsize_main3();\n  castunsize_main4_a5();\n}\n\n"
  },
  {
    "path": "out/test-castunsize/castunsize.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef castunsize_H\n#define castunsize_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\ntypedef struct castunsize_T_s\n{\n  uint32_t foo;\n  uint32_t my_data[];\n}\ncastunsize_T;\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_e5_s { uint32_t data[4U]; } Eurydice_arr_e5;\n\n/**\nA monomorphic instance of castunsize.S\nwith types Eurydice_arr_e5\n\n*/\ntypedef struct castunsize_S_e9_s\n{\n  uint32_t foo;\n  Eurydice_arr_e5 my_data;\n}\ncastunsize_S_e9;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types castunsize_T, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_8b_s\n{\n  const castunsize_T *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_8b;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types uint32_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_0c_s\n{\n  const uint32_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_0c;\n\nvoid castunsize_main1(void);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types uint32_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_0c_s\n{\n  uint32_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_0c;\n\nvoid castunsize_main3(void);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $5size_t\n*/\ntypedef struct Eurydice_arr_fb_s { uint32_t data[5U]; } Eurydice_arr_fb;\n\n/**\nA monomorphic instance of castunsize.S\nwith types Eurydice_arr_fb\n\n*/\ntypedef struct castunsize_S_b9_s\n{\n  uint32_t foo;\n  Eurydice_arr_fb my_data;\n}\ncastunsize_S_b9;\n\n/**\nA monomorphic instance of castunsize.main2\nwith const generics\n- K= 5\n*/\nvoid castunsize_main2_a5(void);\n\n/**\nA monomorphic instance of castunsize.main4\nwith const generics\n- K= 5\n*/\nvoid castunsize_main4_a5(void);\n\nvoid castunsize_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define castunsize_H_DEFINED\n#endif /* castunsize_H */\n"
  },
  {
    "path": "out/test-closure/closure.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"closure.h\"\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), usize> for closure::f::closure::closure<0, 1>}\n*/\nsize_t closure_f_closure_call_mut_8a(closure_f_closure_closure *_, size_t tupled_args)\n{\n  size_t j = tupled_args;\n  return _->fst->data[0U] + _->snd[0U] + j;\n}\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), usize> for closure::f::closure::closure<0, 1>}\n*/\nsize_t closure_f_closure_call_once_b7(closure_f_closure_closure _, size_t _0)\n{\n  return closure_f_closure_call_mut_8a(&_, _0);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [usize; 1usize]> for closure::f::closure<0>}\n*/\nEurydice_arr_58 closure_f_call_mut_82(const Eurydice_arr_58 **_, size_t tupled_args)\n{\n  size_t i0 = tupled_args;\n  Eurydice_arr_58 arr_struct;\n  {\n    /* original Rust expression is not an lvalue in C */\n    closure_f_closure_closure lvalue = { .fst = _[0U], .snd = &i0 };\n    arr_struct.data[0U] = closure_f_closure_call_mut_8a(&lvalue, (size_t)0U);\n  }\n  return arr_struct;\n}\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), [usize; 1usize]> for closure::f::closure<0>}\n*/\nEurydice_arr_58 closure_f_call_once_86(const Eurydice_arr_58 *_, size_t _0)\n{\n  return closure_f_call_mut_82(&_, _0);\n}\n\nEurydice_arr_2d closure_f(void)\n{\n  Eurydice_arr_58 s = { .data = { 0U } };\n  Eurydice_arr_2d arr_struct;\n  {\n    /* original Rust expression is not an lvalue in C */\n    const Eurydice_arr_58 *lvalue = &s;\n    arr_struct.data[0U] = closure_f_call_mut_82(&lvalue, (size_t)0U);\n  }\n  Eurydice_arr_2d a = arr_struct;\n  return a;\n}\n\ntypedef struct const_size_t__x2_s\n{\n  const size_t *fst;\n  const size_t *snd;\n}\nconst_size_t__x2;\n\nvoid closure_main(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_2d lvalue = closure_f();\n  size_t actual = lvalue.data->data[0U];\n  size_t expected = (size_t)0U;\n  const_size_t__x2 uu____0 = { .fst = &actual, .snd = &expected };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-closure/closure.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef closure_H\n#define closure_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\ntypedef struct Eurydice_arr_58_s Eurydice_arr_58;\n\ntypedef const Eurydice_arr_58 *closure_f_closure;\n\ntypedef struct closure_f_closure_closure_s\n{\n  const Eurydice_arr_58 *fst;\n  const size_t *snd;\n}\nclosure_f_closure_closure;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_58_s { size_t data[1U]; } Eurydice_arr_58;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), usize> for closure::f::closure::closure<0, 1>}\n*/\nsize_t closure_f_closure_call_mut_8a(closure_f_closure_closure *_, size_t tupled_args);\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), usize> for closure::f::closure::closure<0, 1>}\n*/\nsize_t closure_f_closure_call_once_b7(closure_f_closure_closure _, size_t _0);\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [usize; 1usize]> for closure::f::closure<0>}\n*/\nEurydice_arr_58 closure_f_call_mut_82(const Eurydice_arr_58 **_, size_t tupled_args);\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), [usize; 1usize]> for closure::f::closure<0>}\n*/\nEurydice_arr_58 closure_f_call_once_86(const Eurydice_arr_58 *_, size_t _0);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_58\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_2d_s { Eurydice_arr_58 data[1U]; } Eurydice_arr_2d;\n\nEurydice_arr_2d closure_f(void);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nvoid closure_main(void);\n\nextern void\nclosure_f_closure_closure__core__marker__Destruct_for_closure__f__closure__closure_0__1___drop_in_place(\n  closure_f_closure_closure *x0\n);\n\nextern void\nclosure_f_closure__core__marker__Destruct_for_closure__f__closure_0___drop_in_place(\n  const Eurydice_arr_58 **x0\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define closure_H_DEFINED\n#endif /* closure_H */\n"
  },
  {
    "path": "out/test-closure_fn_cast/closure_fn_cast.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"closure_fn_cast.h\"\n\n/**\nThis function found in impl {core::ops::function::Fn<(i32), i32> for closure_fn_cast::main::closure}\n*/\nint32_t closure_fn_cast_main_call_fd(void *const *_, int32_t tupled_args)\n{\n  int32_t x = tupled_args;\n  return x + 42;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(i32), i32> for closure_fn_cast::main::closure}\n*/\nint32_t closure_fn_cast_main_call_mut_68(void **state, int32_t args)\n{\n  return closure_fn_cast_main_call_fd(state, args);\n}\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(i32), i32> for closure_fn_cast::main::closure}\n*/\nint32_t closure_fn_cast_main_call_once_fd(int32_t _)\n{\n  /* original Rust expression is not an lvalue in C */\n  void *lvalue = (void *)0U;\n  return closure_fn_cast_main_call_mut_68(&lvalue, _);\n}\n\nint32_t closure_fn_cast_main_closure_as_fn(int32_t arg1)\n{\n  int32_t args = arg1;\n  void *state = (void *)0U;\n  return closure_fn_cast_main_call_once_fd(args);\n}\n\nvoid closure_fn_cast_main(void)\n{\n  int32_t (*f)(int32_t x0) = closure_fn_cast_main_closure_as_fn;\n  KRML_HOST_IGNORE(f(1));\n}\n\n"
  },
  {
    "path": "out/test-closure_fn_cast/closure_fn_cast.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef closure_fn_cast_H\n#define closure_fn_cast_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nThis function found in impl {core::ops::function::Fn<(i32), i32> for closure_fn_cast::main::closure}\n*/\nint32_t closure_fn_cast_main_call_fd(void *const *_, int32_t tupled_args);\n\n/**\nThis function found in impl {core::ops::function::FnMut<(i32), i32> for closure_fn_cast::main::closure}\n*/\nint32_t closure_fn_cast_main_call_mut_68(void **state, int32_t args);\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(i32), i32> for closure_fn_cast::main::closure}\n*/\nint32_t closure_fn_cast_main_call_once_fd(int32_t _);\n\nint32_t closure_fn_cast_main_closure_as_fn(int32_t arg1);\n\nvoid closure_fn_cast_main(void);\n\nextern void\nclosure_fn_cast_main_closure__core__marker__Destruct_for_closure_fn_cast__main__closure__drop_in_place(\n  void **x0\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define closure_fn_cast_H_DEFINED\n#endif /* closure_fn_cast_H */\n"
  },
  {
    "path": "out/test-collision/collision.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"collision.h\"\n\nint32_t collision_collision(collision_Either a, collision_Direction b)\n{\n  int32_t x;\n  if (a.tag == collision_Left0)\n  {\n    x = 1;\n  }\n  else\n  {\n    x = 2;\n  }\n  int32_t y;\n  if (b.tag == collision_Left)\n  {\n    y = 3;\n  }\n  else if (b.tag == collision_Middle)\n  {\n    y = 0;\n  }\n  else\n  {\n    y = 4;\n  }\n  return x + y;\n}\n\nvoid collision_main(void)\n{\n  EURYDICE_ASSERT(collision_collision((\n        KRML_CLITERAL(collision_Either){ .tag = collision_Left0, .val = { .case_Left = 10 } }\n      ),\n      (KRML_CLITERAL(collision_Direction){ .tag = collision_Right, .val = { .case_Right = 20ULL } }))\n    > 0,\n    \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-collision/collision.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef collision_H\n#define collision_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define collision_Left 0\n#define collision_Middle 1\n#define collision_Right 2\n\ntypedef uint8_t collision_Direction_tags;\n\ntypedef struct collision_Direction_s\n{\n  collision_Direction_tags tag;\n  union {\n    uint64_t case_Left;\n    uint64_t case_Right;\n  }\n  val;\n}\ncollision_Direction;\n\n#define collision_Left0 0\n#define collision_Right0 1\n\ntypedef uint8_t collision_Either_tags;\n\ntypedef struct collision_Either_s\n{\n  collision_Either_tags tag;\n  union {\n    int32_t case_Left;\n    bool case_Right;\n  }\n  val;\n}\ncollision_Either;\n\nint32_t collision_collision(collision_Either a, collision_Direction b);\n\nvoid collision_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define collision_H_DEFINED\n#endif /* collision_H */\n"
  },
  {
    "path": "out/test-const_generics/const_generics.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"const_generics.h\"\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 8\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_to_mut_21(Eurydice_array_u8x8 *a, size_t r)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 4\n*/\nstatic Eurydice_borrow_slice_u8 array_to_slice_shared_98(const Eurydice_array_u8x4 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 8\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_from_mut_5f(Eurydice_array_u8x8 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)8U - r });\n}\n\n/**\nA monomorphic instance of const_generics.serialize\nwith const generics\n- OUT_LEN= 8\n*/\nEurydice_array_u8x8 const_generics_serialize_70(Eurydice_dst_ref_shared_0c re)\n{\n  Eurydice_array_u8x8 out = { .data = { 0U } };\n  Eurydice_mut_borrow_slice_u8 uu____0 = array_to_subslice_to_mut_21(&out, (size_t)4U);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x4 lvalue0 = core_num__u32__to_be_bytes(re.ptr[0U]);\n  Eurydice_slice_copy(uu____0, array_to_slice_shared_98(&lvalue0), uint8_t);\n  Eurydice_mut_borrow_slice_u8 uu____1 = array_to_subslice_from_mut_5f(&out, (size_t)4U);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x4 lvalue = core_num__u32__to_be_bytes(re.ptr[1U]);\n  Eurydice_slice_copy(uu____1, array_to_slice_shared_98(&lvalue), uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint32_t\nwith const generics\n- N= 2\n*/\nstatic Eurydice_dst_ref_shared_0c array_to_slice_shared_49(const Eurydice_arr_a0 *a)\n{\n  Eurydice_dst_ref_shared_0c lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2U;\n  return lit;\n}\n\nvoid const_generics_main(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_a0 lvalue = { .data = { 1U, 2U } };\n  Eurydice_array_u8x8 s = const_generics_serialize_70(array_to_slice_shared_49(&lvalue));\n  EURYDICE_ASSERT(s.data[3U] == 1U, \"panic!\");\n  EURYDICE_ASSERT(s.data[7U] == 2U, \"panic!\");\n}\n\n/**\nA monomorphic instance of const_generics.mk_pairs\nwith types uint32_t, uint64_t\nwith const generics\n- N= 2\n- M= 4\n*/\nconst_generics_Pair_30 const_generics_mk_pairs_67(uint32_t x, uint64_t y)\n{\n  Eurydice_arr_a0 a1;\n  uint32_t repeat_expression0[2U];\n  KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression0[i] = x;);\n  memcpy(a1.data, repeat_expression0, (size_t)2U * sizeof (uint32_t));\n  Eurydice_arr_e4 a2;\n  uint64_t repeat_expression[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = y;);\n  memcpy(a2.data, repeat_expression, (size_t)4U * sizeof (uint64_t));\n  const_generics_Pair_67 p1 = { .left = a1, .right = a2 };\n  const_generics_Pair_54 p2 = { .left = a2, .right = a1 };\n  return (KRML_CLITERAL(const_generics_Pair_30){ .left = p1.left, .right = p2.right });\n}\n\ntypedef struct const_uint32_t__x2_s\n{\n  const uint32_t *fst;\n  const uint32_t *snd;\n}\nconst_uint32_t__x2;\n\nvoid const_generics_main1(void)\n{\n  const_generics_Pair_30 uu____0 = const_generics_mk_pairs_67(0U, 0ULL);\n  Eurydice_arr_a0 left = uu____0.left;\n  Eurydice_arr_a0 right = uu____0.right;\n  uint32_t expected = 0U;\n  const_uint32_t__x2 uu____1 = { .fst = left.data, .snd = &expected };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n  const_uint32_t__x2 uu____2 = { .fst = &left.data[1U], .snd = &expected };\n  EURYDICE_ASSERT(uu____2.fst[0U] == uu____2.snd[0U], \"panic!\");\n  const_uint32_t__x2 uu____3 = { .fst = right.data, .snd = &expected };\n  EURYDICE_ASSERT(uu____3.fst[0U] == uu____3.snd[0U], \"panic!\");\n  const_uint32_t__x2 uu____4 = { .fst = &right.data[1U], .snd = &expected };\n  EURYDICE_ASSERT(uu____4.fst[0U] == uu____4.snd[0U], \"panic!\");\n}\n\n/**\nA monomorphic instance of const_generics.f\nwith const generics\n- FOO= 1\n- BAR= 2\n*/\nbool const_generics_f_06(uint32_t x, size_t y)\n{\n  Eurydice_arr_d5 arr1;\n  uint32_t repeat_expression0[1U];\n  {\n    repeat_expression0[0U] = x;\n  }\n  memcpy(arr1.data, repeat_expression0, (size_t)1U * sizeof (uint32_t));\n  Eurydice_arr_58 arr2;\n  size_t repeat_expression[1U];\n  {\n    repeat_expression[0U] = y;\n  }\n  memcpy(arr2.data, repeat_expression, (size_t)1U * sizeof (size_t));\n  bool uu____0;\n  if (arr1.data[0U] == 2U)\n  {\n    uu____0 = arr2.data[0U] == (size_t)1U;\n  }\n  else\n  {\n    uu____0 = false;\n  }\n  return uu____0;\n}\n\n/**\nA monomorphic instance of const_generics.f\nwith const generics\n- FOO= 3\n- BAR= 4\n*/\nbool const_generics_f_16(uint32_t x, size_t y)\n{\n  Eurydice_arr_a5 arr1;\n  uint32_t repeat_expression0[3U];\n  KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression0[i] = x;);\n  memcpy(arr1.data, repeat_expression0, (size_t)3U * sizeof (uint32_t));\n  Eurydice_arr_eb arr2;\n  size_t repeat_expression[3U];\n  KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression[i] = y;);\n  memcpy(arr2.data, repeat_expression, (size_t)3U * sizeof (size_t));\n  bool uu____0;\n  if (arr1.data[0U] == 4U)\n  {\n    uu____0 = arr2.data[0U] == (size_t)3U;\n  }\n  else\n  {\n    uu____0 = false;\n  }\n  return uu____0;\n}\n\n/**\nA monomorphic instance of const_generics.g\nwith const generics\n- BAR= 3\n- FOO= 4\n*/\nbool const_generics_g_16(uint32_t x, size_t y)\n{\n  bool uu____0;\n  if (const_generics_f_16(x, y))\n  {\n    if (x == 4U)\n    {\n      uu____0 = y == (size_t)3U;\n    }\n    else\n    {\n      uu____0 = false;\n    }\n  }\n  else\n  {\n    uu____0 = false;\n  }\n  return uu____0;\n}\n\ntypedef struct const_bool__x2_s\n{\n  const bool *fst;\n  const bool *snd;\n}\nconst_bool__x2;\n\nvoid const_generics_main3(void)\n{\n  bool x;\n  if (const_generics_f_06(0U, (size_t)0U))\n  {\n    x = const_generics_g_16(0U, (size_t)0U);\n  }\n  else\n  {\n    x = false;\n  }\n  bool expected = false;\n  const_bool__x2 uu____0 = { .fst = &x, .snd = &expected };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-const_generics/const_generics.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef const_generics_H\n#define const_generics_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nstatic inline Eurydice_array_u8x4 core_num__u32__to_be_bytes(uint32_t x0);\n\n/**\nA monomorphic instance of core.ops.range.RangeTo\nwith types size_t\n\n*/\ntypedef size_t core_ops_range_RangeTo_87;\n\n/**\nA monomorphic instance of core.ops.range.RangeFrom\nwith types size_t\n\n*/\ntypedef size_t core_ops_range_RangeFrom_87;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types uint32_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_0c_s\n{\n  const uint32_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_0c;\n\n/**\nA monomorphic instance of const_generics.serialize\nwith const generics\n- OUT_LEN= 8\n*/\nEurydice_array_u8x8 const_generics_serialize_70(Eurydice_dst_ref_shared_0c re);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_a0_s { uint32_t data[2U]; } Eurydice_arr_a0;\n\nvoid const_generics_main(void);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n/**\nA monomorphic instance of const_generics.Pair\nwith types uint32_t, uint32_t\nwith const generics\n- $2size_t\n- $2size_t\n*/\ntypedef struct const_generics_Pair_30_s\n{\n  Eurydice_arr_a0 left;\n  Eurydice_arr_a0 right;\n}\nconst_generics_Pair_30;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint64_t\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_e4_s { uint64_t data[4U]; } Eurydice_arr_e4;\n\n/**\nA monomorphic instance of const_generics.Pair\nwith types uint32_t, uint64_t\nwith const generics\n- $2size_t\n- $4size_t\n*/\ntypedef struct const_generics_Pair_67_s\n{\n  Eurydice_arr_a0 left;\n  Eurydice_arr_e4 right;\n}\nconst_generics_Pair_67;\n\n/**\nA monomorphic instance of const_generics.Pair\nwith types uint64_t, uint32_t\nwith const generics\n- $4size_t\n- $2size_t\n*/\ntypedef struct const_generics_Pair_54_s\n{\n  Eurydice_arr_e4 left;\n  Eurydice_arr_a0 right;\n}\nconst_generics_Pair_54;\n\n/**\nA monomorphic instance of const_generics.mk_pairs\nwith types uint32_t, uint64_t\nwith const generics\n- N= 2\n- M= 4\n*/\nconst_generics_Pair_30 const_generics_mk_pairs_67(uint32_t x, uint64_t y);\n\nvoid const_generics_main1(void);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_d5_s { uint32_t data[1U]; } Eurydice_arr_d5;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_58_s { size_t data[1U]; } Eurydice_arr_58;\n\n/**\nA monomorphic instance of const_generics.f\nwith const generics\n- FOO= 1\n- BAR= 2\n*/\nbool const_generics_f_06(uint32_t x, size_t y);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_a5_s { uint32_t data[3U]; } Eurydice_arr_a5;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_eb_s { size_t data[3U]; } Eurydice_arr_eb;\n\n/**\nA monomorphic instance of const_generics.f\nwith const generics\n- FOO= 3\n- BAR= 4\n*/\nbool const_generics_f_16(uint32_t x, size_t y);\n\n/**\nA monomorphic instance of const_generics.g\nwith const generics\n- BAR= 3\n- FOO= 4\n*/\nbool const_generics_g_16(uint32_t x, size_t y);\n\nvoid const_generics_main3(void);\n\nextern uint32_t core_clone_impls__core__clone__Clone_for_u32__clone(const uint32_t *x0);\n\nextern uint64_t core_clone_impls__core__clone__Clone_for_u64__clone(const uint64_t *x0);\n\nextern uint8_t core_clone_impls__core__clone__Clone_for_u8__clone(const uint8_t *x0);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define const_generics_H_DEFINED\n#endif /* const_generics_H */\n"
  },
  {
    "path": "out/test-core_num/core_num.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"core_num.h\"\n\ntypedef struct const_uint32_t__x2_s\n{\n  const uint32_t *fst;\n  const uint32_t *snd;\n}\nconst_uint32_t__x2;\n\nvoid core_num_main(void)\n{\n  uint32_t x = CORE_NUM__U32__BITS;\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 32U;\n  const_uint32_t__x2 uu____0 = { .fst = &x, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-core_num/core_num.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef core_num_H\n#define core_num_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nstatic inline uint32_t core_num__u32__count_ones(uint32_t x0);\n\n#define CORE_NUM__U32__MAX (~0U)\n\n#define CORE_NUM__U32__BITS (core_num__u32__count_ones(CORE_NUM__U32__MAX))\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nvoid core_num_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define core_num_H_DEFINED\n#endif /* core_num_H */\n"
  },
  {
    "path": "out/test-dst/dst.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"dst.h\"\n\nEurydice_dst_ref_mut_2f dst_alloc(void)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_mut_2f){\n        .ptr = (dst_T *)Eurydice_box_new((\n            KRML_CLITERAL(dst_S_e9){ .foo = 0U, .my_data = { .data = { 0U } } }\n          ),\n          dst_S_e9,\n          dst_S_e9 *),\n        .meta = (size_t)4U\n      }\n    );\n}\n\nEurydice_dst_ref_mut_bb dst_alloc3(void)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_mut_bb){\n        .ptr = (dst_T3 *)Eurydice_box_new((\n            KRML_CLITERAL(dst_S_93){\n              .foo = 0U,\n              .my_data = {\n                .data = {\n                  { .data = { 0U } },\n                  { .data = { 0U } },\n                  { .data = { 0U } },\n                  { .data = { 0U } }\n                }\n              }\n            }\n          ),\n          dst_S_93,\n          dst_S_93 *),\n        .meta = (size_t)4U\n      }\n    );\n}\n\ntypedef struct const_uint32_t__x2_s\n{\n  const uint32_t *fst;\n  const uint32_t *snd;\n}\nconst_uint32_t__x2;\n\nvoid dst_check_regular_field(Eurydice_dst_ref_mut_2f x)\n{\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2 uu____0 = { .fst = &x.ptr->foo, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\nvoid dst_check_regular_field_ref(Eurydice_dst_ref_shared_2f x)\n{\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2 uu____0 = { .fst = &x.ptr->foo, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\nvoid dst_check_var_field(Eurydice_dst_ref_mut_2f x)\n{\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2\n  uu____0 = { .fst = &((const uint32_t *)x.ptr->my_data)[0U], .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\nvoid dst_check_var_field_ref(Eurydice_dst_ref_shared_2f x)\n{\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2\n  uu____0 = { .fst = &((const uint32_t *)x.ptr->my_data)[0U], .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\nvoid dst_check_var_field_ref3(Eurydice_dst_ref_shared_bb x)\n{\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2\n  uu____0 = { .fst = ((const Eurydice_arr_a5 *)x.ptr->my_data)->data, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\nvoid dst_main3(void)\n{\n  Eurydice_dst_ref_mut_bb x = dst_alloc3();\n  const Eurydice_dst_ref_mut_bb *uu____0 = &x;\n  dst_check_var_field_ref3((\n      KRML_CLITERAL(Eurydice_dst_ref_shared_bb){ .ptr = uu____0->ptr, .meta = uu____0->meta }\n    ));\n}\n\nEurydice_dst_ref_mut_b7 dst_mk(void)\n{\n  dst_T2_e9 x = { .header = (size_t)0U, .my_data = { .data = { 0U } } };\n  x.my_data.data[1U] = 2U;\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_mut_b7){\n        .ptr = (dst_T2_be *)Eurydice_box_new(x, dst_T2_e9, dst_T2_e9 *),\n        .meta = (size_t)4U\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint32_t\nwith const generics\n- N= 4\n*/\nstatic Eurydice_dst_ref_mut_0c array_to_slice_mut_32(Eurydice_arr_e5 *a)\n{\n  Eurydice_dst_ref_mut_0c lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\nvoid dst_main4(void)\n{\n  Eurydice_dst_ref_mut_0c\n  x =\n    array_to_slice_mut_32(Eurydice_box_new((KRML_CLITERAL(Eurydice_arr_e5){ .data = { 0U } }),\n        Eurydice_arr_e5,\n        Eurydice_arr_e5 *));\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2 uu____0 = { .fst = &x.ptr[3U], .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\nvoid dst_main(void)\n{\n  dst_check_regular_field(dst_alloc());\n  dst_check_var_field(dst_alloc());\n  dst_S_e9 x = { .foo = 0U, .my_data = { .data = { 0U } } };\n  Eurydice_dst_ref_shared_2f x0 = { .ptr = (const dst_T *)&x, .meta = (size_t)4U };\n  dst_check_regular_field_ref(x0);\n  dst_check_var_field_ref(x0);\n  dst_main3();\n  Eurydice_dst_ref_mut_b7 uu____0 = dst_mk();\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue0 = 0U;\n  const_uint32_t__x2\n  uu____1 = { .fst = &((const uint32_t *)uu____0.ptr->my_data)[0U], .snd = &lvalue0 };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n  Eurydice_dst_ref_mut_b7 uu____2 = dst_mk();\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 2U;\n  const_uint32_t__x2\n  uu____3 = { .fst = &((const uint32_t *)uu____2.ptr->my_data)[1U], .snd = &lvalue };\n  EURYDICE_ASSERT(uu____3.fst[0U] == uu____3.snd[0U], \"panic!\");\n  dst_main4();\n}\n\n"
  },
  {
    "path": "out/test-dst/dst.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef dst_H\n#define dst_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\ntypedef struct dst_T_s\n{\n  uint32_t foo;\n  uint32_t my_data[];\n}\ndst_T;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_a5_s { uint32_t data[3U]; } Eurydice_arr_a5;\n\ntypedef struct dst_T3_s\n{\n  uint32_t foo;\n  Eurydice_arr_a5 my_data[];\n}\ndst_T3;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types dst_T, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_2f_s\n{\n  dst_T *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_2f;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_e5_s { uint32_t data[4U]; } Eurydice_arr_e5;\n\n/**\nA monomorphic instance of dst.S\nwith types Eurydice_arr_e5\n\n*/\ntypedef struct dst_S_e9_s\n{\n  uint32_t foo;\n  Eurydice_arr_e5 my_data;\n}\ndst_S_e9;\n\nEurydice_dst_ref_mut_2f dst_alloc(void);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types dst_T3, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_bb_s\n{\n  dst_T3 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_bb;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_a5\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_53_s { Eurydice_arr_a5 data[4U]; } Eurydice_arr_53;\n\n/**\nA monomorphic instance of dst.S\nwith types Eurydice_arr_53\n\n*/\ntypedef struct dst_S_93_s\n{\n  uint32_t foo;\n  Eurydice_arr_53 my_data;\n}\ndst_S_93;\n\nEurydice_dst_ref_mut_bb dst_alloc3(void);\n\nvoid dst_check_regular_field(Eurydice_dst_ref_mut_2f x);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types dst_T, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_2f_s\n{\n  const dst_T *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_2f;\n\nvoid dst_check_regular_field_ref(Eurydice_dst_ref_shared_2f x);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types uint32_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_0c_s\n{\n  const uint32_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_0c;\n\nvoid dst_check_var_field(Eurydice_dst_ref_mut_2f x);\n\nvoid dst_check_var_field_ref(Eurydice_dst_ref_shared_2f x);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types dst_T3, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_bb_s\n{\n  const dst_T3 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_bb;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types Eurydice_arr_a5, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_d3_s\n{\n  const Eurydice_arr_a5 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_d3;\n\nvoid dst_check_var_field_ref3(Eurydice_dst_ref_shared_bb x);\n\nvoid dst_main3(void);\n\ntypedef struct dst_T2_be_s dst_T2_be;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types dst_T2_be, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_b7_s\n{\n  dst_T2_be *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_b7;\n\n/**\nA monomorphic instance of dst.T2\nwith types Eurydice_arr_e5\n\n*/\ntypedef struct dst_T2_e9_s\n{\n  size_t header;\n  Eurydice_arr_e5 my_data;\n}\ndst_T2_e9;\n\nEurydice_dst_ref_mut_b7 dst_mk(void);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types uint32_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_0c_s\n{\n  uint32_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_0c;\n\nvoid dst_main4(void);\n\n/**\nA monomorphic instance of dst.T2\nwith types Eurydice_derefed_slice uint32_t\n\n*/\ntypedef struct dst_T2_be_s\n{\n  size_t header;\n  uint32_t my_data[];\n}\ndst_T2_be;\n\nvoid dst_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define dst_H_DEFINED\n#endif /* dst_H */\n"
  },
  {
    "path": "out/test-dyn_trait_struct_type/dyn_trait_struct_type.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"dyn_trait_struct_type.h\"\n\nvoid dyn_trait_struct_type_main(void)\n{\n\n}\n\nvoid dyn_trait_struct_type_use_trait(Eurydice_dst_ref_shared_06 t)\n{\n  Eurydice_dst_ref_shared_06 uu____0 = t;\n  uu____0.meta->method_method(uu____0);\n}\n\n"
  },
  {
    "path": "out/test-dyn_trait_struct_type/dyn_trait_struct_type.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef dyn_trait_struct_type_H\n#define dyn_trait_struct_type_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\ntypedef struct core_marker_MetaSized__vtable__s core_marker_MetaSized__vtable_;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types Eurydice_c_void_t,  core_marker_MetaSized_{vtable}*\n\n*/\ntypedef struct Eurydice_dst_ref_mut_05_s\n{\n  Eurydice_c_void_t *ptr;\n  core_marker_MetaSized__vtable_ *meta;\n}\nEurydice_dst_ref_mut_05;\n\ntypedef struct core_marker_MetaSized__vtable__s\n{\n  size_t size;\n  size_t align;\n  void (*drop)(Eurydice_dst_ref_mut_05 x0);\n}\ncore_marker_MetaSized__vtable_;\n\nvoid dyn_trait_struct_type_main(void);\n\ntypedef struct dyn_trait_struct_type_Trait__vtable__s dyn_trait_struct_type_Trait__vtable_;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types Eurydice_c_void_t,  dyn_trait_struct_type_Trait_{vtable}*\n\n*/\ntypedef struct Eurydice_dst_ref_mut_06_s\n{\n  Eurydice_c_void_t *ptr;\n  dyn_trait_struct_type_Trait__vtable_ *meta;\n}\nEurydice_dst_ref_mut_06;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types Eurydice_c_void_t,  dyn_trait_struct_type_Trait_{vtable}*\n\n*/\ntypedef struct Eurydice_dst_ref_shared_06_s\n{\n  const Eurydice_c_void_t *ptr;\n  dyn_trait_struct_type_Trait__vtable_ *meta;\n}\nEurydice_dst_ref_shared_06;\n\ntypedef struct dyn_trait_struct_type_Trait__vtable__s\n{\n  size_t size;\n  size_t align;\n  void (*drop)(Eurydice_dst_ref_mut_06 x0);\n  void (*method_method)(Eurydice_dst_ref_shared_06 x0);\n  const core_marker_MetaSized__vtable_ *super_trait_0;\n}\ndyn_trait_struct_type_Trait__vtable_;\n\nvoid dyn_trait_struct_type_use_trait(Eurydice_dst_ref_shared_06 t);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define dyn_trait_struct_type_H_DEFINED\n#endif /* dyn_trait_struct_type_H */\n"
  },
  {
    "path": "out/test-floating_points/floating_points.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"floating_points.h\"\n\ntypedef struct const_float32_t__x2_s\n{\n  const float32_t *fst;\n  const float32_t *snd;\n}\nconst_float32_t__x2;\n\ntypedef struct const_float64_t__x2_s\n{\n  const float64_t *fst;\n  const float64_t *snd;\n}\nconst_float64_t__x2;\n\ntypedef struct const_size_t__x2_s\n{\n  const size_t *fst;\n  const size_t *snd;\n}\nconst_size_t__x2;\n\nvoid floating_points_main(void)\n{\n  float32_t f = (float32_t)1;\n  Eurydice_arr_fe arr;\n  float32_t repeat_expression0[100U];\n  for (size_t i = (size_t)0U; i < (size_t)100U; i++)\n  {\n    repeat_expression0[i] = f;\n  }\n  memcpy(arr.data, repeat_expression0, (size_t)100U * sizeof (float32_t));\n  float64_t d = (float64_t)1;\n  Eurydice_arr_9f arr2;\n  float64_t repeat_expression[100U];\n  for (size_t i = (size_t)0U; i < (size_t)100U; i++)\n  {\n    repeat_expression[i] = d;\n  }\n  memcpy(arr2.data, repeat_expression, (size_t)100U * sizeof (float64_t));\n  /* original Rust expression is not an lvalue in C */\n  float32_t lvalue0 = (float32_t)1;\n  const_float32_t__x2 uu____0 = { .fst = arr.data, .snd = &lvalue0 };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  float64_t lvalue1 = (float64_t)1;\n  const_float64_t__x2 uu____1 = { .fst = arr2.data, .snd = &lvalue1 };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  size_t lvalue2 = (size_t)100U;\n  /* original Rust expression is not an lvalue in C */\n  size_t lvalue3 = (size_t)100U;\n  const_size_t__x2 uu____2 = { .fst = &lvalue2, .snd = &lvalue3 };\n  EURYDICE_ASSERT(uu____2.fst[0U] == uu____2.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  size_t lvalue4 = (size_t)100U;\n  /* original Rust expression is not an lvalue in C */\n  size_t lvalue = (size_t)100U;\n  const_size_t__x2 uu____3 = { .fst = &lvalue4, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____3.fst[0U] == uu____3.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-floating_points/floating_points.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef floating_points_H\n#define floating_points_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types float32_t\nwith const generics\n- $100size_t\n*/\ntypedef struct Eurydice_arr_fe_s { float32_t data[100U]; } Eurydice_arr_fe;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types float64_t\nwith const generics\n- $100size_t\n*/\ntypedef struct Eurydice_arr_9f_s { float64_t data[100U]; } Eurydice_arr_9f;\n\nvoid floating_points_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define floating_points_H_DEFINED\n#endif /* floating_points_H */\n"
  },
  {
    "path": "out/test-fn_cast/fn_cast.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"fn_cast.h\"\n\n/**\nA monomorphic instance of fn_cast.applies\nwith types int32_t, int32_t\n\n*/\nconst int32_t *fn_cast_applies_99(const int32_t *(*f)(const int32_t *x0), const int32_t *arg)\n{\n  return f(arg);\n}\n\n/**\nA monomorphic instance of fn_cast.id_ref\nwith types int32_t\n\n*/\nconst int32_t *fn_cast_id_ref_a8(const int32_t *x)\n{\n  return x;\n}\n\ntypedef struct const_int32_t__x2_s\n{\n  const int32_t *fst;\n  const int32_t *snd;\n}\nconst_int32_t__x2;\n\nvoid fn_cast_main(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue0 = 1;\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue = 1;\n  const_int32_t__x2\n  uu____0 =\n    {\n      .fst = fn_cast_applies_99((const int32_t *(*)(const int32_t *x0))fn_cast_id_ref_a8, &lvalue0),\n      .snd = &lvalue\n    };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-fn_cast/fn_cast.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef fn_cast_H\n#define fn_cast_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n/**\nA monomorphic instance of fn_cast.applies\nwith types int32_t, int32_t\n\n*/\nconst int32_t *fn_cast_applies_99(const int32_t *(*f)(const int32_t *x0), const int32_t *arg);\n\n/**\nA monomorphic instance of fn_cast.id_ref\nwith types int32_t\n\n*/\nconst int32_t *fn_cast_id_ref_a8(const int32_t *x);\n\nvoid fn_cast_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define fn_cast_H_DEFINED\n#endif /* fn_cast_H */\n"
  },
  {
    "path": "out/test-fn_higher_order/fn_higher_order.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"fn_higher_order.h\"\n\nint32_t fn_higher_order_empty_ptr(int32_t (*f)(void))\n{\n  return f();\n}\n\nint32_t fn_higher_order_more_sum_lst(const Eurydice_arr_bf *l)\n{\n  int32_t sum = 0;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    sum += l->data[i0];);\n  return sum;\n}\n\n/**\nA monomorphic instance of fn_higher_order.compose_cg_apply\nwith types size_t, size_t, size_t\nwith const generics\n- N= 5\n*/\nsize_t\nfn_higher_order_compose_cg_apply_4d(\n  size_t (*f)(const Eurydice_arr_2b *x0),\n  size_t (*g)(size_t x0),\n  const Eurydice_arr_2b *arg\n)\n{\n  size_t (*uu____0)(size_t x0) = g;\n  return uu____0(f(arg));\n}\n\n/**\nA monomorphic instance of fn_higher_order.sum_lst\nwith const generics\n- N= 5\n*/\nsize_t fn_higher_order_sum_lst_a5(const Eurydice_arr_2b *lst)\n{\n  size_t sum = (size_t)0U;\n  KRML_MAYBE_FOR5(i,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    size_t i0 = i;\n    sum += lst->data[i0];);\n  return sum + (size_t)5U;\n}\n\n/**\nA monomorphic instance of fn_higher_order.id\nwith types size_t\n\n*/\nsize_t fn_higher_order_id_60(size_t r)\n{\n  return r;\n}\n\n/**\nA monomorphic instance of fn_higher_order.compose_cg_apply\nwith types int32_t, int32_t, int32_t\nwith const generics\n- N= 3\n*/\nint32_t\nfn_higher_order_compose_cg_apply_36(\n  int32_t (*f)(const Eurydice_arr_bf *x0),\n  int32_t (*g)(int32_t x0),\n  const Eurydice_arr_bf *arg\n)\n{\n  int32_t (*uu____0)(int32_t x0) = g;\n  return uu____0(f(arg));\n}\n\n/**\nA monomorphic instance of fn_higher_order.id\nwith types int32_t\n\n*/\nint32_t fn_higher_order_id_a8(int32_t r)\n{\n  return r;\n}\n\ntypedef struct const_size_t__x2_s\n{\n  const size_t *fst;\n  const size_t *snd;\n}\nconst_size_t__x2;\n\ntypedef struct const_int32_t__x2_s\n{\n  const int32_t *fst;\n  const int32_t *snd;\n}\nconst_int32_t__x2;\n\nvoid fn_higher_order_use_compose_cg(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_2b\n  lvalue0 = { .data = { (size_t)1U, (size_t)2U, (size_t)3U, (size_t)4U, (size_t)5U } };\n  size_t\n  x =\n    fn_higher_order_compose_cg_apply_4d(fn_higher_order_sum_lst_a5,\n      fn_higher_order_id_60,\n      &lvalue0);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_bf lvalue1 = { .data = { 10, 11, 12 } };\n  int32_t\n  y =\n    fn_higher_order_compose_cg_apply_36(fn_higher_order_more_sum_lst,\n      fn_higher_order_id_a8,\n      &lvalue1);\n  /* original Rust expression is not an lvalue in C */\n  size_t lvalue = (size_t)20U;\n  const_size_t__x2 uu____0 = { .fst = &x, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue2 = 33;\n  const_int32_t__x2 uu____1 = { .fst = &y, .snd = &lvalue2 };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n}\n\nvoid fn_higher_order_main(void)\n{\n  fn_higher_order_use_compose_cg();\n}\n\nvoid fn_higher_order_unit_empty_ptr(void (*f)(void))\n{\n  f();\n}\n\n"
  },
  {
    "path": "out/test-fn_higher_order/fn_higher_order.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef fn_higher_order_H\n#define fn_higher_order_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern int32_t core_clone_impls__core__clone__Clone_for_i32__clone(const int32_t *x0);\n\nextern size_t core_clone_impls__core__clone__Clone_for_usize__clone(const size_t *x0);\n\n#define core_cmp_Ordering_Less -1\n#define core_cmp_Ordering_Equal 0\n#define core_cmp_Ordering_Greater 1\n\ntypedef int8_t core_cmp_Ordering;\n\nextern bool\ncore_cmp_impls__core__cmp__PartialEq_usize__for_usize__eq(const size_t *x0, const size_t *x1);\n\n#define core_option_None 0\n#define core_option_Some 1\n\ntypedef uint8_t core_option_Option_77_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types core_cmp_Ordering\n\n*/\ntypedef struct core_option_Option_77_s\n{\n  core_option_Option_77_tags tag;\n  core_cmp_Ordering f0;\n}\ncore_option_Option_77;\n\nextern core_option_Option_77\ncore_cmp_impls__core__cmp__PartialOrd_usize__for_usize__partial_cmp(\n  const size_t *x0,\n  const size_t *x1\n);\n\n/**\nA monomorphic instance of core.option.Option\nwith types size_t\n\n*/\ntypedef struct core_option_Option_87_s\n{\n  core_option_Option_77_tags tag;\n  size_t f0;\n}\ncore_option_Option_87;\n\nextern core_option_Option_87\ncore_iter_range__core__iter__range__Step_for_usize__backward_checked(size_t x0, size_t x1);\n\nextern core_option_Option_87\ncore_iter_range__core__iter__range__Step_for_usize__forward_checked(size_t x0, size_t x1);\n\n/**\nA monomorphic instance of n-tuple\nwith types size_t, core_option_Option_87\n\n*/\ntypedef struct tuple_21_s\n{\n  size_t fst;\n  core_option_Option_87 snd;\n}\ntuple_21;\n\nextern tuple_21\ncore_iter_range__core__iter__range__Step_for_usize__steps_between(\n  const size_t *x0,\n  const size_t *x1\n);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nint32_t fn_higher_order_empty_ptr(int32_t (*f)(void));\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int32_t\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_bf_s { int32_t data[3U]; } Eurydice_arr_bf;\n\nint32_t fn_higher_order_more_sum_lst(const Eurydice_arr_bf *l);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $5size_t\n*/\ntypedef struct Eurydice_arr_2b_s { size_t data[5U]; } Eurydice_arr_2b;\n\n/**\nA monomorphic instance of fn_higher_order.compose_cg_apply\nwith types size_t, size_t, size_t\nwith const generics\n- N= 5\n*/\nsize_t\nfn_higher_order_compose_cg_apply_4d(\n  size_t (*f)(const Eurydice_arr_2b *x0),\n  size_t (*g)(size_t x0),\n  const Eurydice_arr_2b *arg\n);\n\n/**\nA monomorphic instance of fn_higher_order.sum_lst\nwith const generics\n- N= 5\n*/\nsize_t fn_higher_order_sum_lst_a5(const Eurydice_arr_2b *lst);\n\n/**\nA monomorphic instance of fn_higher_order.id\nwith types size_t\n\n*/\nsize_t fn_higher_order_id_60(size_t r);\n\n/**\nA monomorphic instance of fn_higher_order.compose_cg_apply\nwith types int32_t, int32_t, int32_t\nwith const generics\n- N= 3\n*/\nint32_t\nfn_higher_order_compose_cg_apply_36(\n  int32_t (*f)(const Eurydice_arr_bf *x0),\n  int32_t (*g)(int32_t x0),\n  const Eurydice_arr_bf *arg\n);\n\n/**\nA monomorphic instance of fn_higher_order.id\nwith types int32_t\n\n*/\nint32_t fn_higher_order_id_a8(int32_t r);\n\nvoid fn_higher_order_use_compose_cg(void);\n\nvoid fn_higher_order_main(void);\n\nvoid fn_higher_order_unit_empty_ptr(void (*f)(void));\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define fn_higher_order_H_DEFINED\n#endif /* fn_higher_order_H */\n"
  },
  {
    "path": "out/test-for/for.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"for.h\"\n\nvoid for_main(void)\n{\n\n}\n\nuint8_t for_other(Eurydice_borrow_slice_u8 input)\n{\n  for (int32_t i = 0; i < 5; i++)\n  {\n    int32_t i0 = i;\n    if (i0 == 2)\n    {\n      return 6U;\n    }\n  }\n  return input.ptr[0U];\n}\n\n"
  },
  {
    "path": "out/test-for/for.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef for_H\n#define for_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern int32_t core_clone_impls__core__clone__Clone_for_i32__clone(const int32_t *x0);\n\n#define core_cmp_Ordering_Less -1\n#define core_cmp_Ordering_Equal 0\n#define core_cmp_Ordering_Greater 1\n\ntypedef int8_t core_cmp_Ordering;\n\nextern bool\ncore_cmp_impls__core__cmp__PartialEq_i32__for_i32__eq(const int32_t *x0, const int32_t *x1);\n\n#define core_option_None 0\n#define core_option_Some 1\n\ntypedef uint8_t core_option_Option_77_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types core_cmp_Ordering\n\n*/\ntypedef struct core_option_Option_77_s\n{\n  core_option_Option_77_tags tag;\n  core_cmp_Ordering f0;\n}\ncore_option_Option_77;\n\nextern core_option_Option_77\ncore_cmp_impls__core__cmp__PartialOrd_i32__for_i32__partial_cmp(\n  const int32_t *x0,\n  const int32_t *x1\n);\n\n/**\nA monomorphic instance of core.option.Option\nwith types int32_t\n\n*/\ntypedef struct core_option_Option_9e_s\n{\n  core_option_Option_77_tags tag;\n  int32_t f0;\n}\ncore_option_Option_9e;\n\nextern core_option_Option_9e\ncore_iter_range__core__iter__range__Step_for_i32__backward_checked(int32_t x0, size_t x1);\n\nextern core_option_Option_9e\ncore_iter_range__core__iter__range__Step_for_i32__forward_checked(int32_t x0, size_t x1);\n\n/**\nA monomorphic instance of core.option.Option\nwith types size_t\n\n*/\ntypedef struct core_option_Option_87_s\n{\n  core_option_Option_77_tags tag;\n  size_t f0;\n}\ncore_option_Option_87;\n\n/**\nA monomorphic instance of n-tuple\nwith types size_t, core_option_Option_87\n\n*/\ntypedef struct tuple_21_s\n{\n  size_t fst;\n  core_option_Option_87 snd;\n}\ntuple_21;\n\nextern tuple_21\ncore_iter_range__core__iter__range__Step_for_i32__steps_between(\n  const int32_t *x0,\n  const int32_t *x1\n);\n\nvoid for_main(void);\n\nuint8_t for_other(Eurydice_borrow_slice_u8 input);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define for_H_DEFINED\n#endif /* for_H */\n"
  },
  {
    "path": "out/test-global_ref/global_ref.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"global_ref.h\"\n\nstatic void *C_VAL_local_0 = (void *)0U;\n\nstatic void *const *C_VAL_local_1 = &C_VAL_local_0;\n\nvoid *const *const *global_ref_C_VAL_local_2 = &C_VAL_local_1;\n\nstatic int32_t S_VAL_local_0 = 0;\n\nstatic const int32_t *S_VAL_local_1 = &S_VAL_local_0;\n\nstatic const int32_t *const *S_VAL_local_2 = &S_VAL_local_1;\n\nconst int32_t *const *const *const global_ref_S_VAL = &S_VAL_local_2;\n\ntypedef struct const_____x2_s\n{\n  void *const *fst;\n  void *const *snd;\n}\nconst_____x2;\n\nvoid global_ref_main(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  void *lvalue = (void *)0U;\n  const_____x2 uu____0 = { .fst = GLOBAL_REF_C_VAL[0U][0U], .snd = &lvalue };\n  EURYDICE_ASSERT(core_cmp_impls__core__cmp__PartialEq_____for_____eq(uu____0.fst, uu____0.snd),\n    \"panic!\");\n  EURYDICE_ASSERT(global_ref_S_VAL[0U][0U][0U] == 0, \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-global_ref/global_ref.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef global_ref_H\n#define global_ref_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern bool\ncore_cmp_impls__core__cmp__PartialEq_____for_____eq(void *const *x0, void *const *x1);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nextern void *const *const *global_ref_C_VAL_local_2;\n\n#define GLOBAL_REF_C_VAL (&global_ref_C_VAL_local_2)\n\nextern const int32_t *const *const *const global_ref_S_VAL;\n\nvoid global_ref_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define global_ref_H_DEFINED\n#endif /* global_ref_H */\n"
  },
  {
    "path": "out/test-i32_shl/i32_shl.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"i32_shl.h\"\n\ntypedef struct const_int16_t__x2_s\n{\n  const int16_t *fst;\n  const int16_t *snd;\n}\nconst_int16_t__x2;\n\nvoid i32_shl_main(void)\n{\n  int16_t x = (int16_t)((uint32_t)-1 << 8U);\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue0 = -256;\n  const_int16_t__x2 uu____0 = { .fst = &x, .snd = &lvalue0 };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  int16_t y = (int16_t)((uint32_t)(-1 & (int16_t)65280U) << 8U) >> 8U;\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue = 0;\n  const_int16_t__x2 uu____1 = { .fst = &y, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-i32_shl/i32_shl.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef i32_shl_H\n#define i32_shl_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nvoid i32_shl_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define i32_shl_H_DEFINED\n#endif /* i32_shl_H */\n"
  },
  {
    "path": "out/test-inline_attributes/inline_attributes.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"inline_attributes.h\"\n\ninline uint32_t inline_attributes_f(void)\n{\n  return 1U;\n}\n\nKRML_NOINLINE uint32_t inline_attributes_g(void)\n{\n  return 2U;\n}\n\nKRML_MUSTINLINE uint32_t inline_attributes_h(void)\n{\n  return 3U;\n}\n\nvoid inline_attributes_main(void)\n{\n  inline_attributes_f();\n  inline_attributes_g();\n  inline_attributes_h();\n}\n\n"
  },
  {
    "path": "out/test-inline_attributes/inline_attributes.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef inline_attributes_H\n#define inline_attributes_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nuint32_t inline_attributes_f(void);\n\nuint32_t inline_attributes_g(void);\n\nuint32_t inline_attributes_h(void);\n\nvoid inline_attributes_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define inline_attributes_H_DEFINED\n#endif /* inline_attributes_H */\n"
  },
  {
    "path": "out/test-int_switch/int_switch.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"int_switch.h\"\n\nuint32_t int_switch_f(void)\n{\n  return 0U;\n}\n\nvoid int_switch_main(void)\n{\n  switch (int_switch_f())\n  {\n    case 0U:\n      {\n        break;\n      }\n    case 1U:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n}\n\n"
  },
  {
    "path": "out/test-int_switch/int_switch.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef int_switch_H\n#define int_switch_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nuint32_t int_switch_f(void);\n\nvoid int_switch_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define int_switch_H_DEFINED\n#endif /* int_switch_H */\n"
  },
  {
    "path": "out/test-issue_102/issue_102.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_102.h\"\n\nvoid issue_102_main(void)\n{\n\n}\n\n"
  },
  {
    "path": "out/test-issue_102/issue_102.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_102_H\n#define issue_102_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define issue_102_Error1_Reason1 1\n#define issue_102_Error1_Reason2 2\n\ntypedef uint8_t issue_102_Error1;\n\n#define issue_102_Error2_Reason1 3\n#define issue_102_Error2_Reason2 4\n\ntypedef uint8_t issue_102_Error2;\n\nvoid issue_102_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_102_H_DEFINED\n#endif /* issue_102_H */\n"
  },
  {
    "path": "out/test-issue_104/issue_104.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_104.h\"\n\n/**\nA monomorphic instance of issue_104.sth\nwith types issue_104_S\nwith const generics\n\n*/\nuint8_t issue_104_sth_50(void)\n{\n  return ISSUE_104__ISSUE_104__FUN_FOR_ISSUE_104__S__VAL;\n}\n\nuint8_t issue_104_call(void)\n{\n  return issue_104_sth_50();\n}\n\ntypedef struct const_uint8_t__x2_s\n{\n  const uint8_t *fst;\n  const uint8_t *snd;\n}\nconst_uint8_t__x2;\n\nvoid issue_104_main(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  uint8_t lvalue0 = issue_104_call();\n  /* original Rust expression is not an lvalue in C */\n  uint8_t lvalue = 5U;\n  const_uint8_t__x2 uu____0 = { .fst = &lvalue0, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-issue_104/issue_104.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_104_H\n#define issue_104_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n#define ISSUE_104__ISSUE_104__FUN_FOR_ISSUE_104__S__VAL (5U)\n\n/**\nA monomorphic instance of issue_104.sth\nwith types issue_104_S\nwith const generics\n\n*/\nuint8_t issue_104_sth_50(void);\n\nuint8_t issue_104_call(void);\n\nvoid issue_104_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_104_H_DEFINED\n#endif /* issue_104_H */\n"
  },
  {
    "path": "out/test-issue_105/issue_105.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_105.h\"\n\n/**\nThis function found in impl {core::cmp::PartialEq<()> for ()}\n*/\ninline bool core_cmp_impls_eq_cf(void *const *self, void *const *_other)\n{\n  return true;\n}\n\n/**\nThis function found in impl {core::cmp::PartialEq<()> for ()}\n*/\ninline bool core_cmp_impls_ne_cf(void *const *self, void *const *_other)\n{\n  return false;\n}\n\n/**\nThis function found in impl {core::cmp::PartialEq<u8> for u8}\n*/\ninline bool core_cmp_impls_eq_c3(const uint8_t *self, const uint8_t *other)\n{\n  return self[0U] == other[0U];\n}\n\n/**\nThis function found in impl {core::cmp::PartialEq<u8> for u8}\n*/\ninline bool core_cmp_impls_ne_c3(const uint8_t *self, const uint8_t *other)\n{\n  return self[0U] != other[0U];\n}\n\ncore_result_Result_1d issue_105_inner(void)\n{\n  return (KRML_CLITERAL(core_result_Result_1d){ .tag = core_result_Err, .f0 = 1U });\n}\n\n/**\nThis function found in impl {core::ops::try_trait::Try<T, core::result::Result<core::convert::Infallible, E>[core::marker::Sized<core::convert::Infallible>, TraitClause@1]> for core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.branch_71\nwith types (), uint8_t\n\n*/\ninline core_ops_control_flow_ControlFlow_19\ncore_result_branch_71_e9(core_result_Result_1d self)\n{\n  if (!(self.tag == core_result_Ok))\n  {\n    uint8_t e = self.f0;\n    return\n      (\n        KRML_CLITERAL(core_ops_control_flow_ControlFlow_19){\n          .tag = core_ops_control_flow_Break,\n          .f0 = { .tag = core_result_Err, .val = { .case_Err = e } }\n        }\n      );\n  }\n  return\n    (KRML_CLITERAL(core_ops_control_flow_ControlFlow_19){ .tag = core_ops_control_flow_Continue });\n}\n\n/**\nThis function found in impl {core::ops::try_trait::FromResidual<core::result::Result<core::convert::Infallible, E>[core::marker::Sized<core::convert::Infallible>, TraitClause@1]> for core::result::Result<T, F>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of core.result.from_residual_1f\nwith types (), uint8_t, uint8_t\nwith const generics\n\n*/\ninline core_result_Result_1d core_result_from_residual_1f_48(core_result_Result_8f residual)\n{\n  uint8_t e = residual.val.case_Err;\n  return\n    (\n      KRML_CLITERAL(core_result_Result_1d){\n        .tag = core_result_Err,\n        .f0 = core_convert_from_61_90(e)\n      }\n    );\n}\n\ncore_result_Result_1d issue_105_call_it(void)\n{\n  core_ops_control_flow_ControlFlow_19 uu____0 = core_result_branch_71_e9(issue_105_inner());\n  if (!(uu____0.tag == core_ops_control_flow_Continue))\n  {\n    core_result_Result_8f residual = uu____0.f0;\n    return core_result_from_residual_1f_48(residual);\n  }\n  return (KRML_CLITERAL(core_result_Result_1d){ .tag = core_result_Ok });\n}\n\n/**\nThis function found in impl {core::cmp::PartialEq<core::result::Result<T, E>[TraitClause@0, TraitClause@1]> for core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.eq_0b\nwith types (), uint8_t\nwith const generics\n\n*/\ninline bool\ncore_result_eq_0b_74(const core_result_Result_1d *self, const core_result_Result_1d *other)\n{\n  ptrdiff_t __self_discr = (ptrdiff_t)self->tag;\n  ptrdiff_t __arg1_discr = (ptrdiff_t)other->tag;\n  bool uu____0;\n  if (__self_discr == __arg1_discr)\n  {\n    if (self->tag == core_result_Ok)\n    {\n      EURYDICE_ASSERT(!!((ptrdiff_t)other->tag == (ptrdiff_t)0), \"assert failure\");\n      /* original Rust expression is not an lvalue in C */\n      void *lvalue0 = (void *)0U;\n      void *const *__self_0 = &lvalue0;\n      /* original Rust expression is not an lvalue in C */\n      void *lvalue = (void *)0U;\n      void *const *__arg1_0 = &lvalue;\n      uu____0 = core_cmp_impls_eq_cf(__self_0, __arg1_0);\n    }\n    else\n    {\n      EURYDICE_ASSERT(!!((ptrdiff_t)other->tag == (ptrdiff_t)1), \"assert failure\");\n      const uint8_t *__self_0 = &self->f0;\n      const uint8_t *__arg1_0 = &other->f0;\n      uu____0 = core_cmp_impls_eq_c3(__self_0, __arg1_0);\n    }\n  }\n  else\n  {\n    uu____0 = false;\n  }\n  return uu____0;\n}\n\ntypedef struct const_core_result_Result_1d__x2_s\n{\n  const core_result_Result_1d *fst;\n  const core_result_Result_1d *snd;\n}\nconst_core_result_Result_1d__x2;\n\nvoid issue_105_main(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  core_result_Result_1d lvalue0 = issue_105_call_it();\n  /* original Rust expression is not an lvalue in C */\n  core_result_Result_1d lvalue = { .tag = core_result_Err, .f0 = 1U };\n  const_core_result_Result_1d__x2 uu____0 = { .fst = &lvalue0, .snd = &lvalue };\n  EURYDICE_ASSERT(core_result_eq_0b_74(uu____0.fst, uu____0.snd), \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-issue_105/issue_105.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_105_H\n#define issue_105_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nThis function found in impl {core::cmp::PartialEq<()> for ()}\n*/\nbool core_cmp_impls_eq_cf(void *const *self, void *const *_other);\n\n/**\nThis function found in impl {core::cmp::PartialEq<()> for ()}\n*/\nbool core_cmp_impls_ne_cf(void *const *self, void *const *_other);\n\n/**\nThis function found in impl {core::cmp::PartialEq<u8> for u8}\n*/\nbool core_cmp_impls_eq_c3(const uint8_t *self, const uint8_t *other);\n\n/**\nThis function found in impl {core::cmp::PartialEq<u8> for u8}\n*/\nbool core_cmp_impls_ne_c3(const uint8_t *self, const uint8_t *other);\n\n\n\ntypedef uint8_t core_convert_Infallible;\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n#define core_result_Ok 0\n#define core_result_Err 1\n\ntypedef uint8_t core_result_Result_1d_tags;\n\n/**\nA monomorphic instance of core.result.Result\nwith types (), uint8_t\n\n*/\ntypedef struct core_result_Result_1d_s\n{\n  core_result_Result_1d_tags tag;\n  uint8_t f0;\n}\ncore_result_Result_1d;\n\ncore_result_Result_1d issue_105_inner(void);\n\n/**\nA monomorphic instance of core.result.Result\nwith types core_convert_Infallible, uint8_t\n\n*/\ntypedef struct core_result_Result_8f_s\n{\n  core_result_Result_1d_tags tag;\n  union {\n    core_convert_Infallible case_Ok;\n    uint8_t case_Err;\n  }\n  val;\n}\ncore_result_Result_8f;\n\n#define core_ops_control_flow_Continue 0\n#define core_ops_control_flow_Break 1\n\ntypedef uint8_t core_ops_control_flow_ControlFlow_19_tags;\n\n/**\nA monomorphic instance of core.ops.control_flow.ControlFlow\nwith types core_result_Result_8f, ()\n\n*/\ntypedef struct core_ops_control_flow_ControlFlow_19_s\n{\n  core_ops_control_flow_ControlFlow_19_tags tag;\n  core_result_Result_8f f0;\n}\ncore_ops_control_flow_ControlFlow_19;\n\n/**\nThis function found in impl {core::ops::try_trait::Try<T, core::result::Result<core::convert::Infallible, E>[core::marker::Sized<core::convert::Infallible>, TraitClause@1]> for core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.branch_71\nwith types (), uint8_t\n\n*/\ncore_ops_control_flow_ControlFlow_19 core_result_branch_71_e9(core_result_Result_1d self);\n\n/**\n Returns the argument unchanged.\n*/\n/**\nThis function found in impl {core::convert::From<T> for T}\n*/\n/**\nA monomorphic instance of core.convert.from_61\nwith types uint8_t\n\n*/\nstatic KRML_MUSTINLINE uint8_t core_convert_from_61_90(uint8_t t)\n{\n  return t;\n}\n\n/**\nThis function found in impl {core::ops::try_trait::FromResidual<core::result::Result<core::convert::Infallible, E>[core::marker::Sized<core::convert::Infallible>, TraitClause@1]> for core::result::Result<T, F>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of core.result.from_residual_1f\nwith types (), uint8_t, uint8_t\nwith const generics\n\n*/\ncore_result_Result_1d core_result_from_residual_1f_48(core_result_Result_8f residual);\n\ncore_result_Result_1d issue_105_call_it(void);\n\n/**\nThis function found in impl {core::cmp::PartialEq<core::result::Result<T, E>[TraitClause@0, TraitClause@1]> for core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.eq_0b\nwith types (), uint8_t\nwith const generics\n\n*/\nbool\ncore_result_eq_0b_74(const core_result_Result_1d *self, const core_result_Result_1d *other);\n\nvoid issue_105_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_105_H_DEFINED\n#endif /* issue_105_H */\n"
  },
  {
    "path": "out/test-issue_106/issue_106.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_106.h\"\n\nuint8_t issue_106_generate(void)\n{\n  return 5U;\n}\n\nvoid issue_106_main(void)\n{\n\n}\n\nuint8_t issue_106_use_it(const uint8_t *x)\n{\n  return x[0U];\n}\n\nuint8_t issue_106_use_ref(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  uint8_t lvalue = issue_106_generate();\n  return issue_106_use_it(&lvalue);\n}\n\n"
  },
  {
    "path": "out/test-issue_106/issue_106.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_106_H\n#define issue_106_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\ntypedef uint8_t issue_106_MyStruct;\n\nuint8_t issue_106_generate(void);\n\nvoid issue_106_main(void);\n\nuint8_t issue_106_use_it(const uint8_t *x);\n\nuint8_t issue_106_use_ref(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_106_H_DEFINED\n#endif /* issue_106_H */\n"
  },
  {
    "path": "out/test-issue_107/issue_107.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_107.h\"\n\nvoid issue_107_main(void)\n{\n\n}\n\n/**\nThis function found in impl {issue_107::Fun for issue_107::MyStruct}\n*/\nuint8_t issue_107_f_90(void)\n{\n  return 5U;\n}\n\n"
  },
  {
    "path": "out/test-issue_107/issue_107.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_107_H\n#define issue_107_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nvoid issue_107_main(void);\n\n/**\nThis function found in impl {issue_107::Fun for issue_107::MyStruct}\n*/\nuint8_t issue_107_f_90(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_107_H_DEFINED\n#endif /* issue_107_H */\n"
  },
  {
    "path": "out/test-issue_123/issue_123.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_123.h\"\n\nint32_t issue_123_fun(issue_123_E e)\n{\n  return (int32_t)(ptrdiff_t)e;\n}\n\ntypedef struct const_ptrdiff_t__x2_s\n{\n  const ptrdiff_t *fst;\n  const ptrdiff_t *snd;\n}\nconst_ptrdiff_t__x2;\n\ntypedef struct const_int32_t__x2_s\n{\n  const int32_t *fst;\n  const int32_t *snd;\n}\nconst_int32_t__x2;\n\nvoid issue_123_main(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  ptrdiff_t lvalue0 = (ptrdiff_t)((ptrdiff_t)-1 + (ptrdiff_t)0);\n  /* original Rust expression is not an lvalue in C */\n  ptrdiff_t lvalue1 = (ptrdiff_t)-1;\n  const_ptrdiff_t__x2 uu____0 = { .fst = &lvalue0, .snd = &lvalue1 };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue2 = issue_123_fun(issue_123_E_One);\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue = 1;\n  const_int32_t__x2 uu____1 = { .fst = &lvalue2, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n}\n\n/**\nThis function found in impl {core::cmp::PartialEq<issue_123::E2> for issue_123::E2}\n*/\ninline bool issue_123_eq_e3(const issue_123_E2 *self, const issue_123_E2 *other)\n{\n  ptrdiff_t __self_discr = (ptrdiff_t)self[0U];\n  ptrdiff_t __arg1_discr = (ptrdiff_t)other[0U];\n  return __self_discr == __arg1_discr;\n}\n\n"
  },
  {
    "path": "out/test-issue_123/issue_123.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_123_H\n#define issue_123_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n#define issue_123_E_One 1\n#define issue_123_E_Five 5\n\ntypedef uint8_t issue_123_E;\n\n#define issue_123_E1_C1 4294967295\n#define issue_123_E1_C2 -4294967295\n#define issue_123_E1_C3 268435455\n\ntypedef int64_t issue_123_E1;\n\n#define issue_123_E2_C1 255\n#define issue_123_E2_C2 -1\n\ntypedef int16_t issue_123_E2;\n\n#define issue_123_E3_C1 255\n\ntypedef uint8_t issue_123_E3;\n\n#define issue_123_E4_C1 127\n#define issue_123_E4_C2 -126\n\ntypedef int8_t issue_123_E4;\n\n#define issue_123_Gamma2_V95_232 95232\n#define issue_123_Gamma2_V261_888 261888\n\ntypedef uint32_t issue_123_Gamma2;\n\nint32_t issue_123_fun(issue_123_E e);\n\nvoid issue_123_main(void);\n\n/**\nThis function found in impl {core::cmp::PartialEq<issue_123::E2> for issue_123::E2}\n*/\nbool issue_123_eq_e3(const issue_123_E2 *self, const issue_123_E2 *other);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_123_H_DEFINED\n#endif /* issue_123_H */\n"
  },
  {
    "path": "out/test-issue_128/issue_128.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_128.h\"\n\nvoid issue_128_fun_a(Eurydice_borrow_slice_u8 _x)\n{\n\n}\n\nvoid issue_128_fun_b(Eurydice_borrow_slice_u8 _x)\n{\n\n}\n\nvoid issue_128_use_enum(issue_128_E e, Eurydice_borrow_slice_u8 x)\n{\n  switch (e)\n  {\n    case issue_128_E_A:\n      {\n        break;\n      }\n    case issue_128_E_B:\n      {\n        return;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 0\n*/\nstatic Eurydice_borrow_slice_u8 array_to_slice_shared_08(const Eurydice_arr_bb *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)0U;\n  return lit;\n}\n\nvoid issue_128_main(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_bb lvalue = Eurydice_empty_array((void *)0U, uint8_t, Eurydice_arr_bb);\n  issue_128_use_enum(issue_128_E_A, array_to_slice_shared_08(&lvalue));\n}\n\n"
  },
  {
    "path": "out/test-issue_128/issue_128.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_128_H\n#define issue_128_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define issue_128_E_A 1\n#define issue_128_E_B 2\n\ntypedef uint8_t issue_128_E;\n\nvoid issue_128_fun_a(Eurydice_borrow_slice_u8 _x);\n\nvoid issue_128_fun_b(Eurydice_borrow_slice_u8 _x);\n\nvoid issue_128_use_enum(issue_128_E e, Eurydice_borrow_slice_u8 x);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $0size_t\n*/\ntypedef struct Eurydice_arr_bb_s { uint8_t data[0U]; } Eurydice_arr_bb;\n\nvoid issue_128_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_128_H_DEFINED\n#endif /* issue_128_H */\n"
  },
  {
    "path": "out/test-issue_212/issue_212.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_212.h\"\n\n/**\nA monomorphic instance of issue_212.id_mut\nwith types Eurydice_arr int32_t[[$3size_t]]\n\n*/\nconst Eurydice_arr_bf *issue_212_id_mut_25(const Eurydice_arr_bf *x)\n{\n  return x;\n}\n\nvoid issue_212_main(void)\n{\n  Eurydice_arr_bf arr = { .data = { 1, 2, 3 } };\n  const Eurydice_arr_bf *r = issue_212_id_mut_25(&arr);\n  EURYDICE_ASSERT(r->data[0U] > 0, \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-issue_212/issue_212.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_212_H\n#define issue_212_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int32_t\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_bf_s { int32_t data[3U]; } Eurydice_arr_bf;\n\n/**\nA monomorphic instance of issue_212.id_mut\nwith types Eurydice_arr int32_t[[$3size_t]]\n\n*/\nconst Eurydice_arr_bf *issue_212_id_mut_25(const Eurydice_arr_bf *x);\n\nvoid issue_212_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_212_H_DEFINED\n#endif /* issue_212_H */\n"
  },
  {
    "path": "out/test-issue_37/issue_37.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_37.h\"\n\nEurydice_arr_ec issue_37_b(Eurydice_borrow_slice_u8 x)\n{\n  return (KRML_CLITERAL(Eurydice_arr_ec){ .data = { 0U } });\n}\n\nEurydice_arr_ec issue_37_bb(Eurydice_borrow_slice_u8 x)\n{\n  return core_hint_black_box(issue_37_b(x), Eurydice_arr_ec, Eurydice_arr_ec);\n}\n\nvoid issue_37_main(void)\n{\n\n}\n\n"
  },
  {
    "path": "out/test-issue_37/issue_37.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_37_H\n#define issue_37_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $32size_t\n*/\ntypedef struct Eurydice_arr_ec_s { uint8_t data[32U]; } Eurydice_arr_ec;\n\nEurydice_arr_ec issue_37_b(Eurydice_borrow_slice_u8 x);\n\nEurydice_arr_ec issue_37_bb(Eurydice_borrow_slice_u8 x);\n\nvoid issue_37_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_37_H_DEFINED\n#endif /* issue_37_H */\n"
  },
  {
    "path": "out/test-issue_49/issue_49.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_49.h\"\n\nsize_t issue_49_f(size_t a, size_t b)\n{\n  return core_cmp_impls__core__cmp__Ord_for_usize__min(a, b);\n}\n\ntypedef struct const_size_t__x2_s\n{\n  const size_t *fst;\n  const size_t *snd;\n}\nconst_size_t__x2;\n\nvoid issue_49_main(void)\n{\n  size_t expected = (size_t)0U;\n  size_t actual = issue_49_f((size_t)0U, (size_t)0U);\n  const_size_t__x2 uu____0 = { .fst = &expected, .snd = &actual };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-issue_49/issue_49.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_49_H\n#define issue_49_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern size_t core_cmp_impls__core__cmp__Ord_for_usize__min(size_t x0, size_t x1);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nsize_t issue_49_f(size_t a, size_t b);\n\nvoid issue_49_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_49_H_DEFINED\n#endif /* issue_49_H */\n"
  },
  {
    "path": "out/test-issue_96/issue_96.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_96.h\"\n\nvoid issue_96_use_it(const Eurydice_arr_48 *x)\n{\n\n}\n\nvoid issue_96_use_it2(const issue_96_MyStruct2 *x)\n{\n\n}\n\nvoid issue_96_main(void)\n{\n  Eurydice_arr_48 x = { .data = { 0U } };\n  issue_96_MyStruct2 x0 = { .fst = { .data = { 0U } }, .snd = 2U };\n}\n\n"
  },
  {
    "path": "out/test-issue_96/issue_96.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_96_H\n#define issue_96_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $5size_t\n*/\ntypedef struct Eurydice_arr_48_s { uint8_t data[5U]; } Eurydice_arr_48;\n\ntypedef Eurydice_arr_48 issue_96_MyStruct;\n\ntypedef struct issue_96_MyStruct2_s\n{\n  Eurydice_arr_48 fst;\n  uint32_t snd;\n}\nissue_96_MyStruct2;\n\nvoid issue_96_use_it(const Eurydice_arr_48 *x);\n\nvoid issue_96_use_it2(const issue_96_MyStruct2 *x);\n\nvoid issue_96_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_96_H_DEFINED\n#endif /* issue_96_H */\n"
  },
  {
    "path": "out/test-issue_k630/issue_k630.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_k630.h\"\n\ntypedef struct const_uint32_t__x2_s\n{\n  const uint32_t *fst;\n  const uint32_t *snd;\n}\nconst_uint32_t__x2;\n\nvoid issue_k630_main(void)\n{\n  Eurydice_arr_21 v;\n  Eurydice_arr_d5 repeat_expression0[5U];\n  KRML_MAYBE_FOR5(i,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    Eurydice_arr_d5 lit;\n    uint32_t repeat_expression = 2U;\n    memcpy(lit.data, &repeat_expression, (size_t)1U * sizeof (uint32_t));\n    repeat_expression0[i] = lit;);\n  memcpy(v.data, repeat_expression0, (size_t)5U * sizeof (Eurydice_arr_d5));\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 2U;\n  const_uint32_t__x2 uu____0 = { .fst = v.data->data, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-issue_k630/issue_k630.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_k630_H\n#define issue_k630_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_d5_s { uint32_t data[1U]; } Eurydice_arr_d5;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_d5\nwith const generics\n- $5size_t\n*/\ntypedef struct Eurydice_arr_21_s { Eurydice_arr_d5 data[5U]; } Eurydice_arr_21;\n\nvoid issue_k630_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_k630_H_DEFINED\n#endif /* issue_k630_H */\n"
  },
  {
    "path": "out/test-issue_shift/issue_shift.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"issue_shift.h\"\n\ntypedef struct const_int32_t__x2_s\n{\n  const int32_t *fst;\n  const int32_t *snd;\n}\nconst_int32_t__x2;\n\ntypedef struct const_int8_t__x2_s\n{\n  const int8_t *fst;\n  const int8_t *snd;\n}\nconst_int8_t__x2;\n\ntypedef struct const_int16_t__x2_s\n{\n  const int16_t *fst;\n  const int16_t *snd;\n}\nconst_int16_t__x2;\n\ntypedef struct const_int64_t__x2_s\n{\n  const int64_t *fst;\n  const int64_t *snd;\n}\nconst_int64_t__x2;\n\nvoid issue_shift_main(void)\n{\n  int32_t x = -1;\n  int32_t y = (int32_t)((uint32_t)x << 1U);\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue0 = -2;\n  const_int32_t__x2 uu____0 = { .fst = &y, .snd = &lvalue0 };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  int8_t x0 = -1;\n  int8_t y0 = (int8_t)((uint32_t)x0 << 1U);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue1 = -2;\n  const_int8_t__x2 uu____1 = { .fst = &y0, .snd = &lvalue1 };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n  int16_t x1 = -1;\n  int16_t y1 = (int16_t)((uint32_t)x1 << 1U);\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue2 = -2;\n  const_int16_t__x2 uu____2 = { .fst = &y1, .snd = &lvalue2 };\n  EURYDICE_ASSERT(uu____2.fst[0U] == uu____2.snd[0U], \"panic!\");\n  int64_t x2 = -1LL;\n  int64_t y2 = (int64_t)((uint64_t)x2 << 1U);\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue = -2LL;\n  const_int64_t__x2 uu____3 = { .fst = &y2, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____3.fst[0U] == uu____3.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-issue_shift/issue_shift.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef issue_shift_H\n#define issue_shift_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nvoid issue_shift_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define issue_shift_H_DEFINED\n#endif /* issue_shift_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/internal/libcrux_mldsa_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mldsa_avx2_H\n#define internal_libcrux_mldsa_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"../libcrux_mldsa_avx2.h\"\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b\nwith const generics\n- $8size_t\n*/\ntypedef struct Eurydice_arr_53_s { Eurydice_arr_cd0 data[8U]; } Eurydice_arr_53;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_2a_s\n{\n  const Eurydice_arr_cd0 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_2a;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_15_s { Eurydice_arr_cd0 data[4U]; } Eurydice_arr_15;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b\nwith const generics\n- $6size_t\n*/\ntypedef struct Eurydice_arr_b50_s { Eurydice_arr_cd0 data[6U]; } Eurydice_arr_b50;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b\nwith const generics\n- $5size_t\n*/\ntypedef struct Eurydice_arr_dd_s { Eurydice_arr_cd0 data[5U]; } Eurydice_arr_dd;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b\nwith const generics\n- $7size_t\n*/\ntypedef struct Eurydice_arr_39_s { Eurydice_arr_cd0 data[7U]; } Eurydice_arr_39;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mldsa_avx2_H_DEFINED\n#endif /* internal_libcrux_mldsa_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/internal/libcrux_mldsa_core.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mldsa_core_H\n#define internal_libcrux_mldsa_core_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"../libcrux_mldsa_core.h\"\n\nstatic inline uint32_t core_num__i32__count_ones(int32_t x0);\n\n#define LIBCRUX_ML_DSA_SIMD_TRAITS_SIMD_UNITS_IN_RING_ELEMENT ((size_t)32U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS_MINUS_ONE_BIT_LENGTH ((size_t)23U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_UPPER_PART_OF_T (LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS_MINUS_ONE_BIT_LENGTH - LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH ((size_t)64U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT ((size_t)256U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN ((size_t)255U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS ((int32_t)8380417)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN ((size_t)814U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE (LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T * LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)8U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE (LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_UPPER_PART_OF_T * LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)8U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE ((size_t)32U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE ((size_t)64U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE ((size_t)32U)\n\nint32_t\nlibcrux_ml_dsa_constants_beta(\n  size_t ones_in_verifier_challenge,\n  libcrux_ml_dsa_constants_Eta eta\n);\n\nsize_t\nlibcrux_ml_dsa_constants_commitment_ring_element_size(size_t bits_per_commitment_coefficient);\n\nsize_t libcrux_ml_dsa_constants_error_ring_element_size(size_t bits_per_error_coefficient);\n\nsize_t libcrux_ml_dsa_constants_gamma1_ring_element_size(size_t bits_per_gamma1_coefficient);\n\nsize_t\nlibcrux_ml_dsa_constants_signature_size(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  size_t max_ones_in_hint,\n  size_t commitment_hash_size,\n  size_t bits_per_gamma1_coefficient\n);\n\nsize_t libcrux_ml_dsa_constants_verification_key_size(size_t rows_in_a);\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_COMMITMENT_COEFFICIENT ((size_t)6U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_ERROR_COEFFICIENT ((size_t)3U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_GAMMA1_COEFFICIENT ((size_t)18U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A ((size_t)4U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COMMITMENT_HASH_SIZE ((size_t)32U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA (libcrux_ml_dsa_constants_Eta_Two)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT ((size_t)17U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2 ((LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS - (int32_t)1) / (int32_t)88)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT ((size_t)80U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ONES_IN_VERIFIER_CHALLENGE ((size_t)39U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A ((size_t)4U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_COMMITMENT_COEFFICIENT ((size_t)4U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_ERROR_COEFFICIENT ((size_t)4U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_GAMMA1_COEFFICIENT ((size_t)20U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A ((size_t)5U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COMMITMENT_HASH_SIZE ((size_t)48U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA (libcrux_ml_dsa_constants_Eta_Four)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT ((size_t)19U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2 ((LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS - (int32_t)1) / (int32_t)32)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT ((size_t)55U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ONES_IN_VERIFIER_CHALLENGE ((size_t)49U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A ((size_t)6U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_COMMITMENT_COEFFICIENT ((size_t)4U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_ERROR_COEFFICIENT ((size_t)3U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_GAMMA1_COEFFICIENT ((size_t)20U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A ((size_t)7U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COMMITMENT_HASH_SIZE ((size_t)64U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA (libcrux_ml_dsa_constants_Eta_Two)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT ((size_t)19U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2 ((LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS - (int32_t)1) / (int32_t)32)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT ((size_t)75U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ONES_IN_VERIFIER_CHALLENGE ((size_t)60U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A ((size_t)8U)\n\nsize_t libcrux_ml_dsa_encoding_error_chunk_size(libcrux_ml_dsa_constants_Eta eta);\n\ntypedef struct Eurydice_arr_c3_s Eurydice_arr_c3;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types Eurydice_arr_c3, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_22_s\n{\n  Eurydice_arr_c3 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_22;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int32_t\nwith const generics\n- $256size_t\n*/\ntypedef struct Eurydice_arr_c3_s { int32_t data[256U]; } Eurydice_arr_c3;\n\nvoid\nlibcrux_ml_dsa_encoding_signature_set_hint(\n  Eurydice_dst_ref_mut_22 out_hint,\n  size_t i,\n  size_t j\n);\n\n#define LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT ((size_t)13U)\n\n#define LIBCRUX_ML_DSA_ENCODING_T1_DESERIALIZE_WINDOW ((size_t)10U)\n\n#define LIBCRUX_ML_DSA_ENCODING_T1_SERIALIZE_OUTPUT_BYTES_PER_SIMD_UNIT ((size_t)10U)\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $66size_t\n*/\ntypedef struct Eurydice_arr_a2_s { uint8_t data[66U]; } Eurydice_arr_a2;\n\nEurydice_arr_a2\nlibcrux_ml_dsa_sample_add_error_domain_separator(\n  Eurydice_borrow_slice_u8 slice,\n  uint16_t domain_separator\n);\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_error_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_ERROR_COEFFICIENT))\n\n#define LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS ((int32_t)8380417)\n\n#define LIBCRUX_ML_DSA_SIMD_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R (58728449ULL)\n\ntypedef struct uint8_t_x2_s\n{\n  uint8_t fst;\n  uint8_t snd;\n}\nuint8_t_x2;\n\nuint8_t_x2\nlibcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(size_t index, size_t width);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $34size_t\n*/\ntypedef struct Eurydice_arr_48_s { uint8_t data[34U]; } Eurydice_arr_48;\n\nEurydice_arr_48\nlibcrux_ml_dsa_sample_add_domain_separator(Eurydice_borrow_slice_u8 slice, uint8_t_x2 indices);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $11size_t\n*/\ntypedef struct Eurydice_arr_cb_s { uint8_t data[11U]; } Eurydice_arr_cb;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_cb\n\n*/\ntypedef struct core_option_Option_b5_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_cb f0;\n}\ncore_option_Option_b5;\n\ntypedef struct libcrux_ml_dsa_pre_hash_DomainSeparationContext_s\n{\n  Eurydice_borrow_slice_u8 context;\n  core_option_Option_b5 pre_hash_oid;\n}\nlibcrux_ml_dsa_pre_hash_DomainSeparationContext;\n\n#define libcrux_ml_dsa_pre_hash_DomainSeparationError_ContextTooLongError 0\n\ntypedef uint8_t libcrux_ml_dsa_pre_hash_DomainSeparationError;\n\n/**\nA monomorphic instance of core.result.Result\nwith types libcrux_ml_dsa_pre_hash_DomainSeparationContext, libcrux_ml_dsa_pre_hash_DomainSeparationError\n\n*/\ntypedef struct core_result_Result_a8_s\n{\n  core_result_Result_a8_tags tag;\n  union {\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext case_Ok;\n    libcrux_ml_dsa_pre_hash_DomainSeparationError case_Err;\n  }\n  val;\n}\ncore_result_Result_a8;\n\n/**\n `context` must be at most 255 bytes long.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::pre_hash::DomainSeparationContext<'a>}\n*/\ncore_result_Result_a8\nlibcrux_ml_dsa_pre_hash_new_88(\n  Eurydice_borrow_slice_u8 context,\n  core_option_Option_b5 pre_hash_oid\n);\n\n/**\n Returns the pre-hash OID, if any.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::pre_hash::DomainSeparationContext<'a>}\n*/\nconst\ncore_option_Option_b5\n*libcrux_ml_dsa_pre_hash_pre_hash_oid_88(\n  const libcrux_ml_dsa_pre_hash_DomainSeparationContext *self\n);\n\n/**\n Returns the context, guaranteed to be at most 255 bytes long.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::pre_hash::DomainSeparationContext<'a>}\n*/\nEurydice_borrow_slice_u8\nlibcrux_ml_dsa_pre_hash_context_88(const libcrux_ml_dsa_pre_hash_DomainSeparationContext *self);\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_COMMITMENT_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_commitment_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_COMMITMENT_COEFFICIENT))\n\nbool\nlibcrux_ml_dsa_sample_inside_out_shuffle(\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *out_index,\n  uint64_t *signs,\n  Eurydice_arr_c3 *result\n);\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA (libcrux_ml_dsa_constants_beta(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ONES_IN_VERIFIER_CHALLENGE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_GAMMA1_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_gamma1_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_GAMMA1_COEFFICIENT))\n\n/**\nThis function found in impl {libcrux_ml_dsa::pre_hash::PreHash for libcrux_ml_dsa::pre_hash::SHAKE128_PH}\n*/\nEurydice_arr_cb libcrux_ml_dsa_pre_hash_oid_30(void);\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_VERIFICATION_KEY_SIZE (libcrux_ml_dsa_constants_verification_key_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_SIGNATURE_SIZE (libcrux_ml_dsa_constants_signature_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COMMITMENT_HASH_SIZE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_BITS_PER_GAMMA1_COEFFICIENT))\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_shared\nwith types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t\n\n*/\nEurydice_dst_ref_shared_fc\nEurydice_slice_subslice_shared_46(Eurydice_dst_ref_shared_fc s, core_ops_range_Range_08 r);\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_error_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_ERROR_COEFFICIENT))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_COMMITMENT_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_commitment_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_COMMITMENT_COEFFICIENT))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA (libcrux_ml_dsa_constants_beta(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ONES_IN_VERIFIER_CHALLENGE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_GAMMA1_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_gamma1_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_GAMMA1_COEFFICIENT))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_VERIFICATION_KEY_SIZE (libcrux_ml_dsa_constants_verification_key_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_SIGNATURE_SIZE (libcrux_ml_dsa_constants_signature_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COMMITMENT_HASH_SIZE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_BITS_PER_GAMMA1_COEFFICIENT))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_error_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_ERROR_COEFFICIENT))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_COMMITMENT_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_commitment_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_COMMITMENT_COEFFICIENT))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA (libcrux_ml_dsa_constants_beta(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ONES_IN_VERIFIER_CHALLENGE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_GAMMA1_RING_ELEMENT_SIZE (libcrux_ml_dsa_constants_gamma1_ring_element_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_GAMMA1_COEFFICIENT))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_VERIFICATION_KEY_SIZE (libcrux_ml_dsa_constants_verification_key_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A))\n\n#define LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_SIGNATURE_SIZE (libcrux_ml_dsa_constants_signature_size(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COMMITMENT_HASH_SIZE, LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_BITS_PER_GAMMA1_COEFFICIENT))\n\ntypedef Eurydice_arr_38 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87Signature;\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_c5\nwith const generics\n- SIZE= 4627\n*/\nconst Eurydice_arr_38 *libcrux_ml_dsa_types_as_ref_c5_c2(const Eurydice_arr_38 *self);\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_7f\nwith const generics\n- SIZE= 2592\n*/\nconst Eurydice_arr_51 *libcrux_ml_dsa_types_as_ref_7f_d8(const Eurydice_arr_51 *self);\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_9b\nwith const generics\n- SIZE= 4896\n*/\nconst Eurydice_arr_180 *libcrux_ml_dsa_types_as_ref_9b_32(const Eurydice_arr_180 *self);\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_7f\nwith const generics\n- SIZE= 2592\n*/\nEurydice_arr_51 libcrux_ml_dsa_types_new_7f_d8(Eurydice_arr_51 value);\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_9b\nwith const generics\n- SIZE= 4896\n*/\nEurydice_arr_180 libcrux_ml_dsa_types_new_9b_32(Eurydice_arr_180 value);\n\ntypedef Eurydice_arr_400 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44Signature;\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_c5\nwith const generics\n- SIZE= 2420\n*/\nconst Eurydice_arr_400 *libcrux_ml_dsa_types_as_ref_c5_1a(const Eurydice_arr_400 *self);\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_7f\nwith const generics\n- SIZE= 1312\n*/\nconst Eurydice_arr_40 *libcrux_ml_dsa_types_as_ref_7f_db(const Eurydice_arr_40 *self);\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_9b\nwith const generics\n- SIZE= 2560\n*/\nconst Eurydice_arr_18 *libcrux_ml_dsa_types_as_ref_9b_ff(const Eurydice_arr_18 *self);\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_7f\nwith const generics\n- SIZE= 1312\n*/\nEurydice_arr_40 libcrux_ml_dsa_types_new_7f_db(Eurydice_arr_40 value);\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_9b\nwith const generics\n- SIZE= 2560\n*/\nEurydice_arr_18 libcrux_ml_dsa_types_new_9b_ff(Eurydice_arr_18 value);\n\ntypedef Eurydice_arr_96 libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65Signature;\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_c5\nwith const generics\n- SIZE= 3309\n*/\nconst Eurydice_arr_96 *libcrux_ml_dsa_types_as_ref_c5_fa(const Eurydice_arr_96 *self);\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_7f\nwith const generics\n- SIZE= 1952\n*/\nconst Eurydice_arr_4a *libcrux_ml_dsa_types_as_ref_7f_97(const Eurydice_arr_4a *self);\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_9b\nwith const generics\n- SIZE= 4032\n*/\nconst Eurydice_arr_d1 *libcrux_ml_dsa_types_as_ref_9b_09(const Eurydice_arr_d1 *self);\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_7f\nwith const generics\n- SIZE= 1952\n*/\nEurydice_arr_4a libcrux_ml_dsa_types_new_7f_97(Eurydice_arr_4a value);\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_9b\nwith const generics\n- SIZE= 4032\n*/\nEurydice_arr_d1 libcrux_ml_dsa_types_new_9b_09(Eurydice_arr_d1 value);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $24size_t\n*/\ntypedef struct Eurydice_arr_6d_s { uint8_t data[24U]; } Eurydice_arr_6d;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 24\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_363(const Eurydice_arr_6d *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 24\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_369(Eurydice_arr_6d *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_46(Eurydice_arr_88 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_362(const Eurydice_arr_88 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_368(Eurydice_arr_88 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $19size_t\n*/\ntypedef struct Eurydice_arr_91_s { uint8_t data[19U]; } Eurydice_arr_91;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 19\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_361(const Eurydice_arr_91 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 19\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_367(Eurydice_arr_91 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t\n\n*/\nEurydice_dst_ref_mut_fc\nEurydice_slice_subslice_mut_46(Eurydice_dst_ref_mut_fc s, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_46(const Eurydice_arr_88 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_to_mut_6e(Eurydice_arr_60 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 4627\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_24(const Eurydice_arr_38 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2592\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_f7(const Eurydice_arr_51 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 4896\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_e2(const Eurydice_arr_180 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c3\nwith const generics\n- $8size_t\n*/\ntypedef struct Eurydice_arr_fb_s { Eurydice_arr_c3 data[8U]; } Eurydice_arr_fb;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_fb\n\n*/\ntypedef struct core_option_Option_b9_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_fb f0;\n}\ncore_option_Option_b9;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8\nwith const generics\n- $7size_t\n*/\ntypedef struct Eurydice_arr_25_s { Eurydice_arr_a4 data[7U]; } Eurydice_arr_25;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_25\n\n*/\ntypedef struct core_option_Option_0d_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_25 f0;\n}\ncore_option_Option_0d;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_060\n\n*/\ntypedef struct core_option_Option_d9_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_060 f0;\n}\ncore_option_Option_d9;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 4627\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_24(Eurydice_arr_38 *a);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types Eurydice_arr_c3, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_22_s\n{\n  const Eurydice_arr_c3 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_22;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 8\n*/\nEurydice_dst_ref_shared_22 Eurydice_array_to_slice_shared_6d1(const Eurydice_arr_fb *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 8\n*/\nEurydice_dst_ref_mut_22 Eurydice_array_to_slice_mut_6d1(Eurydice_arr_fb *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1024size_t\n*/\ntypedef struct Eurydice_arr_9e_s { uint8_t data[1024U]; } Eurydice_arr_9e;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1024\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_fd(const Eurydice_arr_9e *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1024\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_fd(Eurydice_arr_9e *a);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_e7_s\n{\n  const Eurydice_arr_a4 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_e7;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8\nwith const generics\n- $56size_t\n*/\ntypedef struct Eurydice_arr_46_s { Eurydice_arr_a4 data[56U]; } Eurydice_arr_46;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 56\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_718(const Eurydice_arr_46 *a);\n\n/**\n Init with zero\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.zero_c5\nwith const generics\n- SIZE= 4627\n*/\nEurydice_arr_38 libcrux_ml_dsa_types_zero_c5_c2(void);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 2592\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_f7(Eurydice_arr_51 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 4896\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_e2(Eurydice_arr_180 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8\nwith const generics\n- $15size_t\n*/\ntypedef struct Eurydice_arr_f8_s { Eurydice_arr_a4 data[15U]; } Eurydice_arr_f8;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 15\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_717(const Eurydice_arr_f8 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 7\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_716(const Eurydice_arr_25 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 15\n*/\nEurydice_dst_ref_shared_e7\nEurydice_array_to_subslice_shared_c31(const Eurydice_arr_f8 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 7\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_718(Eurydice_arr_25 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 56\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_717(Eurydice_arr_46 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 15\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_716(Eurydice_arr_f8 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 3309\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_ee0(const Eurydice_arr_96 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1952\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_5b(const Eurydice_arr_4a *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 4032\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_ef(const Eurydice_arr_d1 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c3\nwith const generics\n- $6size_t\n*/\ntypedef struct Eurydice_arr_b5_s { Eurydice_arr_c3 data[6U]; } Eurydice_arr_b5;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_b5\n\n*/\ntypedef struct core_option_Option_cb_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_b5 f0;\n}\ncore_option_Option_cb;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8\nwith const generics\n- $5size_t\n*/\ntypedef struct Eurydice_arr_b0_s { Eurydice_arr_a4 data[5U]; } Eurydice_arr_b0;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_b0\n\n*/\ntypedef struct core_option_Option_c8_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_b0 f0;\n}\ncore_option_Option_c8;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_5f\n\n*/\ntypedef struct core_option_Option_a6_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_5f f0;\n}\ncore_option_Option_a6;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 3309\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_ee0(Eurydice_arr_96 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 6\n*/\nEurydice_dst_ref_shared_22 Eurydice_array_to_slice_shared_6d0(const Eurydice_arr_b5 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 6\n*/\nEurydice_dst_ref_mut_22 Eurydice_array_to_slice_mut_6d0(Eurydice_arr_b5 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 48\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_95(const Eurydice_arr_5f *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8\nwith const generics\n- $30size_t\n*/\ntypedef struct Eurydice_arr_a1_s { Eurydice_arr_a4 data[30U]; } Eurydice_arr_a1;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 30\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_715(const Eurydice_arr_a1 *a);\n\n/**\n Init with zero\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.zero_c5\nwith const generics\n- SIZE= 3309\n*/\nEurydice_arr_96 libcrux_ml_dsa_types_zero_c5_fa(void);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1952\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_5b(Eurydice_arr_4a *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 4032\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_ef(Eurydice_arr_d1 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8\nwith const generics\n- $6size_t\n*/\ntypedef struct Eurydice_arr_a3_s { Eurydice_arr_a4 data[6U]; } Eurydice_arr_a3;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 6\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_714(const Eurydice_arr_a3 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 6\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_715(Eurydice_arr_a3 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8\nwith const generics\n- $11size_t\n*/\ntypedef struct Eurydice_arr_58_s { Eurydice_arr_a4 data[11U]; } Eurydice_arr_58;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 11\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_713(const Eurydice_arr_58 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 5\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_712(const Eurydice_arr_b0 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 11\n*/\nEurydice_dst_ref_shared_e7\nEurydice_array_to_subslice_shared_c30(const Eurydice_arr_58 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 5\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_714(Eurydice_arr_b0 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 30\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_713(Eurydice_arr_a1 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 11\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_712(Eurydice_arr_58 *a);\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.zero_ff\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nEurydice_arr_a4 libcrux_ml_dsa_polynomial_zero_ff_37(void);\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.from_i32_array_ff\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_polynomial_from_i32_array_ff_37(\n  Eurydice_dst_ref_shared_fc array,\n  Eurydice_arr_a4 *result\n);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types int32_t\nwith const generics\n- N= 256\n*/\nEurydice_dst_ref_shared_fc Eurydice_array_to_slice_shared_200(const Eurydice_arr_c3 *a);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.use_hint\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_arithmetic_use_hint_37(\n  int32_t gamma2,\n  Eurydice_dst_ref_shared_22 hint,\n  Eurydice_dst_ref_mut_e7 re_vector\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ntt.ntt\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid libcrux_ml_dsa_ntt_ntt_37(Eurydice_arr_a4 *re);\n\n/**\n Compute InvertNTT(Â ◦ ẑ - ĉ ◦ NTT(t₁2ᵈ))\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.compute_w_approx\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_compute_w_approx_37(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  Eurydice_dst_ref_shared_e7 matrix,\n  Eurydice_dst_ref_shared_e7 signer_response,\n  const Eurydice_arr_a4 *verifier_challenge_as_ntt,\n  Eurydice_dst_ref_mut_e7 t1\n);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2420\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_180(const Eurydice_arr_400 *a);\n\ntypedef struct Eurydice_borrow_slice_u8_x2_s\n{\n  Eurydice_borrow_slice_u8 fst;\n  Eurydice_borrow_slice_u8 snd;\n}\nEurydice_borrow_slice_u8_x2;\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.gamma1.deserialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_gamma1_deserialize_37(\n  size_t gamma1_exponent,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_arr_a4 *result\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.signature.deserialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_encoding_signature_deserialize_37(\n  size_t columns_in_a,\n  size_t rows_in_a,\n  size_t commitment_hash_size,\n  size_t gamma1_exponent,\n  size_t gamma1_ring_element_size,\n  size_t max_ones_in_hint,\n  size_t signature_size,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_mut_borrow_slice_u8 out_commitment_hash,\n  Eurydice_dst_ref_mut_e7 out_signer_response,\n  Eurydice_dst_ref_mut_22 out_hint\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.verification_key.deserialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_verification_key_deserialize_37(\n  size_t rows_in_a,\n  size_t verification_key_size,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_dst_ref_mut_e7 t1\n);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1312\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_bb(const Eurydice_arr_40 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2560\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_59(const Eurydice_arr_18 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c3\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_83_s { Eurydice_arr_c3 data[4U]; } Eurydice_arr_83;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_83\n\n*/\ntypedef struct core_option_Option_cf_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_83 f0;\n}\ncore_option_Option_cf;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_a80_s { Eurydice_arr_a4 data[4U]; } Eurydice_arr_a80;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_a80\n\n*/\ntypedef struct core_option_Option_43_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_a80 f0;\n}\ncore_option_Option_43;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_60\n\n*/\ntypedef struct core_option_Option_90_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_60 f0;\n}\ncore_option_Option_90;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 2420\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_180(Eurydice_arr_400 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 4\n*/\nEurydice_dst_ref_shared_22 Eurydice_array_to_slice_shared_6d(const Eurydice_arr_83 *a);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.signature.serialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_signature_serialize_37(\n  Eurydice_borrow_slice_u8 commitment_hash,\n  Eurydice_dst_ref_shared_e7 signer_response,\n  Eurydice_dst_ref_shared_22 hint,\n  size_t commitment_hash_size,\n  size_t columns_in_a,\n  size_t rows_in_a,\n  size_t gamma1_exponent,\n  size_t gamma1_ring_element_size,\n  size_t max_ones_in_hint,\n  Eurydice_mut_borrow_slice_u8 signature\n);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 4\n*/\nEurydice_dst_ref_mut_22 Eurydice_array_to_slice_mut_6d(Eurydice_arr_83 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t\nwith const generics\n- N= 256\n*/\nEurydice_dst_ref_mut_fc\nEurydice_array_to_subslice_mut_7f(Eurydice_arr_c3 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.make_hint\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nsize_t\nlibcrux_ml_dsa_arithmetic_make_hint_37(\n  Eurydice_dst_ref_shared_e7 low,\n  Eurydice_dst_ref_shared_e7 high,\n  int32_t gamma2,\n  Eurydice_dst_ref_mut_22 hint\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.vector_infinity_norm_exceeds\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nbool\nlibcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(\n  Eurydice_dst_ref_shared_e7 vector,\n  int32_t bound\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.subtract_vectors\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_subtract_vectors_37(\n  size_t dimension,\n  Eurydice_dst_ref_mut_e7 lhs,\n  Eurydice_dst_ref_shared_e7 rhs\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.add_vectors\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_add_vectors_37(\n  size_t dimension,\n  Eurydice_dst_ref_mut_e7 lhs,\n  Eurydice_dst_ref_shared_e7 rhs\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.vector_times_ring_element\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_vector_times_ring_element_37(\n  Eurydice_dst_ref_mut_e7 vector,\n  const Eurydice_arr_a4 *ring_element\n);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_8c(const Eurydice_arr_3d *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_360(const Eurydice_arr_3d *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $768size_t\n*/\ntypedef struct Eurydice_arr_56_s { uint8_t data[768U]; } Eurydice_arr_56;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_ee(const Eurydice_arr_56 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_ee(Eurydice_arr_56 *a);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.commitment.serialize_vector\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_commitment_serialize_vector_37(\n  size_t ring_element_size,\n  Eurydice_dst_ref_shared_e7 vector,\n  Eurydice_mut_borrow_slice_u8 serialized\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.decompose_vector\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_arithmetic_decompose_vector_37(\n  size_t dimension,\n  int32_t gamma2,\n  Eurydice_dst_ref_shared_e7 t,\n  Eurydice_dst_ref_mut_e7 low,\n  Eurydice_dst_ref_mut_e7 high\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_66_s { Eurydice_arr_a4 data[16U]; } Eurydice_arr_66;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 16\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_711(const Eurydice_arr_66 *a);\n\n/**\n Compute InvertNTT(Â ◦ ŷ)\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.compute_matrix_x_mask\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_compute_matrix_x_mask_37(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  Eurydice_dst_ref_shared_e7 matrix,\n  Eurydice_dst_ref_shared_e7 mask,\n  Eurydice_dst_ref_mut_e7 result\n);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 640\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_7d0(const Eurydice_arr_c30 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 640\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_7d(Eurydice_arr_c30 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 576\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_fa(const Eurydice_arr_5f0 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 576\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_fa(Eurydice_arr_5f0 *a);\n\n/**\nA monomorphic instance of core.option.Option\nwith types libcrux_ml_dsa_pre_hash_DomainSeparationContext\n\n*/\ntypedef struct core_option_Option_84_s\n{\n  core_option_Option_08_tags tag;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext f0;\n}\ncore_option_Option_84;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 11\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_da(const Eurydice_arr_cb *a);\n\n/**\n Returns `true` if the option is a [`Some`] value.\n\n # Examples\n\n ```\n let x: Option<u32> = Some(2);\n assert_eq!(x.is_some(), true);\n\n let x: Option<u32> = None;\n assert_eq!(x.is_some(), false);\n ```\n*/\n/**\nThis function found in impl {core::option::Option<T>[TraitClause@0]}\n*/\n/**\nA monomorphic instance of core.option.is_some_cd\nwith types Eurydice_arr uint8_t[[$11size_t]]\n\n*/\nbool core_option_is_some_cd_4e(const core_option_Option_b5 *self);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_f10_s { uint8_t data[1U]; } Eurydice_arr_f10;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_07(const Eurydice_arr_f10 *a);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t0.deserialize_to_vector_then_ntt\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_t0_deserialize_to_vector_then_ntt_37(\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_dst_ref_mut_e7 ring_elements\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.error.deserialize_to_vector_then_ntt\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(\n  libcrux_ml_dsa_constants_Eta eta,\n  size_t ring_element_size,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_dst_ref_mut_e7 ring_elements\n);\n\n/**\n Init with zero\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.zero_c5\nwith const generics\n- SIZE= 2420\n*/\nEurydice_arr_400 libcrux_ml_dsa_types_zero_c5_1a(void);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1312\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_bb(Eurydice_arr_40 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 2560\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_59(Eurydice_arr_18 *a);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t0.serialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_t0_serialize_37(\n  const Eurydice_arr_a4 *re,\n  Eurydice_mut_borrow_slice_u8 serialized\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.error.serialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_error_serialize_37(\n  libcrux_ml_dsa_constants_Eta eta,\n  const Eurydice_arr_a4 *re,\n  Eurydice_mut_borrow_slice_u8 serialized\n);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_d8(const Eurydice_arr_060 *a);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.verification_key.generate_serialized\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_verification_key_generate_serialized_37(\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_shared_e7 t1,\n  Eurydice_mut_borrow_slice_u8 verification_key_serialized\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.power2round_vector\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_arithmetic_power2round_vector_37(\n  Eurydice_dst_ref_mut_e7 t,\n  Eurydice_dst_ref_mut_e7 t1\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8\nwith const generics\n- $8size_t\n*/\ntypedef struct Eurydice_arr_db_s { Eurydice_arr_a4 data[8U]; } Eurydice_arr_db;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 8\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_710(const Eurydice_arr_db *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 4\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_71(const Eurydice_arr_a80 *a);\n\n/**\n Compute InvertNTT(Â ◦ ŝ₁) + s₂\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.compute_as1_plus_s2\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_compute_as1_plus_s2_37(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  Eurydice_dst_ref_mut_e7 a_as_ntt,\n  Eurydice_dst_ref_shared_e7 s1_ntt,\n  Eurydice_dst_ref_shared_e7 s1_s2,\n  Eurydice_dst_ref_mut_e7 result\n);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 8\n*/\nEurydice_dst_ref_shared_e7\nEurydice_array_to_subslice_shared_c3(const Eurydice_arr_db *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 4\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_711(Eurydice_arr_a80 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 16\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_710(Eurydice_arr_66 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int32_t\nwith const generics\n- $263size_t\n*/\ntypedef struct Eurydice_arr_13_s { int32_t data[263U]; } Eurydice_arr_13;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types Eurydice_arr_13, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_4c_s\n{\n  Eurydice_arr_13 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_4c;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_13\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_380_s { Eurydice_arr_13 data[4U]; } Eurydice_arr_380;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types Eurydice_arr int32_t[[$263size_t]]\nwith const generics\n- N= 4\n*/\nEurydice_dst_ref_mut_4c Eurydice_array_to_slice_mut_f6(Eurydice_arr_380 *a);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types Eurydice_arr_13, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_4c_s\n{\n  const Eurydice_arr_13 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_4c;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 840\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_a8(const Eurydice_arr_12 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types int32_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice int32_t\nwith const generics\n- N= 263\n*/\nEurydice_dst_ref_mut_fc Eurydice_array_to_subslice_from_mut_96(Eurydice_arr_13 *a, size_t r);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_field_modulus\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nbool\nlibcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *sampled_coefficients,\n  Eurydice_arr_13 *out\n);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 34\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_8d(const Eurydice_arr_48 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 8\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_71(Eurydice_arr_db *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types int32_t\nwith const generics\n- N= 263\n*/\nEurydice_dst_ref_shared_fc Eurydice_array_to_slice_shared_20(const Eurydice_arr_13 *a);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_eta\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nbool\nlibcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *sampled,\n  Eurydice_arr_13 *out\n);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 66\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_39(const Eurydice_arr_a2 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $128size_t\n*/\ntypedef struct Eurydice_arr_d10_s { uint8_t data[128U]; } Eurydice_arr_d10;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 128\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_18(const Eurydice_arr_d10 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 128\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_18(Eurydice_arr_d10 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_26(const Eurydice_array_u8x2 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_6e(const Eurydice_arr_60 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_7b(Eurydice_arr_27 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 840\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_a8(Eurydice_arr_12 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_d4(Eurydice_arr_3d *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_36(const Eurydice_arr_60 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_3d\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_1a_s { Eurydice_arr_3d data[4U]; } Eurydice_arr_1a;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_27\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_b3_s { Eurydice_arr_27 data[4U]; } Eurydice_arr_b3;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_borrow_slice_u8\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_cd_s { Eurydice_borrow_slice_u8 data[4U]; } Eurydice_arr_cd;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_364(Eurydice_arr_60 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_27\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_3a_s { Eurydice_arr_27 data[1U]; } Eurydice_arr_3a;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_d8(Eurydice_arr_060 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $72size_t\n*/\ntypedef struct Eurydice_arr_a0_s { uint8_t data[72U]; } Eurydice_arr_a0;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_7d(const Eurydice_arr_a0 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_363(Eurydice_arr_a0 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_borrow_slice_u8\nEurydice_slice_subslice_to_shared_c6(Eurydice_borrow_slice_u8 s, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_8c(Eurydice_arr_3d *a, size_t r);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mldsa_core_H_DEFINED\n#endif /* internal_libcrux_mldsa_core_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/internal/libcrux_mldsa_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mldsa_portable_H\n#define internal_libcrux_mldsa_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mldsa_core.h\"\n#include \"libcrux_mldsa_core.h\"\n#include \"../libcrux_mldsa_portable.h\"\n\n/**\n This corresponds to line 6 in algorithm 7 in FIPS 204 (line 7 in algorithm\n 8, resp.).\n\n If `domain_separation_context` is supplied, applies domain\n separation and length encoding to the context string,\n before appending the message (in the regular variant) or the\n pre-hash OID as well as the pre-hashed message digest. Otherwise,\n it is assumed that `message` already contains domain separation\n information.\n\n In FIPS 204 M' is the concatenation of the domain separated context, any\n potential pre-hash OID and the message (or the message pre-hash). We do not\n explicitely construct the concatenation in memory since it is of statically unknown\n length, but feed its components directly into the incremental XOF.\n\n Refer to line 10 of Algorithm 2 (and line 5 of Algorithm 3, resp.) in [FIPS\n 204](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.pdf#section.5)\n for details on the domain separation for regular ML-DSA. Line\n 23 of Algorithm 4 (and line 18 of Algorithm 5,resp.) describe domain separation for the HashMl-DSA\n variant.\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.derive_message_representative\nwith types libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(\n  Eurydice_borrow_slice_u8 verification_key_hash,\n  const core_option_Option_84 *domain_separation_context,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_arr_060 *message_representative\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::pre_hash::PreHash for libcrux_ml_dsa::pre_hash::SHAKE128_PH}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.pre_hash.hash_30\nwith types libcrux_ml_dsa_hash_functions_portable_Shake128\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_pre_hash_hash_30_83(\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mldsa_portable_H_DEFINED\n#endif /* internal_libcrux_mldsa_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/internal/libcrux_sha3_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_sha3_avx2_H\n#define internal_libcrux_sha3_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mldsa_core.h\"\n#include \"libcrux_mldsa_core.h\"\n#include \"../libcrux_sha3_avx2.h\"\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.new_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nEurydice_arr_05 libcrux_sha3_generic_keccak_new_80_a6(void);\n\n/**\nA monomorphic instance of libcrux_sha3.traits.set_ij\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_traits_set_ij_a6(Eurydice_arr_05 *arr, size_t i, size_t j, __m256i value);\n\n/**\nA monomorphic instance of libcrux_sha3.traits.get_ij\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nconst __m256i *libcrux_sha3_traits_get_ij_a6(const Eurydice_arr_05 *arr, size_t i, size_t j);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types core_core_arch_x86___m256i\nwith const generics\n- $5size_t\n*/\ntypedef struct Eurydice_arr_c0_s { __m256i data[5U]; } Eurydice_arr_c0;\n\n/**\nThis function found in impl {core::ops::index::Index<(usize, usize), T> for libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.index_c2\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nconst\n__m256i\n*libcrux_sha3_generic_keccak_index_c2_a6(const Eurydice_arr_05 *self, size_t_x2 index);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.theta_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nEurydice_arr_c0 libcrux_sha3_generic_keccak_theta_80_a6(Eurydice_arr_05 *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.set_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid\nlibcrux_sha3_generic_keccak_set_80_a6(Eurydice_arr_05 *self, size_t i, size_t j, __m256i v);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_0_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_rho_0_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_1_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_rho_1_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_2_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_rho_2_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_3_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_rho_3_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_4_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_rho_4_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_rho_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_0_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_pi_0_80_a6(Eurydice_arr_05 *self, Eurydice_arr_05 old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_1_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_pi_1_80_a6(Eurydice_arr_05 *self, Eurydice_arr_05 old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_2_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_pi_2_80_a6(Eurydice_arr_05 *self, Eurydice_arr_05 old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_3_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_pi_3_80_a6(Eurydice_arr_05 *self, Eurydice_arr_05 old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_4_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_pi_4_80_a6(Eurydice_arr_05 *self, Eurydice_arr_05 old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_pi_80_a6(Eurydice_arr_05 *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.chi_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_chi_80_a6(Eurydice_arr_05 *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.iota_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_iota_80_a6(Eurydice_arr_05 *self, size_t i);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid libcrux_sha3_generic_keccak_keccakf1600_80_a6(Eurydice_arr_05 *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 168\n- DELIM= 31\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_fb(\n  Eurydice_arr_05 *self,\n  const Eurydice_arr_cd *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 136\n- DELIM= 31\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_fb0(\n  Eurydice_arr_05 *self,\n  const Eurydice_arr_cd *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_97(\n  Eurydice_arr_05 *self,\n  const Eurydice_arr_cd *input,\n  size_t start\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_sha3_avx2_H_DEFINED\n#endif /* internal_libcrux_sha3_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/internal/libcrux_sha3_internal.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_sha3_internal_H\n#define internal_libcrux_sha3_internal_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mldsa_core.h\"\n#include \"libcrux_mldsa_core.h\"\n#include \"../libcrux_sha3_internal.h\"\n\n/**\n Create a new SHAKE-128 state object.\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_26 libcrux_sha3_portable_incremental_shake128_init(void)\n{\n  return libcrux_sha3_generic_keccak_new_80_04();\n}\n\n/**\n Absorb\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake128_absorb_final(\n  Eurydice_arr_26 *s,\n  Eurydice_borrow_slice_u8 data0\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_06 lvalue = { .data = { data0 } };\n  libcrux_sha3_generic_keccak_absorb_final_80_9e(s, &lvalue, (size_t)0U, data0.meta);\n}\n\n/**\n Create a new SHAKE-256 state object.\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_26 libcrux_sha3_portable_incremental_shake256_init(void)\n{\n  return libcrux_sha3_generic_keccak_new_80_04();\n}\n\n/**\n Absorb some data for SHAKE-256 for the last time\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake256_absorb_final(\n  Eurydice_arr_26 *s,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_06 lvalue = { .data = { data } };\n  libcrux_sha3_generic_keccak_absorb_final_80_9e0(s, &lvalue, (size_t)0U, data.meta);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_block_b4\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_5b(\n  const Eurydice_arr_26 *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_simd_portable_squeeze_9b_5b(self, out, (size_t)0U, (size_t)136U);\n}\n\n/**\n Squeeze the first SHAKE-256 block\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_26 *s,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_5b(&s[0U], out);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_five_blocks_b4\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_3a(\n  Eurydice_arr_26 *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_simd_portable_squeeze_9b_3a(self, out, (size_t)0U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n  libcrux_sha3_simd_portable_squeeze_9b_3a(self, out, (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n  libcrux_sha3_simd_portable_squeeze_9b_3a(self, out, (size_t)2U * (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n  libcrux_sha3_simd_portable_squeeze_9b_3a(self, out, (size_t)3U * (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n  libcrux_sha3_simd_portable_squeeze_9b_3a(self, out, (size_t)4U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze five blocks\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_26 *s,\n  Eurydice_mut_borrow_slice_u8 out0\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_3a(s, out0);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_3a(\n  Eurydice_arr_26 *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start\n)\n{\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n  libcrux_sha3_simd_portable_squeeze_9b_3a(self, out, start, (size_t)168U);\n}\n\n/**\n Squeeze another block\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_26 *s,\n  Eurydice_mut_borrow_slice_u8 out0\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_3a(s, out0, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_5b(\n  Eurydice_arr_26 *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start\n)\n{\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n  libcrux_sha3_simd_portable_squeeze_9b_5b(self, out, start, (size_t)136U);\n}\n\n/**\n Squeeze the next SHAKE-256 block\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_26 *s,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_5b(s, out, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.fill_buffer_35\nwith types uint64_t\nwith const generics\n- PARALLEL_LANES= 1\n- RATE= 136\n*/\nstatic inline size_t\nlibcrux_sha3_generic_keccak_xof_fill_buffer_35_c6(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  const Eurydice_arr_06 *inputs\n)\n{\n  size_t input_len = inputs->data->meta;\n  size_t uu____0;\n  if (self->buf_len != (size_t)0U)\n  {\n    if (input_len >= (size_t)136U - self->buf_len)\n    {\n      size_t consumed = (size_t)136U - self->buf_len;\n      {\n        size_t i = (size_t)0U;\n        Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_8c(&self->buf.data[i],\n            self->buf_len),\n          Eurydice_slice_subslice_to_shared_c6(inputs->data[i], consumed),\n          uint8_t);\n      }\n      self->buf_len = (size_t)136U;\n      uu____0 = consumed;\n    }\n    else\n    {\n      uu____0 = (size_t)0U;\n    }\n  }\n  else\n  {\n    uu____0 = (size_t)0U;\n  }\n  return uu____0;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices.closure\nwith const generics\n- $1size_t\n- $136size_t\n*/\ntypedef const Eurydice_arr_3e *libcrux_sha3_generic_keccak_xof_buf_to_slices_closure_cc;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), &'_ ([u8])> for libcrux_sha3::generic_keccak::xof::buf_to_slices::closure<0, PARALLEL_LANES, RATE>}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices.call_mut_2a\nwith const generics\n- PARALLEL_LANES= 1\n- RATE= 136\n*/\nstatic inline Eurydice_borrow_slice_u8\nlibcrux_sha3_generic_keccak_xof_buf_to_slices_call_mut_2a_5b(\n  const Eurydice_arr_3e **_,\n  size_t tupled_args\n)\n{\n  size_t i = tupled_args;\n  return\n    core_array___T__N___as_slice((size_t)136U,\n      &_[0U]->data[i],\n      uint8_t,\n      Eurydice_borrow_slice_u8);\n}\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), &'_ ([u8])> for libcrux_sha3::generic_keccak::xof::buf_to_slices::closure<0, PARALLEL_LANES, RATE>}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices.call_once_fa\nwith const generics\n- PARALLEL_LANES= 1\n- RATE= 136\n*/\nstatic inline Eurydice_borrow_slice_u8\nlibcrux_sha3_generic_keccak_xof_buf_to_slices_call_once_fa_5b(\n  const Eurydice_arr_3e *_,\n  size_t _0\n)\n{\n  return libcrux_sha3_generic_keccak_xof_buf_to_slices_call_mut_2a_5b(&_, _0);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.buf_to_slices\nwith const generics\n- PARALLEL_LANES= 1\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_06\nlibcrux_sha3_generic_keccak_xof_buf_to_slices_5b(const Eurydice_arr_3e *buf)\n{\n  Eurydice_arr_06 arr_struct;\n  {\n    arr_struct.data[0U] =\n      libcrux_sha3_generic_keccak_xof_buf_to_slices_call_mut_2a_5b(&buf,\n        (size_t)0U);\n  }\n  return arr_struct;\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_full_35\nwith types uint64_t\nwith const generics\n- PARALLEL_LANES= 1\n- RATE= 136\n*/\nstatic inline size_t\nlibcrux_sha3_generic_keccak_xof_absorb_full_35_c6(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  const Eurydice_arr_06 *inputs\n)\n{\n  size_t consumed = libcrux_sha3_generic_keccak_xof_fill_buffer_35_c6(self, inputs);\n  if (self->buf_len == (size_t)136U)\n  {\n    Eurydice_arr_06 borrowed = libcrux_sha3_generic_keccak_xof_buf_to_slices_5b(&self->buf);\n    libcrux_sha3_simd_portable_load_block_a1_5b(&self->inner, &borrowed, (size_t)0U);\n    libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner);\n    self->buf_len = (size_t)0U;\n  }\n  size_t input_to_consume = inputs->data->meta - consumed;\n  size_t num_blocks = input_to_consume / (size_t)136U;\n  size_t remainder = input_to_consume % (size_t)136U;\n  for (size_t i = (size_t)0U; i < num_blocks; i++)\n  {\n    size_t i0 = i;\n    size_t start = i0 * (size_t)136U + consumed;\n    libcrux_sha3_simd_portable_load_block_a1_5b(&self->inner, inputs, start);\n    libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner);\n  }\n  return remainder;\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_35\nwith types uint64_t\nwith const generics\n- PARALLEL_LANES= 1\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_xof_absorb_35_c6(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  const Eurydice_arr_06 *inputs\n)\n{\n  size_t remainder = libcrux_sha3_generic_keccak_xof_absorb_full_35_c6(self, inputs);\n  if (remainder > (size_t)0U)\n  {\n    size_t input_len = inputs->data->meta;\n    {\n      size_t i = (size_t)0U;\n      Eurydice_slice_copy(Eurydice_array_to_subslice_mut_362(&self->buf.data[i],\n          (\n            KRML_CLITERAL(core_ops_range_Range_08){\n              .start = self->buf_len,\n              .end = self->buf_len + remainder\n            }\n          )),\n        Eurydice_slice_subslice_shared_7e(inputs->data[i],\n          (\n            KRML_CLITERAL(core_ops_range_Range_08){\n              .start = input_len - remainder,\n              .end = input_len\n            }\n          )),\n        uint8_t);\n    }\n    self->buf_len = self->buf_len + remainder;\n  }\n}\n\n/**\n Shake256 absorb\n*/\n/**\nThis function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> for libcrux_sha3::portable::incremental::Shake256Xof}\n*/\nstatic inline void\nlibcrux_sha3_portable_incremental_absorb_42(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  Eurydice_borrow_slice_u8 input\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_06 lvalue = { .data = { input } };\n  libcrux_sha3_generic_keccak_xof_absorb_35_c6(self, &lvalue);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.absorb_final_35\nwith types uint64_t\nwith const generics\n- PARALLEL_LANES= 1\n- RATE= 136\n- DELIMITER= 31\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_xof_absorb_final_35_9e(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  const Eurydice_arr_06 *inputs\n)\n{\n  libcrux_sha3_generic_keccak_xof_absorb_35_c6(self, inputs);\n  Eurydice_arr_06 borrowed = libcrux_sha3_generic_keccak_xof_buf_to_slices_5b(&self->buf);\n  libcrux_sha3_simd_portable_load_last_a1_ad(&self->inner, &borrowed, (size_t)0U, self->buf_len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner);\n}\n\n/**\n Shake256 absorb final\n*/\n/**\nThis function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> for libcrux_sha3::portable::incremental::Shake256Xof}\n*/\nstatic inline void\nlibcrux_sha3_portable_incremental_absorb_final_42(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  Eurydice_borrow_slice_u8 input\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_06 lvalue = { .data = { input } };\n  libcrux_sha3_generic_keccak_xof_absorb_final_35_9e(self, &lvalue);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.zero_block_35\nwith types uint64_t\nwith const generics\n- PARALLEL_LANES= 1\n- RATE= 136\n*/\nstatic inline Eurydice_arr_3d libcrux_sha3_generic_keccak_xof_zero_block_35_c6(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_3d){ .data = { 0U } });\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, PARALLEL_LANES, RATE>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.new_35\nwith types uint64_t\nwith const generics\n- PARALLEL_LANES= 1\n- RATE= 136\n*/\nstatic inline libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\nlibcrux_sha3_generic_keccak_xof_new_35_c6(void)\n{\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 lit;\n  lit.inner = libcrux_sha3_generic_keccak_new_80_04();\n  Eurydice_arr_3d repeat_expression[1U];\n  {\n    repeat_expression[0U] = libcrux_sha3_generic_keccak_xof_zero_block_35_c6();\n  }\n  memcpy(lit.buf.data, repeat_expression, (size_t)1U * sizeof (Eurydice_arr_3d));\n  lit.buf_len = (size_t)0U;\n  lit.sponge = false;\n  return lit;\n}\n\n/**\n Shake256 new state\n*/\n/**\nThis function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> for libcrux_sha3::portable::incremental::Shake256Xof}\n*/\nstatic inline libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\nlibcrux_sha3_portable_incremental_new_42(void)\n{\n  return libcrux_sha3_generic_keccak_xof_new_35_c6();\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::xof::KeccakXofState<STATE, 1usize, RATE>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.squeeze_85\nwith types uint64_t\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_xof_squeeze_85_c7(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  size_t out_len = out.meta;\n  if (!(out_len == (size_t)0U))\n  {\n    if (self->sponge)\n    {\n      libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner);\n    }\n    if (out_len > (size_t)0U)\n    {\n      size_t blocks = out_len / (size_t)136U;\n      size_t last = out_len - out_len % (size_t)136U;\n      if (blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_5b(&self->inner, out, (size_t)0U, out_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_5b(&self->inner, out, (size_t)0U, (size_t)136U);\n        for (size_t i = (size_t)1U; i < blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner);\n          libcrux_sha3_simd_portable_squeeze_9b_5b(&self->inner,\n            out,\n            i0 * (size_t)136U,\n            (size_t)136U);\n        }\n        if (last < out_len)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&self->inner);\n          libcrux_sha3_simd_portable_squeeze_9b_5b(&self->inner, out, last, out_len - last);\n        }\n      }\n    }\n    self->sponge = true;\n  }\n}\n\n/**\n Shake256 squeeze\n*/\n/**\nThis function found in impl {libcrux_sha3::portable::incremental::Xof<136usize> for libcrux_sha3::portable::incremental::Shake256Xof}\n*/\nstatic inline void\nlibcrux_sha3_portable_incremental_squeeze_42(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_generic_keccak_xof_squeeze_85_c7(self, out);\n}\n\n#define libcrux_sha3_Algorithm_Sha224 1\n#define libcrux_sha3_Algorithm_Sha256 2\n#define libcrux_sha3_Algorithm_Sha384 3\n#define libcrux_sha3_Algorithm_Sha512 4\n\ntypedef uint8_t libcrux_sha3_Algorithm;\n\n#define LIBCRUX_SHA3_SHA3_224_DIGEST_SIZE ((size_t)28U)\n\n#define LIBCRUX_SHA3_SHA3_256_DIGEST_SIZE ((size_t)32U)\n\n#define LIBCRUX_SHA3_SHA3_384_DIGEST_SIZE ((size_t)48U)\n\n#define LIBCRUX_SHA3_SHA3_512_DIGEST_SIZE ((size_t)64U)\n\n/**\n Returns the output size of a digest.\n*/\nstatic inline size_t libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode)\n{\n  switch (mode)\n  {\n    case libcrux_sha3_Algorithm_Sha224:\n      {\n        break;\n      }\n    case libcrux_sha3_Algorithm_Sha256:\n      {\n        return LIBCRUX_SHA3_SHA3_256_DIGEST_SIZE;\n      }\n    case libcrux_sha3_Algorithm_Sha384:\n      {\n        return LIBCRUX_SHA3_SHA3_384_DIGEST_SIZE;\n      }\n    case libcrux_sha3_Algorithm_Sha512:\n      {\n        return LIBCRUX_SHA3_SHA3_512_DIGEST_SIZE;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  return LIBCRUX_SHA3_SHA3_224_DIGEST_SIZE;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 72\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_f8(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_26 state_flat = { .data = { 0U } };\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = (size_t)72U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_04(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_04(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_shared_7e(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_ab((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 72\n- DELIMITER= 6\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_96(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_a0 buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_363(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_7e(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)72U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_f8(state,\n    Eurydice_array_to_slice_shared_7d(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 72\n- DELIMITER= 6\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_last_a1_96(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_96(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 72\n- DELIM= 6\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_9e1(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_96(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 72\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_f8(\n  const Eurydice_arr_26 *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_04(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_shared_41(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_04(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_7e(out,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0,\n      Eurydice_array_to_subslice_to_shared_6e(&bytes, remaining),\n      uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 72\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_squeeze_9b_f8(\n  const Eurydice_arr_26 *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_f8(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 72\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_block_a1_f8(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_f8(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 72\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_c6(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_f8(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 72\n- DELIM= 6\n*/\nstatic inline void\nlibcrux_sha3_generic_keccak_portable_keccak1_96(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_26 s = libcrux_sha3_generic_keccak_new_80_04();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)72U;\n  size_t input_rem = input_len % (size_t)72U;\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_06 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_9e1(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)72U;\n      size_t output_rem = output_len % (size_t)72U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_f8(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_f8(&s, output, (size_t)0U, (size_t)72U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_f8(&s, output, i0 * (size_t)72U, (size_t)72U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_f8(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_06 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_c6(&s, &lvalue, i * (size_t)72U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHA3 512 implementation.\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_sha512(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_96(data, digest);\n}\n\n/**\n SHA3 512\n*/\nstatic inline void\nlibcrux_sha3_sha512_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)\n{\n  libcrux_sha3_portable_sha512(digest, payload);\n}\n\n/**\n SHA3 512\n*/\nstatic inline Eurydice_arr_060 libcrux_sha3_sha512(Eurydice_borrow_slice_u8 data)\n{\n  Eurydice_arr_060 out = { .data = { 0U } };\n  libcrux_sha3_sha512_ema(Eurydice_array_to_slice_mut_d8(&out), data);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.KeccakXofState\nwith types uint64_t\nwith const generics\n- $1size_t\n- $168size_t\n*/\ntypedef struct libcrux_sha3_generic_keccak_xof_KeccakXofState_97_s\n{\n  Eurydice_arr_26 inner;\n  Eurydice_arr_3a buf;\n  size_t buf_len;\n  bool sponge;\n}\nlibcrux_sha3_generic_keccak_xof_KeccakXofState_97;\n\ntypedef libcrux_sha3_generic_keccak_xof_KeccakXofState_97\nlibcrux_sha3_portable_incremental_Shake128Xof;\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_three_blocks_b4\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_3a(\n  Eurydice_arr_26 *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_simd_portable_squeeze_9b_3a(self, out, (size_t)0U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n  libcrux_sha3_simd_portable_squeeze_9b_3a(self, out, (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n  libcrux_sha3_simd_portable_squeeze_9b_3a(self, out, (size_t)2U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze three blocks\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_26 *s,\n  Eurydice_mut_borrow_slice_u8 out0\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_3a(s, out0);\n}\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_sha3_internal_H_DEFINED\n#endif /* internal_libcrux_sha3_internal_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa44_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"libcrux_mldsa44_avx2.h\"\n\n#include \"libcrux_mldsa_core.h\"\n#include \"libcrux_mldsa_avx2.h\"\n#include \"internal/libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-44 Key Pair\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair\nlibcrux_ml_dsa_ml_dsa_44_avx2_generate_key_pair(Eurydice_arr_60 randomness)\n{\n  Eurydice_arr_18 signing_key = { .data = { 0U } };\n  Eurydice_arr_40 verification_key = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_generate_key_pair(randomness,\n    Eurydice_array_to_slice_mut_59(&signing_key),\n    Eurydice_array_to_slice_mut_bb(&verification_key));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair){\n        .signing_key = libcrux_ml_dsa_types_new_9b_ff(signing_key),\n        .verification_key = libcrux_ml_dsa_types_new_7f_db(verification_key)\n      }\n    );\n}\n\n/**\n Generate an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_44_avx2_sign(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign(libcrux_ml_dsa_types_as_ref_9b_ff(signing_key),\n      message,\n      context,\n      randomness);\n}\n\n/**\n Generate an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_44_avx2_sign_mut(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_mut(libcrux_ml_dsa_types_as_ref_9b_ff(signing_key),\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\n Generate a HashML-DSA-44 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_44_avx2_sign_pre_hashed_shake128(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_18 *uu____0 = libcrux_ml_dsa_types_as_ref_9b_ff(signing_key);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_pre_hashed_shake128(uu____0,\n      message,\n      context,\n      Eurydice_array_to_slice_mut_6e(&pre_hash_buffer),\n      randomness);\n}\n\n/**\n Verify an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_44_avx2_verify(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify(libcrux_ml_dsa_types_as_ref_7f_db(verification_key),\n      message,\n      context,\n      libcrux_ml_dsa_types_as_ref_c5_1a(signature));\n}\n\n/**\n Verify a HashML-DSA-44 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_44_avx2_verify_pre_hashed_shake128(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_40 *uu____0 = libcrux_ml_dsa_types_as_ref_7f_db(verification_key);\n  Eurydice_borrow_slice_u8 uu____1 = message;\n  Eurydice_borrow_slice_u8 uu____2 = context;\n  Eurydice_mut_borrow_slice_u8 uu____3 = Eurydice_array_to_slice_mut_6e(&pre_hash_buffer);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify_pre_hashed_shake128(uu____0,\n      uu____1,\n      uu____2,\n      uu____3,\n      libcrux_ml_dsa_types_as_ref_c5_1a(signature));\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa44_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mldsa44_avx2_H\n#define libcrux_mldsa44_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"intrinsics/libcrux_intrinsics_avx2.h\"\n\n#include \"libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-44 Key Pair\n*/\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair\nlibcrux_ml_dsa_ml_dsa_44_avx2_generate_key_pair(Eurydice_arr_60 randomness);\n\n/**\n Generate an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_44_avx2_sign(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Generate an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_44_avx2_sign_mut(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n);\n\n/**\n Generate a HashML-DSA-44 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_44_avx2_sign_pre_hashed_shake128(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Verify an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_44_avx2_verify(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n);\n\n/**\n Verify a HashML-DSA-44 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_44_avx2_verify_pre_hashed_shake128(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mldsa44_avx2_H_DEFINED\n#endif /* libcrux_mldsa44_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa44_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"libcrux_mldsa44_portable.h\"\n\n#include \"libcrux_mldsa_portable.h\"\n#include \"libcrux_mldsa_core.h\"\n#include \"internal/libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-44 Key Pair\n*/\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair\nlibcrux_ml_dsa_ml_dsa_44_portable_generate_key_pair(Eurydice_arr_60 randomness)\n{\n  Eurydice_arr_18 signing_key = { .data = { 0U } };\n  Eurydice_arr_40 verification_key = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_generate_key_pair(randomness,\n    &signing_key,\n    &verification_key);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair){\n        .signing_key = libcrux_ml_dsa_types_new_9b_ff(signing_key),\n        .verification_key = libcrux_ml_dsa_types_new_7f_db(verification_key)\n      }\n    );\n}\n\n/**\n Generate an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_44_portable_sign(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign(libcrux_ml_dsa_types_as_ref_9b_ff(signing_key),\n      message,\n      context,\n      randomness);\n}\n\n/**\n Generate an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_44_portable_sign_mut(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign_mut(libcrux_ml_dsa_types_as_ref_9b_ff(signing_key),\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\n Generate a HashML-DSA-44 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_44_portable_sign_pre_hashed_shake128(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_18 *uu____0 = libcrux_ml_dsa_types_as_ref_9b_ff(signing_key);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign_pre_hashed_shake128(uu____0,\n      message,\n      context,\n      Eurydice_array_to_slice_mut_6e(&pre_hash_buffer),\n      randomness);\n}\n\n/**\n Verify an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_44_portable_verify(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_verify(libcrux_ml_dsa_types_as_ref_7f_db(verification_key),\n      message,\n      context,\n      libcrux_ml_dsa_types_as_ref_c5_1a(signature));\n}\n\n/**\n Verify a HashML-DSA-44 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_44_portable_verify_pre_hashed_shake128(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_40 *uu____0 = libcrux_ml_dsa_types_as_ref_7f_db(verification_key);\n  Eurydice_borrow_slice_u8 uu____1 = message;\n  Eurydice_borrow_slice_u8 uu____2 = context;\n  Eurydice_mut_borrow_slice_u8 uu____3 = Eurydice_array_to_slice_mut_6e(&pre_hash_buffer);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_verify_pre_hashed_shake128(uu____0,\n      uu____1,\n      uu____2,\n      uu____3,\n      libcrux_ml_dsa_types_as_ref_c5_1a(signature));\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa44_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mldsa44_portable_H\n#define libcrux_mldsa44_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-44 Key Pair\n*/\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair\nlibcrux_ml_dsa_ml_dsa_44_portable_generate_key_pair(Eurydice_arr_60 randomness);\n\n/**\n Generate an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_44_portable_sign(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Generate an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_44_portable_sign_mut(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n);\n\n/**\n Generate a HashML-DSA-44 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_44_portable_sign_pre_hashed_shake128(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Verify an ML-DSA-44 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_44_portable_verify(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n);\n\n/**\n Verify a HashML-DSA-44 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_44_portable_verify_pre_hashed_shake128(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mldsa44_portable_H_DEFINED\n#endif /* libcrux_mldsa44_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa65_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"libcrux_mldsa65_avx2.h\"\n\n#include \"libcrux_mldsa_core.h\"\n#include \"libcrux_mldsa_avx2.h\"\n#include \"internal/libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-65 Key Pair\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair\nlibcrux_ml_dsa_ml_dsa_65_avx2_generate_key_pair(Eurydice_arr_60 randomness)\n{\n  Eurydice_arr_d1 signing_key = { .data = { 0U } };\n  Eurydice_arr_4a verification_key = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_generate_key_pair(randomness,\n    Eurydice_array_to_slice_mut_ef(&signing_key),\n    Eurydice_array_to_slice_mut_5b(&verification_key));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair){\n        .signing_key = libcrux_ml_dsa_types_new_9b_09(signing_key),\n        .verification_key = libcrux_ml_dsa_types_new_7f_97(verification_key)\n      }\n    );\n}\n\n/**\n Generate an ML-DSA-65 Key Pair\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_ml_dsa_65_avx2_generate_key_pair_mut(\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_d1 *signing_key,\n  Eurydice_arr_4a *verification_key\n)\n{\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_generate_key_pair(randomness,\n    Eurydice_array_to_slice_mut_ef(signing_key),\n    Eurydice_array_to_slice_mut_5b(verification_key));\n}\n\n/**\n Generate an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_65_avx2_sign(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign(libcrux_ml_dsa_types_as_ref_9b_09(signing_key),\n      message,\n      context,\n      randomness);\n}\n\n/**\n Generate an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_65_avx2_sign_mut(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_mut(signing_key,\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\n Generate a HashML-DSA-65 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_65_avx2_sign_pre_hashed_shake128(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_d1 *uu____0 = libcrux_ml_dsa_types_as_ref_9b_09(signing_key);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_pre_hashed_shake128(uu____0,\n      message,\n      context,\n      Eurydice_array_to_slice_mut_6e(&pre_hash_buffer),\n      randomness);\n}\n\n/**\n Verify an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_65_avx2_verify(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify(libcrux_ml_dsa_types_as_ref_7f_97(verification_key),\n      message,\n      context,\n      libcrux_ml_dsa_types_as_ref_c5_fa(signature));\n}\n\n/**\n Verify a HashML-DSA-65 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_65_avx2_verify_pre_hashed_shake128(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_4a *uu____0 = libcrux_ml_dsa_types_as_ref_7f_97(verification_key);\n  Eurydice_borrow_slice_u8 uu____1 = message;\n  Eurydice_borrow_slice_u8 uu____2 = context;\n  Eurydice_mut_borrow_slice_u8 uu____3 = Eurydice_array_to_slice_mut_6e(&pre_hash_buffer);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify_pre_hashed_shake128(uu____0,\n      uu____1,\n      uu____2,\n      uu____3,\n      libcrux_ml_dsa_types_as_ref_c5_fa(signature));\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa65_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mldsa65_avx2_H\n#define libcrux_mldsa65_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"intrinsics/libcrux_intrinsics_avx2.h\"\n\n#include \"libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-65 Key Pair\n*/\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair\nlibcrux_ml_dsa_ml_dsa_65_avx2_generate_key_pair(Eurydice_arr_60 randomness);\n\n/**\n Generate an ML-DSA-65 Key Pair\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_65_avx2_generate_key_pair_mut(\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_d1 *signing_key,\n  Eurydice_arr_4a *verification_key\n);\n\n/**\n Generate an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_65_avx2_sign(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Generate an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_65_avx2_sign_mut(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n);\n\n/**\n Generate a HashML-DSA-65 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_65_avx2_sign_pre_hashed_shake128(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Verify an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_65_avx2_verify(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n);\n\n/**\n Verify a HashML-DSA-65 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_65_avx2_verify_pre_hashed_shake128(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mldsa65_avx2_H_DEFINED\n#endif /* libcrux_mldsa65_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa65_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"libcrux_mldsa65_portable.h\"\n\n#include \"libcrux_mldsa_portable.h\"\n#include \"libcrux_mldsa_core.h\"\n#include \"internal/libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-65 Key Pair\n*/\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair\nlibcrux_ml_dsa_ml_dsa_65_portable_generate_key_pair(Eurydice_arr_60 randomness)\n{\n  Eurydice_arr_d1 signing_key = { .data = { 0U } };\n  Eurydice_arr_4a verification_key = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_generate_key_pair(randomness,\n    &signing_key,\n    &verification_key);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair){\n        .signing_key = libcrux_ml_dsa_types_new_9b_09(signing_key),\n        .verification_key = libcrux_ml_dsa_types_new_7f_97(verification_key)\n      }\n    );\n}\n\n/**\n Generate an ML-DSA-65 Key Pair\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_65_portable_generate_key_pair_mut(\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_d1 *signing_key,\n  Eurydice_arr_4a *verification_key\n)\n{\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_generate_key_pair(randomness,\n    signing_key,\n    verification_key);\n}\n\n/**\n Generate an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_65_portable_sign(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign(libcrux_ml_dsa_types_as_ref_9b_09(signing_key),\n      message,\n      context,\n      randomness);\n}\n\n/**\n Generate an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_65_portable_sign_mut(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign_mut(signing_key,\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\n Generate a HashML-DSA-65 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_65_portable_sign_pre_hashed_shake128(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_d1 *uu____0 = libcrux_ml_dsa_types_as_ref_9b_09(signing_key);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign_pre_hashed_shake128(uu____0,\n      message,\n      context,\n      Eurydice_array_to_slice_mut_6e(&pre_hash_buffer),\n      randomness);\n}\n\n/**\n Verify an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_65_portable_verify(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_verify(libcrux_ml_dsa_types_as_ref_7f_97(verification_key),\n      message,\n      context,\n      libcrux_ml_dsa_types_as_ref_c5_fa(signature));\n}\n\n/**\n Verify a HashML-DSA-65 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_65_portable_verify_pre_hashed_shake128(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_4a *uu____0 = libcrux_ml_dsa_types_as_ref_7f_97(verification_key);\n  Eurydice_borrow_slice_u8 uu____1 = message;\n  Eurydice_borrow_slice_u8 uu____2 = context;\n  Eurydice_mut_borrow_slice_u8 uu____3 = Eurydice_array_to_slice_mut_6e(&pre_hash_buffer);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_verify_pre_hashed_shake128(uu____0,\n      uu____1,\n      uu____2,\n      uu____3,\n      libcrux_ml_dsa_types_as_ref_c5_fa(signature));\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa65_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mldsa65_portable_H\n#define libcrux_mldsa65_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-65 Key Pair\n*/\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair\nlibcrux_ml_dsa_ml_dsa_65_portable_generate_key_pair(Eurydice_arr_60 randomness);\n\n/**\n Generate an ML-DSA-65 Key Pair\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_65_portable_generate_key_pair_mut(\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_d1 *signing_key,\n  Eurydice_arr_4a *verification_key\n);\n\n/**\n Generate an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_65_portable_sign(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Generate an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_65_portable_sign_mut(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n);\n\n/**\n Generate a HashML-DSA-65 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_65_portable_sign_pre_hashed_shake128(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Verify an ML-DSA-65 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_65_portable_verify(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n);\n\n/**\n Verify a HashML-DSA-65 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_65_portable_verify_pre_hashed_shake128(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mldsa65_portable_H_DEFINED\n#endif /* libcrux_mldsa65_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa87_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"libcrux_mldsa87_avx2.h\"\n\n#include \"libcrux_mldsa_core.h\"\n#include \"libcrux_mldsa_avx2.h\"\n#include \"internal/libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-87 Key Pair\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair\nlibcrux_ml_dsa_ml_dsa_87_avx2_generate_key_pair(Eurydice_arr_60 randomness)\n{\n  Eurydice_arr_180 signing_key = { .data = { 0U } };\n  Eurydice_arr_51 verification_key = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_generate_key_pair(randomness,\n    Eurydice_array_to_slice_mut_e2(&signing_key),\n    Eurydice_array_to_slice_mut_f7(&verification_key));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair){\n        .signing_key = libcrux_ml_dsa_types_new_9b_32(signing_key),\n        .verification_key = libcrux_ml_dsa_types_new_7f_d8(verification_key)\n      }\n    );\n}\n\n/**\n Generate an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_87_avx2_sign(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign(libcrux_ml_dsa_types_as_ref_9b_32(signing_key),\n      message,\n      context,\n      randomness);\n}\n\n/**\n Generate an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_87_avx2_sign_mut(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_mut(libcrux_ml_dsa_types_as_ref_9b_32(signing_key),\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\n Generate a HashML-DSA-87 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_87_avx2_sign_pre_hashed_shake128(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_180 *uu____0 = libcrux_ml_dsa_types_as_ref_9b_32(signing_key);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_pre_hashed_shake128(uu____0,\n      message,\n      context,\n      Eurydice_array_to_slice_mut_6e(&pre_hash_buffer),\n      randomness);\n}\n\n/**\n Verify an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_87_avx2_verify(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify(libcrux_ml_dsa_types_as_ref_7f_d8(verification_key),\n      message,\n      context,\n      libcrux_ml_dsa_types_as_ref_c5_c2(signature));\n}\n\n/**\n Verify a HashML-DSA-87 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_87_avx2_verify_pre_hashed_shake128(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_51 *uu____0 = libcrux_ml_dsa_types_as_ref_7f_d8(verification_key);\n  Eurydice_borrow_slice_u8 uu____1 = message;\n  Eurydice_borrow_slice_u8 uu____2 = context;\n  Eurydice_mut_borrow_slice_u8 uu____3 = Eurydice_array_to_slice_mut_6e(&pre_hash_buffer);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify_pre_hashed_shake128(uu____0,\n      uu____1,\n      uu____2,\n      uu____3,\n      libcrux_ml_dsa_types_as_ref_c5_c2(signature));\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa87_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mldsa87_avx2_H\n#define libcrux_mldsa87_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"intrinsics/libcrux_intrinsics_avx2.h\"\n\n#include \"libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-87 Key Pair\n*/\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair\nlibcrux_ml_dsa_ml_dsa_87_avx2_generate_key_pair(Eurydice_arr_60 randomness);\n\n/**\n Generate an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_87_avx2_sign(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Generate an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_87_avx2_sign_mut(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n);\n\n/**\n Generate a HashML-DSA-87 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_87_avx2_sign_pre_hashed_shake128(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Verify an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_87_avx2_verify(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n);\n\n/**\n Verify a HashML-DSA-87 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_87_avx2_verify_pre_hashed_shake128(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mldsa87_avx2_H_DEFINED\n#endif /* libcrux_mldsa87_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa87_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"libcrux_mldsa87_portable.h\"\n\n#include \"libcrux_mldsa_portable.h\"\n#include \"libcrux_mldsa_core.h\"\n#include \"internal/libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-87 Key Pair\n*/\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair\nlibcrux_ml_dsa_ml_dsa_87_portable_generate_key_pair(Eurydice_arr_60 randomness)\n{\n  Eurydice_arr_180 signing_key = { .data = { 0U } };\n  Eurydice_arr_51 verification_key = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_generate_key_pair(randomness,\n    &signing_key,\n    &verification_key);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair){\n        .signing_key = libcrux_ml_dsa_types_new_9b_32(signing_key),\n        .verification_key = libcrux_ml_dsa_types_new_7f_d8(verification_key)\n      }\n    );\n}\n\n/**\n Generate an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_87_portable_sign(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign(libcrux_ml_dsa_types_as_ref_9b_32(signing_key),\n      message,\n      context,\n      randomness);\n}\n\n/**\n Generate an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_87_portable_sign_mut(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign_mut(libcrux_ml_dsa_types_as_ref_9b_32(signing_key),\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\n Generate a HashML-DSA-87 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_87_portable_sign_pre_hashed_shake128(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_180 *uu____0 = libcrux_ml_dsa_types_as_ref_9b_32(signing_key);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign_pre_hashed_shake128(uu____0,\n      message,\n      context,\n      Eurydice_array_to_slice_mut_6e(&pre_hash_buffer),\n      randomness);\n}\n\n/**\n Verify an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_87_portable_verify(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_verify(libcrux_ml_dsa_types_as_ref_7f_d8(verification_key),\n      message,\n      context,\n      libcrux_ml_dsa_types_as_ref_c5_c2(signature));\n}\n\n/**\n Verify a HashML-DSA-87 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_87_portable_verify_pre_hashed_shake128(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n)\n{\n  Eurydice_arr_60 pre_hash_buffer = { .data = { 0U } };\n  const Eurydice_arr_51 *uu____0 = libcrux_ml_dsa_types_as_ref_7f_d8(verification_key);\n  Eurydice_borrow_slice_u8 uu____1 = message;\n  Eurydice_borrow_slice_u8 uu____2 = context;\n  Eurydice_mut_borrow_slice_u8 uu____3 = Eurydice_array_to_slice_mut_6e(&pre_hash_buffer);\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_verify_pre_hashed_shake128(uu____0,\n      uu____1,\n      uu____2,\n      uu____3,\n      libcrux_ml_dsa_types_as_ref_c5_c2(signature));\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa87_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mldsa87_portable_H\n#define libcrux_mldsa87_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_mldsa_core.h\"\n\n/**\n Generate an ML-DSA-87 Key Pair\n*/\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair\nlibcrux_ml_dsa_ml_dsa_87_portable_generate_key_pair(Eurydice_arr_60 randomness);\n\n/**\n Generate an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_87_portable_sign(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Generate an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_87_portable_sign_mut(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n);\n\n/**\n Generate a HashML-DSA-87 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_87_portable_sign_pre_hashed_shake128(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Verify an ML-DSA-87 Signature\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_87_portable_verify(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n);\n\n/**\n Verify a HashML-DSA-87 Signature, with a SHAKE128 pre-hashing\n\n The parameter `context` is used for domain separation\n and is a byte string of length at most 255 bytes. It\n may also be empty.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_87_portable_verify_pre_hashed_shake128(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mldsa87_portable_H_DEFINED\n#endif /* libcrux_mldsa87_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mldsa_avx2.h\"\n\n#include \"libcrux_sha3_internal.h\"\n#include \"libcrux_sha3_avx2.h\"\n#include \"libcrux_sha3.h\"\n#include \"libcrux_mldsa_portable.h\"\n#include \"libcrux_mldsa_core.h\"\n#include \"internal/libcrux_sha3_internal.h\"\n#include \"internal/libcrux_mldsa_portable.h\"\n#include \"internal/libcrux_mldsa_core.h\"\n\n/**\n Init the state and absorb 4 blocks in parallel.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_05\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n)\n{\n  Eurydice_arr_05 state = libcrux_sha3_avx2_x4_incremental_init();\n  libcrux_sha3_avx2_x4_incremental_shake128_absorb_final(&state, input0, input1, input2, input3);\n  return state;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_26\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb_final_shake256(\n  Eurydice_borrow_slice_u8 input\n)\n{\n  Eurydice_arr_26 state = libcrux_sha3_portable_incremental_shake256_init();\n  libcrux_sha3_portable_incremental_shake256_absorb_final(&state, input);\n  return state;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_05\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb_x4(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n)\n{\n  Eurydice_arr_05 state = libcrux_sha3_avx2_x4_incremental_init();\n  libcrux_sha3_avx2_x4_incremental_shake256_absorb_final(&state, input0, input1, input2, input3);\n  return state;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_shake256(Eurydice_arr_26 *state)\n{\n  Eurydice_arr_3d out = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_first_block(state,\n    Eurydice_array_to_slice_mut_d4(&out));\n  return out;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_x4(Eurydice_arr_05 *state)\n{\n  Eurydice_arr_3d out0 = { .data = { 0U } };\n  Eurydice_arr_3d out1 = { .data = { 0U } };\n  Eurydice_arr_3d out2 = { .data = { 0U } };\n  Eurydice_arr_3d out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake256_squeeze_first_block(state,\n    Eurydice_array_to_slice_mut_d4(&out0),\n    Eurydice_array_to_slice_mut_d4(&out1),\n    Eurydice_array_to_slice_mut_d4(&out2),\n    Eurydice_array_to_slice_mut_d4(&out3));\n  return\n    (KRML_CLITERAL(Eurydice_arr_3d_x4){ .fst = out0, .snd = out1, .thd = out2, .f3 = out3 });\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_five_blocks(\n  Eurydice_arr_05 *state,\n  Eurydice_arr_12 *out0,\n  Eurydice_arr_12 *out1,\n  Eurydice_arr_12 *out2,\n  Eurydice_arr_12 *out3\n)\n{\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_five_blocks(state,\n    Eurydice_array_to_slice_mut_a8(out0),\n    Eurydice_array_to_slice_mut_a8(out1),\n    Eurydice_array_to_slice_mut_a8(out2),\n    Eurydice_array_to_slice_mut_a8(out3));\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_27_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block(Eurydice_arr_05 *state)\n{\n  Eurydice_arr_27 out0 = { .data = { 0U } };\n  Eurydice_arr_27 out1 = { .data = { 0U } };\n  Eurydice_arr_27 out2 = { .data = { 0U } };\n  Eurydice_arr_27 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(state,\n    Eurydice_array_to_slice_mut_7b(&out0),\n    Eurydice_array_to_slice_mut_7b(&out1),\n    Eurydice_array_to_slice_mut_7b(&out2),\n    Eurydice_array_to_slice_mut_7b(&out3));\n  return\n    (KRML_CLITERAL(Eurydice_arr_27_x4){ .fst = out0, .snd = out1, .thd = out2, .f3 = out3 });\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_shake256(Eurydice_arr_26 *state)\n{\n  Eurydice_arr_3d out = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_next_block(state,\n    Eurydice_array_to_slice_mut_d4(&out));\n  return out;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_x4(Eurydice_arr_05 *state)\n{\n  Eurydice_arr_3d out0 = { .data = { 0U } };\n  Eurydice_arr_3d out1 = { .data = { 0U } };\n  Eurydice_arr_3d out2 = { .data = { 0U } };\n  Eurydice_arr_3d out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake256_squeeze_next_block(state,\n    Eurydice_array_to_slice_mut_d4(&out0),\n    Eurydice_array_to_slice_mut_d4(&out1),\n    Eurydice_array_to_slice_mut_d4(&out2),\n    Eurydice_array_to_slice_mut_d4(&out3));\n  return\n    (KRML_CLITERAL(Eurydice_arr_3d_x4){ .fst = out0, .snd = out1, .thd = out2, .f3 = out3 });\n}\n\n/**\n Init the state and absorb 4 blocks in parallel.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake128x4}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_05\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb_3b(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n)\n{\n  return libcrux_ml_dsa_hash_functions_simd256_init_absorb(input0, input1, input2, input3);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake128x4}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_five_blocks_3b(\n  Eurydice_arr_05 *self,\n  Eurydice_arr_12 *out0,\n  Eurydice_arr_12 *out1,\n  Eurydice_arr_12 *out2,\n  Eurydice_arr_12 *out3\n)\n{\n  libcrux_ml_dsa_hash_functions_simd256_squeeze_first_five_blocks(self, out0, out1, out2, out3);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake128x4}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_27_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_3b(Eurydice_arr_05 *self)\n{\n  return libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block(self);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_26\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb_final_8c(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_dsa_hash_functions_simd256_init_absorb_final_shake256(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_8c(Eurydice_arr_26 *self)\n{\n  return libcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_shake256(self);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_8c(Eurydice_arr_26 *self)\n{\n  return libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_shake256(self);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake256x4}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_05\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb_x4_ad(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n)\n{\n  return libcrux_ml_dsa_hash_functions_simd256_init_absorb_x4(input0, input1, input2, input3);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake256x4}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_x4_ad(Eurydice_arr_05 *self)\n{\n  return libcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_x4(self);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake256x4}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE Eurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_x4_ad(Eurydice_arr_05 *self)\n{\n  return libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_x4(self);\n}\n\n/**\n Create an all-zero vector coefficient\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\") __m256i libcrux_ml_dsa_simd_avx2_vector_type_zero(void)\n{\n  return mm256_setzero_si256();\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\") KRML_MUSTINLINE __m256i libcrux_ml_dsa_simd_avx2_zero_a2(void)\n{\n  return libcrux_ml_dsa_simd_avx2_vector_type_zero();\n}\n\n/**\n Create a coefficient from an `i32` array\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_vector_type_from_coefficient_array(\n  Eurydice_dst_ref_shared_fc coefficient_array,\n  __m256i *out\n)\n{\n  out[0U] = mm256_loadu_si256_i32(coefficient_array);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_from_coefficient_array_a2(\n  Eurydice_dst_ref_shared_fc coefficient_array,\n  __m256i *out\n)\n{\n  libcrux_ml_dsa_simd_avx2_vector_type_from_coefficient_array(coefficient_array, out);\n}\n\n/**\n Write out the coefficient to an `i32` array\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_vector_type_to_coefficient_array(\n  const __m256i *value,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  mm256_storeu_si256_i32(out, value[0U]);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_to_coefficient_array_a2(\n  const __m256i *value,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  libcrux_ml_dsa_simd_avx2_vector_type_to_coefficient_array(value, out);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ninline void\nlibcrux_ml_dsa_simd_avx2_arithmetic_add(__m256i *lhs, const __m256i *rhs)\n{\n  lhs[0U] = mm256_add_epi32(lhs[0U], rhs[0U]);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_add_a2(__m256i *lhs, const __m256i *rhs)\n{\n  libcrux_ml_dsa_simd_avx2_arithmetic_add(lhs, rhs);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ninline void\nlibcrux_ml_dsa_simd_avx2_arithmetic_subtract(__m256i *lhs, const __m256i *rhs)\n{\n  lhs[0U] = mm256_sub_epi32(lhs[0U], rhs[0U]);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_subtract_a2(__m256i *lhs, const __m256i *rhs)\n{\n  libcrux_ml_dsa_simd_avx2_arithmetic_subtract(lhs, rhs);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ninline bool\nlibcrux_ml_dsa_simd_avx2_arithmetic_infinity_norm_exceeds(\n  const __m256i *simd_unit,\n  int32_t bound\n)\n{\n  __m256i absolute_values = mm256_abs_epi32(simd_unit[0U]);\n  __m256i bound0 = mm256_set1_epi32(bound - (int32_t)1);\n  __m256i compare_with_bound = mm256_cmpgt_epi32(absolute_values, bound0);\n  int32_t result = mm256_testz_si256(compare_with_bound, compare_with_bound);\n  return result != (int32_t)1;\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE bool\nlibcrux_ml_dsa_simd_avx2_infinity_norm_exceeds_a2(const __m256i *simd_unit, int32_t bound)\n{\n  return libcrux_ml_dsa_simd_avx2_arithmetic_infinity_norm_exceeds(simd_unit, bound);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ninline __m256i\nlibcrux_ml_dsa_simd_avx2_arithmetic_to_unsigned_representatives_ret(const __m256i *t)\n{\n  __m256i signs = mm256_srai_epi32((int32_t)31, t[0U], __m256i);\n  __m256i\n  conditional_add_field_modulus =\n    mm256_and_si256(signs,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS));\n  return mm256_add_epi32(t[0U], conditional_add_field_modulus);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_arithmetic_decompose(\n  int32_t gamma2,\n  const __m256i *r,\n  __m256i *r0,\n  __m256i *r1\n)\n{\n  __m256i r2 = libcrux_ml_dsa_simd_avx2_arithmetic_to_unsigned_representatives_ret(r);\n  __m256i ceil_of_r_by_128 = mm256_add_epi32(r2, mm256_set1_epi32((int32_t)127));\n  __m256i ceil_of_r_by_1280 = mm256_srai_epi32((int32_t)7, ceil_of_r_by_128, __m256i);\n  switch (gamma2)\n  {\n    case 95232:\n      {\n        __m256i result = mm256_mullo_epi32(ceil_of_r_by_1280, mm256_set1_epi32((int32_t)11275));\n        __m256i result0 = mm256_add_epi32(result, mm256_set1_epi32((int32_t)1 << 23U));\n        __m256i result1 = mm256_srai_epi32((int32_t)24, result0, __m256i);\n        __m256i mask = mm256_sub_epi32(mm256_set1_epi32((int32_t)43), result1);\n        __m256i mask0 = mm256_srai_epi32((int32_t)31, mask, __m256i);\n        __m256i not_result = mm256_xor_si256(result1, mask0);\n        r1[0U] = mm256_and_si256(result1, not_result);\n        break;\n      }\n    case 261888:\n      {\n        __m256i result = mm256_mullo_epi32(ceil_of_r_by_1280, mm256_set1_epi32((int32_t)1025));\n        __m256i result0 = mm256_add_epi32(result, mm256_set1_epi32((int32_t)1 << 21U));\n        __m256i result1 = mm256_srai_epi32((int32_t)22, result0, __m256i);\n        r1[0U] = mm256_and_si256(result1, mm256_set1_epi32((int32_t)15));\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  int32_t alpha = gamma2 * (int32_t)2;\n  __m256i r0_tmp = mm256_mullo_epi32(r1[0U], mm256_set1_epi32(alpha));\n  __m256i r0_tmp0 = mm256_sub_epi32(r2, r0_tmp);\n  __m256i\n  field_modulus_halved =\n    mm256_set1_epi32((LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS - (int32_t)1) / (int32_t)2);\n  __m256i mask = mm256_sub_epi32(field_modulus_halved, r0_tmp0);\n  __m256i mask0 = mm256_srai_epi32((int32_t)31, mask, __m256i);\n  __m256i\n  field_modulus_and_mask =\n    mm256_and_si256(mask0,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS));\n  r0[0U] = mm256_sub_epi32(r0_tmp0, field_modulus_and_mask);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_decompose_a2(\n  int32_t gamma2,\n  const __m256i *simd_unit,\n  __m256i *low,\n  __m256i *high\n)\n{\n  libcrux_ml_dsa_simd_avx2_arithmetic_decompose(gamma2, simd_unit, low, high);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE size_t\nlibcrux_ml_dsa_simd_avx2_arithmetic_compute_hint(\n  const __m256i *low,\n  const __m256i *high,\n  int32_t gamma2,\n  __m256i *hint\n)\n{\n  __m256i minus_gamma2 = mm256_set1_epi32(-gamma2);\n  __m256i gamma20 = mm256_set1_epi32(gamma2);\n  __m256i low_within_bound = mm256_cmpgt_epi32(mm256_abs_epi32(low[0U]), gamma20);\n  __m256i low_equals_minus_gamma2 = mm256_cmpeq_epi32(low[0U], minus_gamma2);\n  __m256i\n  low_equals_minus_gamma2_and_high_is_nonzero =\n    mm256_sign_epi32(low_equals_minus_gamma2,\n      high[0U]);\n  hint[0U] = mm256_or_si256(low_within_bound, low_equals_minus_gamma2_and_high_is_nonzero);\n  int32_t hints_mask = mm256_movemask_ps(mm256_castsi256_ps(hint[0U]));\n  hint[0U] = mm256_and_si256(hint[0U], mm256_set1_epi32((int32_t)1));\n  return (size_t)core_num__i32__count_ones(hints_mask);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE size_t\nlibcrux_ml_dsa_simd_avx2_compute_hint_a2(\n  const __m256i *low,\n  const __m256i *high,\n  int32_t gamma2,\n  __m256i *hint\n)\n{\n  return libcrux_ml_dsa_simd_avx2_arithmetic_compute_hint(low, high, gamma2, hint);\n}\n\ntypedef struct core_core_arch_x86___m256i_x2_s\n{\n  __m256i fst;\n  __m256i snd;\n}\ncore_core_arch_x86___m256i_x2;\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_arithmetic_use_hint(int32_t gamma2, const __m256i *r, __m256i *hint)\n{\n  core_core_arch_x86___m256i_x2\n  uu____0 = { .fst = mm256_setzero_si256(), .snd = mm256_setzero_si256() };\n  __m256i r0 = uu____0.fst;\n  __m256i r1 = uu____0.snd;\n  libcrux_ml_dsa_simd_avx2_arithmetic_decompose(gamma2, r, &r0, &r1);\n  __m256i all_zeros = mm256_setzero_si256();\n  __m256i negate_hints = vec256_blendv_epi32(all_zeros, hint[0U], r0);\n  __m256i negate_hints0 = mm256_slli_epi32((int32_t)1, negate_hints, __m256i);\n  __m256i hints = mm256_sub_epi32(hint[0U], negate_hints0);\n  __m256i r1_plus_hints = mm256_add_epi32(r1, hints);\n  switch (gamma2)\n  {\n    case 95232:\n      {\n        __m256i max = mm256_set1_epi32((int32_t)43);\n        r1_plus_hints = vec256_blendv_epi32(r1_plus_hints, max, r1_plus_hints);\n        __m256i greater_than_or_equal_to_max = mm256_cmpgt_epi32(r1_plus_hints, max);\n        hint[0U] = vec256_blendv_epi32(r1_plus_hints, all_zeros, greater_than_or_equal_to_max);\n        break;\n      }\n    case 261888:\n      {\n        hint[0U] = mm256_and_si256(r1_plus_hints, mm256_set1_epi32((int32_t)15));\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_use_hint_a2(int32_t gamma2, const __m256i *simd_unit, __m256i *hint)\n{\n  libcrux_ml_dsa_simd_avx2_arithmetic_use_hint(gamma2, simd_unit, hint);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_aux(\n  __m256i field_modulus,\n  __m256i inverse_of_modulus_mod_montgomery_r,\n  __m256i *lhs,\n  const __m256i *rhs\n)\n{\n  __m256i prod02 = mm256_mul_epi32(lhs[0U], rhs[0U]);\n  __m256i\n  prod13 =\n    mm256_mul_epi32(mm256_shuffle_epi32((int32_t)245, lhs[0U], __m256i),\n      mm256_shuffle_epi32((int32_t)245, rhs[0U], __m256i));\n  __m256i k02 = mm256_mul_epi32(prod02, inverse_of_modulus_mod_montgomery_r);\n  __m256i k13 = mm256_mul_epi32(prod13, inverse_of_modulus_mod_montgomery_r);\n  __m256i c02 = mm256_mul_epi32(k02, field_modulus);\n  __m256i c13 = mm256_mul_epi32(k13, field_modulus);\n  __m256i res02 = mm256_sub_epi32(prod02, c02);\n  __m256i res13 = mm256_sub_epi32(prod13, c13);\n  __m256i res02_shifted = mm256_shuffle_epi32((int32_t)245, res02, __m256i);\n  lhs[0U] = mm256_blend_epi32((int32_t)170, res02_shifted, res13, __m256i);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(__m256i *lhs, const __m256i *rhs)\n{\n  __m256i field_modulus = mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS);\n  __m256i\n  inverse_of_modulus_mod_montgomery_r =\n    mm256_set1_epi32((int32_t)LIBCRUX_ML_DSA_SIMD_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R);\n  libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_aux(field_modulus,\n    inverse_of_modulus_mod_montgomery_r,\n    lhs,\n    rhs);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_montgomery_multiply_a2(__m256i *lhs, const __m256i *rhs)\n{\n  libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(lhs, rhs);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ninline void\nlibcrux_ml_dsa_simd_avx2_arithmetic_to_unsigned_representatives(__m256i *t)\n{\n  t[0U] = libcrux_ml_dsa_simd_avx2_arithmetic_to_unsigned_representatives_ret(t);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ninline void\nlibcrux_ml_dsa_simd_avx2_arithmetic_power2round(__m256i *r0, __m256i *r1)\n{\n  libcrux_ml_dsa_simd_avx2_arithmetic_to_unsigned_representatives(r0);\n  r1[0U] =\n    mm256_add_epi32(r0[0U],\n      mm256_set1_epi32(((int32_t)1 <<\n          (uint32_t)(LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T - (size_t)1U))\n        - (int32_t)1));\n  r1[0U] = mm256_srai_epi32((int32_t)13, r1[0U], __m256i);\n  __m256i tmp = mm256_slli_epi32((int32_t)13, r1[0U], __m256i);\n  r0[0U] = mm256_sub_epi32(r0[0U], tmp);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_power2round_a2(__m256i *t0, __m256i *t1)\n{\n  libcrux_ml_dsa_simd_avx2_arithmetic_power2round(t0, t1);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_field_modulus_bytestream_to_potential_coefficients(\n  Eurydice_borrow_slice_u8 serialized\n)\n{\n  Eurydice_arr_60 serialized_extended = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_to_mut_6e(&serialized_extended, (size_t)24U),\n    serialized,\n    uint8_t);\n  __m256i\n  coefficients = mm256_loadu_si256_u8(Eurydice_array_to_slice_shared_6e(&serialized_extended));\n  __m256i\n  coefficients0 =\n    mm256_permutevar8x32_epi32(coefficients,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)5,\n        (int32_t)4,\n        (int32_t)3,\n        (int32_t)0,\n        (int32_t)2,\n        (int32_t)1,\n        (int32_t)0));\n  __m256i\n  coefficients1 =\n    mm256_shuffle_epi8(coefficients0,\n      mm256_set_epi8((int8_t)-1,\n        (int8_t)11,\n        (int8_t)10,\n        (int8_t)9,\n        (int8_t)-1,\n        (int8_t)8,\n        (int8_t)7,\n        (int8_t)6,\n        (int8_t)-1,\n        (int8_t)5,\n        (int8_t)4,\n        (int8_t)3,\n        (int8_t)-1,\n        (int8_t)2,\n        (int8_t)1,\n        (int8_t)0,\n        (int8_t)-1,\n        (int8_t)11,\n        (int8_t)10,\n        (int8_t)9,\n        (int8_t)-1,\n        (int8_t)8,\n        (int8_t)7,\n        (int8_t)6,\n        (int8_t)-1,\n        (int8_t)5,\n        (int8_t)4,\n        (int8_t)3,\n        (int8_t)-1,\n        (int8_t)2,\n        (int8_t)1,\n        (int8_t)0));\n  return\n    mm256_and_si256(coefficients1,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_REJECTION_SAMPLE_LESS_THAN_FIELD_MODULUS_BYTESTREAM_TO_POTENTIAL_COEFFICIENTS_COEFFICIENT_MASK));\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE size_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_field_modulus_sample(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_dst_ref_mut_fc output\n)\n{\n  __m256i field_modulus = mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS);\n  __m256i\n  potential_coefficients =\n    libcrux_ml_dsa_simd_avx2_rejection_sample_less_than_field_modulus_bytestream_to_potential_coefficients(input);\n  __m256i compare_with_field_modulus = mm256_cmpgt_epi32(field_modulus, potential_coefficients);\n  int32_t good = mm256_movemask_ps(mm256_castsi256_ps(compare_with_field_modulus));\n  int32_t good_lower_half = good & (int32_t)15;\n  int32_t good_upper_half = good >> 4U;\n  Eurydice_arr_88\n  lower_shuffles =\n    LIBCRUX_ML_DSA_SIMD_AVX2_REJECTION_SAMPLE_SHUFFLE_TABLE_SHUFFLE_TABLE.data[(size_t)good_lower_half];\n  __m128i lower_shuffles0 = mm_loadu_si128(Eurydice_array_to_slice_shared_46(&lower_shuffles));\n  __m128i lower_coefficients = mm256_castsi256_si128(potential_coefficients);\n  __m128i lower_coefficients0 = mm_shuffle_epi8(lower_coefficients, lower_shuffles0);\n  mm_storeu_si128_i32(Eurydice_slice_subslice_mut_46(output,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)4U })),\n    lower_coefficients0);\n  size_t sampled_count = (size_t)core_num__i32__count_ones(good_lower_half);\n  Eurydice_arr_88\n  upper_shuffles =\n    LIBCRUX_ML_DSA_SIMD_AVX2_REJECTION_SAMPLE_SHUFFLE_TABLE_SHUFFLE_TABLE.data[(size_t)good_upper_half];\n  __m128i upper_shuffles0 = mm_loadu_si128(Eurydice_array_to_slice_shared_46(&upper_shuffles));\n  __m128i\n  upper_coefficients = mm256_extracti128_si256((int32_t)1, potential_coefficients, __m128i);\n  __m128i upper_coefficients0 = mm_shuffle_epi8(upper_coefficients, upper_shuffles0);\n  mm_storeu_si128_i32(Eurydice_slice_subslice_mut_46(output,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = sampled_count,\n          .end = sampled_count + (size_t)4U\n        }\n      )),\n    upper_coefficients0);\n  size_t uu____0 = sampled_count;\n  return uu____0 + (size_t)core_num__i32__count_ones(good_upper_half);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE size_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_field_modulus_a2(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  return\n    libcrux_ml_dsa_simd_avx2_rejection_sample_less_than_field_modulus_sample(randomness,\n      out);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned_when_eta_is_4(\n  Eurydice_borrow_slice_u8 bytes\n)\n{\n  __m256i\n  bytes_in_simd_unit =\n    mm256_set_epi32((int32_t)bytes.ptr[3U],\n      (int32_t)bytes.ptr[3U],\n      (int32_t)bytes.ptr[2U],\n      (int32_t)bytes.ptr[2U],\n      (int32_t)bytes.ptr[1U],\n      (int32_t)bytes.ptr[1U],\n      (int32_t)bytes.ptr[0U],\n      (int32_t)bytes.ptr[0U]);\n  __m256i\n  coefficients =\n    mm256_srlv_epi32(bytes_in_simd_unit,\n      mm256_set_epi32((int32_t)4,\n        (int32_t)0,\n        (int32_t)4,\n        (int32_t)0,\n        (int32_t)4,\n        (int32_t)0,\n        (int32_t)4,\n        (int32_t)0));\n  return\n    mm256_and_si256(coefficients,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_ERROR_DESERIALIZE_TO_UNSIGNED_WHEN_ETA_IS_4_COEFFICIENT_MASK));\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned_when_eta_is_2(\n  Eurydice_borrow_slice_u8 bytes\n)\n{\n  __m256i\n  bytes_in_simd_unit =\n    mm256_set_epi32((int32_t)bytes.ptr[2U],\n      (int32_t)bytes.ptr[2U],\n      (int32_t)bytes.ptr[2U] << 8U | (int32_t)bytes.ptr[1U],\n      (int32_t)bytes.ptr[1U],\n      (int32_t)bytes.ptr[1U],\n      (int32_t)bytes.ptr[1U] << 8U | (int32_t)bytes.ptr[0U],\n      (int32_t)bytes.ptr[0U],\n      (int32_t)bytes.ptr[0U]);\n  __m256i\n  coefficients =\n    mm256_srlv_epi32(bytes_in_simd_unit,\n      mm256_set_epi32((int32_t)5,\n        (int32_t)2,\n        (int32_t)7,\n        (int32_t)4,\n        (int32_t)1,\n        (int32_t)6,\n        (int32_t)3,\n        (int32_t)0));\n  return\n    mm256_and_si256(coefficients,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_ERROR_DESERIALIZE_TO_UNSIGNED_WHEN_ETA_IS_2_COEFFICIENT_MASK));\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 serialized\n)\n{\n  switch (eta)\n  {\n    case libcrux_ml_dsa_constants_Eta_Two:\n      {\n        break;\n      }\n    case libcrux_ml_dsa_constants_Eta_Four:\n      {\n        return\n          libcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned_when_eta_is_4(serialized);\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  return\n    libcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned_when_eta_is_2(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.rejection_sample.less_than_eta.shift_interval\nwith const generics\n- ETA= 2\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_shift_interval_fd(__m256i coefficients)\n{\n  __m256i uu____0;\n  __m256i quotient = mm256_mullo_epi32(coefficients, mm256_set1_epi32((int32_t)26));\n  __m256i quotient0 = mm256_srai_epi32((int32_t)7, quotient, __m256i);\n  __m256i quotient1 = mm256_mullo_epi32(quotient0, mm256_set1_epi32((int32_t)5));\n  __m256i coefficients_mod_5 = mm256_sub_epi32(coefficients, quotient1);\n  uu____0 = mm256_sub_epi32(mm256_set1_epi32((int32_t)(size_t)2U), coefficients_mod_5);\n  return uu____0;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.rejection_sample.less_than_eta.sample\nwith const generics\n- ETA= 2\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE size_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_sample_fd(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_dst_ref_mut_fc output\n)\n{\n  __m256i\n  potential_coefficients =\n    libcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned(libcrux_ml_dsa_constants_Eta_Four,\n      input);\n  int32_t interval_boundary;\n  interval_boundary = (int32_t)15;\n  __m256i\n  compare_with_interval_boundary =\n    mm256_cmpgt_epi32(mm256_set1_epi32(interval_boundary),\n      potential_coefficients);\n  int32_t good = mm256_movemask_ps(mm256_castsi256_ps(compare_with_interval_boundary));\n  int32_t good_lower_half = good & (int32_t)15;\n  int32_t good_upper_half = good >> 4U;\n  __m256i\n  shifted =\n    libcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_shift_interval_fd(potential_coefficients);\n  Eurydice_arr_88\n  lower_shuffles =\n    LIBCRUX_ML_DSA_SIMD_AVX2_REJECTION_SAMPLE_SHUFFLE_TABLE_SHUFFLE_TABLE.data[(size_t)good_lower_half];\n  __m128i lower_shuffles0 = mm_loadu_si128(Eurydice_array_to_slice_shared_46(&lower_shuffles));\n  __m128i lower_coefficients = mm256_castsi256_si128(shifted);\n  __m128i lower_coefficients0 = mm_shuffle_epi8(lower_coefficients, lower_shuffles0);\n  mm_storeu_si128_i32(Eurydice_slice_subslice_mut_46(output,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)4U })),\n    lower_coefficients0);\n  size_t sampled_count = (size_t)core_num__i32__count_ones(good_lower_half);\n  Eurydice_arr_88\n  upper_shuffles =\n    LIBCRUX_ML_DSA_SIMD_AVX2_REJECTION_SAMPLE_SHUFFLE_TABLE_SHUFFLE_TABLE.data[(size_t)good_upper_half];\n  __m128i upper_shuffles0 = mm_loadu_si128(Eurydice_array_to_slice_shared_46(&upper_shuffles));\n  __m128i upper_coefficients = mm256_extracti128_si256((int32_t)1, shifted, __m128i);\n  __m128i upper_coefficients0 = mm_shuffle_epi8(upper_coefficients, upper_shuffles0);\n  mm_storeu_si128_i32(Eurydice_slice_subslice_mut_46(output,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = sampled_count,\n          .end = sampled_count + (size_t)4U\n        }\n      )),\n    upper_coefficients0);\n  size_t uu____0 = sampled_count;\n  return uu____0 + (size_t)core_num__i32__count_ones(good_upper_half);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE size_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_equals_2_a2(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  return libcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_sample_fd(randomness, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.rejection_sample.less_than_eta.shift_interval\nwith const generics\n- ETA= 4\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_shift_interval_ac(__m256i coefficients)\n{\n  return mm256_sub_epi32(mm256_set1_epi32((int32_t)(size_t)4U), coefficients);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.rejection_sample.less_than_eta.sample\nwith const generics\n- ETA= 4\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE size_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_sample_ac(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_dst_ref_mut_fc output\n)\n{\n  __m256i\n  potential_coefficients =\n    libcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned(libcrux_ml_dsa_constants_Eta_Four,\n      input);\n  int32_t interval_boundary;\n  interval_boundary = (int32_t)9;\n  __m256i\n  compare_with_interval_boundary =\n    mm256_cmpgt_epi32(mm256_set1_epi32(interval_boundary),\n      potential_coefficients);\n  int32_t good = mm256_movemask_ps(mm256_castsi256_ps(compare_with_interval_boundary));\n  int32_t good_lower_half = good & (int32_t)15;\n  int32_t good_upper_half = good >> 4U;\n  __m256i\n  shifted =\n    libcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_shift_interval_ac(potential_coefficients);\n  Eurydice_arr_88\n  lower_shuffles =\n    LIBCRUX_ML_DSA_SIMD_AVX2_REJECTION_SAMPLE_SHUFFLE_TABLE_SHUFFLE_TABLE.data[(size_t)good_lower_half];\n  __m128i lower_shuffles0 = mm_loadu_si128(Eurydice_array_to_slice_shared_46(&lower_shuffles));\n  __m128i lower_coefficients = mm256_castsi256_si128(shifted);\n  __m128i lower_coefficients0 = mm_shuffle_epi8(lower_coefficients, lower_shuffles0);\n  mm_storeu_si128_i32(Eurydice_slice_subslice_mut_46(output,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)4U })),\n    lower_coefficients0);\n  size_t sampled_count = (size_t)core_num__i32__count_ones(good_lower_half);\n  Eurydice_arr_88\n  upper_shuffles =\n    LIBCRUX_ML_DSA_SIMD_AVX2_REJECTION_SAMPLE_SHUFFLE_TABLE_SHUFFLE_TABLE.data[(size_t)good_upper_half];\n  __m128i upper_shuffles0 = mm_loadu_si128(Eurydice_array_to_slice_shared_46(&upper_shuffles));\n  __m128i upper_coefficients = mm256_extracti128_si256((int32_t)1, shifted, __m128i);\n  __m128i upper_coefficients0 = mm_shuffle_epi8(upper_coefficients, upper_shuffles0);\n  mm_storeu_si128_i32(Eurydice_slice_subslice_mut_46(output,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = sampled_count,\n          .end = sampled_count + (size_t)4U\n        }\n      )),\n    upper_coefficients0);\n  size_t uu____0 = sampled_count;\n  return uu____0 + (size_t)core_num__i32__count_ones(good_upper_half);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE size_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_equals_4_a2(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  return libcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_sample_ac(randomness, out);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_19_aux(\n  __m256i simd_unit_shifted\n)\n{\n  __m256i\n  adjacent_2_combined =\n    mm256_sllv_epi32(simd_unit_shifted,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)12,\n        (int32_t)0,\n        (int32_t)12,\n        (int32_t)0,\n        (int32_t)12,\n        (int32_t)0,\n        (int32_t)12));\n  __m256i adjacent_2_combined0 = mm256_srli_epi64((int32_t)12, adjacent_2_combined, __m256i);\n  return\n    mm256_shuffle_epi8(adjacent_2_combined0,\n      mm256_set_epi8((int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)12,\n        (int8_t)11,\n        (int8_t)10,\n        (int8_t)9,\n        (int8_t)8,\n        (int8_t)4,\n        (int8_t)3,\n        (int8_t)2,\n        (int8_t)1,\n        (int8_t)0,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)12,\n        (int8_t)11,\n        (int8_t)10,\n        (int8_t)9,\n        (int8_t)8,\n        (int8_t)4,\n        (int8_t)3,\n        (int8_t)2,\n        (int8_t)1,\n        (int8_t)0));\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_19(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  Eurydice_arr_60 serialized = { .data = { 0U } };\n  __m256i\n  simd_unit_shifted =\n    mm256_sub_epi32(mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_2_POW_19),\n      simd_unit[0U]);\n  __m256i\n  adjacent_4_combined =\n    libcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_19_aux(simd_unit_shifted);\n  __m128i lower_4 = mm256_castsi256_si128(adjacent_4_combined);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_364(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)16U })),\n    lower_4);\n  __m128i upper_4 = mm256_extracti128_si256((int32_t)1, adjacent_4_combined, __m128i);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_364(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)10U, .end = (size_t)26U })),\n    upper_4);\n  Eurydice_slice_copy(out,\n    Eurydice_array_to_subslice_shared_36(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)20U })),\n    uint8_t);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_17_aux(\n  __m256i simd_unit_shifted\n)\n{\n  __m256i\n  adjacent_2_combined =\n    mm256_sllv_epi32(simd_unit_shifted,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)14,\n        (int32_t)0,\n        (int32_t)14,\n        (int32_t)0,\n        (int32_t)14,\n        (int32_t)0,\n        (int32_t)14));\n  __m256i adjacent_2_combined0 = mm256_srli_epi64((int32_t)14, adjacent_2_combined, __m256i);\n  __m256i every_second_element = mm256_bsrli_epi128((int32_t)8, adjacent_2_combined0, __m256i);\n  __m256i\n  every_second_element_shifted = mm256_slli_epi64((int32_t)36, every_second_element, __m256i);\n  __m256i\n  adjacent_4_combined = mm256_add_epi64(adjacent_2_combined0, every_second_element_shifted);\n  return\n    mm256_srlv_epi64(adjacent_4_combined,\n      mm256_set_epi64x((int64_t)28LL, (int64_t)0LL, (int64_t)28LL, (int64_t)0LL));\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_17(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  Eurydice_arr_60 serialized = { .data = { 0U } };\n  __m256i\n  simd_unit_shifted =\n    mm256_sub_epi32(mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_2_POW_17),\n      simd_unit[0U]);\n  __m256i\n  adjacent_4_combined =\n    libcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_17_aux(simd_unit_shifted);\n  __m128i lower_4 = mm256_castsi256_si128(adjacent_4_combined);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_364(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)16U })),\n    lower_4);\n  __m128i upper_4 = mm256_extracti128_si256((int32_t)1, adjacent_4_combined, __m128i);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_364(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)9U, .end = (size_t)25U })),\n    upper_4);\n  Eurydice_slice_copy(out,\n    Eurydice_array_to_subslice_shared_36(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)18U })),\n    uint8_t);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized,\n  size_t gamma1_exponent\n)\n{\n  switch (gamma1_exponent)\n  {\n    case 17U:\n      {\n        break;\n      }\n    case 19U:\n      {\n        libcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_19(simd_unit,\n          serialized);\n        return;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  libcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_17(simd_unit,\n    serialized);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_gamma1_serialize_a2(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized,\n  size_t gamma1_exponent\n)\n{\n  libcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize(simd_unit, serialized, gamma1_exponent);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_deserialize_when_gamma1_is_2_pow_17_unsigned(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n)\n{\n  __m128i\n  serialized_lower =\n    mm_loadu_si128(Eurydice_slice_subslice_shared_7e(serialized,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)16U })));\n  __m128i\n  serialized_upper =\n    mm_loadu_si128(Eurydice_slice_subslice_shared_7e(serialized,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)2U, .end = (size_t)18U })));\n  __m256i serialized_vec = mm256_set_m128i(serialized_upper, serialized_lower);\n  __m256i\n  coefficients =\n    mm256_shuffle_epi8(serialized_vec,\n      mm256_set_epi8((int8_t)-1,\n        (int8_t)15,\n        (int8_t)14,\n        (int8_t)13,\n        (int8_t)-1,\n        (int8_t)13,\n        (int8_t)12,\n        (int8_t)11,\n        (int8_t)-1,\n        (int8_t)11,\n        (int8_t)10,\n        (int8_t)9,\n        (int8_t)-1,\n        (int8_t)9,\n        (int8_t)8,\n        (int8_t)7,\n        (int8_t)-1,\n        (int8_t)8,\n        (int8_t)7,\n        (int8_t)6,\n        (int8_t)-1,\n        (int8_t)6,\n        (int8_t)5,\n        (int8_t)4,\n        (int8_t)-1,\n        (int8_t)4,\n        (int8_t)3,\n        (int8_t)2,\n        (int8_t)-1,\n        (int8_t)2,\n        (int8_t)1,\n        (int8_t)0));\n  __m256i\n  coefficients0 =\n    mm256_srlv_epi32(coefficients,\n      mm256_set_epi32((int32_t)6,\n        (int32_t)4,\n        (int32_t)2,\n        (int32_t)0,\n        (int32_t)6,\n        (int32_t)4,\n        (int32_t)2,\n        (int32_t)0));\n  __m256i\n  coefficients1 =\n    mm256_and_si256(coefficients0,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_17_TIMES_2_MASK));\n  out[0U] = coefficients1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_deserialize_when_gamma1_is_2_pow_19_unsigned(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n)\n{\n  __m128i\n  serialized_lower =\n    mm_loadu_si128(Eurydice_slice_subslice_shared_7e(serialized,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)16U })));\n  __m128i\n  serialized_upper =\n    mm_loadu_si128(Eurydice_slice_subslice_shared_7e(serialized,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)4U, .end = (size_t)20U })));\n  __m256i serialized_vec = mm256_set_m128i(serialized_upper, serialized_lower);\n  __m256i\n  coefficients =\n    mm256_shuffle_epi8(serialized_vec,\n      mm256_set_epi8((int8_t)-1,\n        (int8_t)15,\n        (int8_t)14,\n        (int8_t)13,\n        (int8_t)-1,\n        (int8_t)13,\n        (int8_t)12,\n        (int8_t)11,\n        (int8_t)-1,\n        (int8_t)10,\n        (int8_t)9,\n        (int8_t)8,\n        (int8_t)-1,\n        (int8_t)8,\n        (int8_t)7,\n        (int8_t)6,\n        (int8_t)-1,\n        (int8_t)9,\n        (int8_t)8,\n        (int8_t)7,\n        (int8_t)-1,\n        (int8_t)7,\n        (int8_t)6,\n        (int8_t)5,\n        (int8_t)-1,\n        (int8_t)4,\n        (int8_t)3,\n        (int8_t)2,\n        (int8_t)-1,\n        (int8_t)2,\n        (int8_t)1,\n        (int8_t)0));\n  __m256i\n  coefficients0 =\n    mm256_srlv_epi32(coefficients,\n      mm256_set_epi32((int32_t)4,\n        (int32_t)0,\n        (int32_t)4,\n        (int32_t)0,\n        (int32_t)4,\n        (int32_t)0,\n        (int32_t)4,\n        (int32_t)0));\n  __m256i\n  coefficients1 =\n    mm256_and_si256(coefficients0,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_19_TIMES_2_MASK));\n  out[0U] = coefficients1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_deserialize(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out,\n  size_t gamma1_exponent\n)\n{\n  switch ((uint8_t)gamma1_exponent)\n  {\n    case 17U:\n      {\n        libcrux_ml_dsa_simd_avx2_encoding_gamma1_deserialize_when_gamma1_is_2_pow_17_unsigned(serialized,\n          out);\n        break;\n      }\n    case 19U:\n      {\n        libcrux_ml_dsa_simd_avx2_encoding_gamma1_deserialize_when_gamma1_is_2_pow_19_unsigned(serialized,\n          out);\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  int32_t gamma1;\n  switch ((uint8_t)gamma1_exponent)\n  {\n    case 17U:\n      {\n        gamma1 = LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_17;\n        break;\n      }\n    case 19U:\n      {\n        gamma1 = LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_19;\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  out[0U] = mm256_sub_epi32(mm256_set1_epi32(gamma1), out[0U]);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_gamma1_deserialize_a2(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out,\n  size_t gamma1_exponent\n)\n{\n  libcrux_ml_dsa_simd_avx2_encoding_gamma1_deserialize(serialized, out, gamma1_exponent);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m128i\nlibcrux_ml_dsa_simd_avx2_encoding_commitment_serialize_4(const __m256i *simd_unit)\n{\n  __m256i\n  adjacent_2_combined =\n    mm256_sllv_epi32(simd_unit[0U],\n      mm256_set_epi32((int32_t)0,\n        (int32_t)28,\n        (int32_t)0,\n        (int32_t)28,\n        (int32_t)0,\n        (int32_t)28,\n        (int32_t)0,\n        (int32_t)28));\n  __m256i adjacent_2_combined0 = mm256_srli_epi64((int32_t)28, adjacent_2_combined, __m256i);\n  __m256i\n  adjacent_4_combined =\n    mm256_permutevar8x32_epi32(adjacent_2_combined0,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)6,\n        (int32_t)2,\n        (int32_t)4,\n        (int32_t)0));\n  __m128i adjacent_4_combined0 = mm256_castsi256_si128(adjacent_4_combined);\n  return\n    mm_shuffle_epi8(adjacent_4_combined0,\n      mm_set_epi8((int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)12,\n        (int8_t)4,\n        (int8_t)8,\n        (int8_t)0));\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_encoding_commitment_serialize_6(const __m256i *simd_unit)\n{\n  __m256i\n  adjacent_2_combined =\n    mm256_sllv_epi32(simd_unit[0U],\n      mm256_set_epi32((int32_t)0,\n        (int32_t)26,\n        (int32_t)0,\n        (int32_t)26,\n        (int32_t)0,\n        (int32_t)26,\n        (int32_t)0,\n        (int32_t)26));\n  __m256i adjacent_2_combined0 = mm256_srli_epi64((int32_t)26, adjacent_2_combined, __m256i);\n  __m256i\n  adjacent_3_combined =\n    mm256_shuffle_epi8(adjacent_2_combined0,\n      mm256_set_epi8((int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)9,\n        (int8_t)8,\n        (int8_t)1,\n        (int8_t)0,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)9,\n        (int8_t)8,\n        (int8_t)1,\n        (int8_t)0));\n  __m256i\n  adjacent_3_combined0 =\n    mm256_mullo_epi16(adjacent_3_combined,\n      mm256_set_epi16((int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 4U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 0U,\n        (int16_t)1 << 4U));\n  return\n    mm256_srlv_epi32(adjacent_3_combined0,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)4,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)4));\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_commitment_serialize(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  Eurydice_arr_91 serialized = { .data = { 0U } };\n  switch ((uint8_t)out.meta)\n  {\n    case 4U:\n      {\n        mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_367(&serialized,\n            (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)16U })),\n          libcrux_ml_dsa_simd_avx2_encoding_commitment_serialize_4(simd_unit));\n        Eurydice_slice_copy(out,\n          Eurydice_array_to_subslice_shared_361(&serialized,\n            (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)4U })),\n          uint8_t);\n        break;\n      }\n    case 6U:\n      {\n        __m256i\n        adjacent_3_combined = libcrux_ml_dsa_simd_avx2_encoding_commitment_serialize_6(simd_unit);\n        __m128i lower_3 = mm256_castsi256_si128(adjacent_3_combined);\n        __m128i upper_3 = mm256_extracti128_si256((int32_t)1, adjacent_3_combined, __m128i);\n        mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_367(&serialized,\n            (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)16U })),\n          lower_3);\n        mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_367(&serialized,\n            (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)3U, .end = (size_t)19U })),\n          upper_3);\n        Eurydice_slice_copy(out,\n          Eurydice_array_to_subslice_shared_361(&serialized,\n            (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)6U })),\n          uint8_t);\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_commitment_serialize_a2(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  libcrux_ml_dsa_simd_avx2_encoding_commitment_serialize(simd_unit, serialized);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m128i\nlibcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_4_aux(__m256i simd_unit_shifted)\n{\n  __m256i\n  adjacent_2_combined =\n    mm256_sllv_epi32(simd_unit_shifted,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)28,\n        (int32_t)0,\n        (int32_t)28,\n        (int32_t)0,\n        (int32_t)28,\n        (int32_t)0,\n        (int32_t)28));\n  __m256i adjacent_2_combined0 = mm256_srli_epi64((int32_t)28, adjacent_2_combined, __m256i);\n  __m256i\n  adjacent_4_combined =\n    mm256_permutevar8x32_epi32(adjacent_2_combined0,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)6,\n        (int32_t)2,\n        (int32_t)4,\n        (int32_t)0));\n  __m128i adjacent_4_combined0 = mm256_castsi256_si128(adjacent_4_combined);\n  return\n    mm_shuffle_epi8(adjacent_4_combined0,\n      mm_set_epi8((int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)-16,\n        (int8_t)12,\n        (int8_t)4,\n        (int8_t)8,\n        (int8_t)0));\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_4(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  Eurydice_arr_88 serialized = { .data = { 0U } };\n  __m256i\n  simd_unit_shifted =\n    mm256_sub_epi32(mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_ERROR_ETA_4),\n      simd_unit[0U]);\n  __m128i\n  adjacent_4_combined =\n    libcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_4_aux(simd_unit_shifted);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_368(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)16U })),\n    adjacent_4_combined);\n  Eurydice_slice_copy(out,\n    Eurydice_array_to_subslice_shared_362(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)4U })),\n    uint8_t);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m128i\nlibcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_2_aux(__m256i simd_unit_shifted)\n{\n  __m256i\n  adjacent_2_combined =\n    mm256_sllv_epi32(simd_unit_shifted,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)29,\n        (int32_t)0,\n        (int32_t)29,\n        (int32_t)0,\n        (int32_t)29,\n        (int32_t)0,\n        (int32_t)29));\n  __m256i adjacent_2_combined0 = mm256_srli_epi64((int32_t)29, adjacent_2_combined, __m256i);\n  __m256i\n  adjacent_4_combined =\n    mm256_shuffle_epi8(adjacent_2_combined0,\n      mm256_set_epi8((int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)8,\n        (int8_t)-1,\n        (int8_t)0,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)8,\n        (int8_t)-1,\n        (int8_t)0));\n  __m256i\n  adjacent_4_combined0 =\n    mm256_madd_epi16(adjacent_4_combined,\n      mm256_set_epi16((int16_t)0,\n        (int16_t)0,\n        (int16_t)0,\n        (int16_t)0,\n        (int16_t)0,\n        (int16_t)0,\n        (int16_t)1 << 6U,\n        (int16_t)1,\n        (int16_t)0,\n        (int16_t)0,\n        (int16_t)0,\n        (int16_t)0,\n        (int16_t)0,\n        (int16_t)0,\n        (int16_t)1 << 6U,\n        (int16_t)1));\n  __m256i\n  adjacent_6_combined =\n    mm256_permutevar8x32_epi32(adjacent_4_combined0,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)4,\n        (int32_t)0));\n  __m128i adjacent_6_combined0 = mm256_castsi256_si128(adjacent_6_combined);\n  __m128i\n  adjacent_6_combined1 =\n    mm_sllv_epi32(adjacent_6_combined0,\n      mm_set_epi32((int32_t)0, (int32_t)0, (int32_t)0, (int32_t)20));\n  return mm_srli_epi64((int32_t)20, adjacent_6_combined1, __m128i);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_2(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  Eurydice_arr_88 serialized = { .data = { 0U } };\n  __m256i\n  simd_unit_shifted =\n    mm256_sub_epi32(mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_ERROR_ETA_2),\n      simd_unit[0U]);\n  __m128i\n  adjacent_6_combined =\n    libcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_2_aux(simd_unit_shifted);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_368(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)16U })),\n    adjacent_6_combined);\n  Eurydice_slice_copy(out,\n    Eurydice_array_to_subslice_shared_362(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)3U })),\n    uint8_t);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_error_serialize(\n  libcrux_ml_dsa_constants_Eta eta,\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  switch (eta)\n  {\n    case libcrux_ml_dsa_constants_Eta_Two:\n      {\n        break;\n      }\n    case libcrux_ml_dsa_constants_Eta_Four:\n      {\n        libcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_4(simd_unit, serialized);\n        return;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  libcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_2(simd_unit, serialized);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_error_serialize_a2(\n  libcrux_ml_dsa_constants_Eta eta,\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  libcrux_ml_dsa_simd_avx2_encoding_error_serialize(eta, simd_unit, serialized);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_error_deserialize(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n)\n{\n  __m256i\n  unsigned0 = libcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned(eta, serialized);\n  int32_t eta_v;\n  switch (eta)\n  {\n    case libcrux_ml_dsa_constants_Eta_Two:\n      {\n        eta_v = (int32_t)2;\n        break;\n      }\n    case libcrux_ml_dsa_constants_Eta_Four:\n      {\n        eta_v = (int32_t)4;\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  out[0U] = mm256_sub_epi32(mm256_set1_epi32(eta_v), unsigned0);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_error_deserialize_a2(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n)\n{\n  libcrux_ml_dsa_simd_avx2_encoding_error_deserialize(eta, serialized, out);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_encoding_t0_change_interval(const __m256i *simd_unit)\n{\n  __m256i\n  interval_end =\n    mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_T0_POW_2_BITS_IN_LOWER_PART_OF_T_MINUS_ONE);\n  return mm256_sub_epi32(interval_end, simd_unit[0U]);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m128i\nlibcrux_ml_dsa_simd_avx2_encoding_t0_serialize_aux(__m256i simd_unit)\n{\n  __m256i\n  adjacent_2_combined =\n    mm256_sllv_epi32(simd_unit,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)19,\n        (int32_t)0,\n        (int32_t)19,\n        (int32_t)0,\n        (int32_t)19,\n        (int32_t)0,\n        (int32_t)19));\n  __m256i adjacent_2_combined0 = mm256_srli_epi64((int32_t)19, adjacent_2_combined, __m256i);\n  __m256i\n  adjacent_4_combined =\n    mm256_permutevar8x32_epi32(adjacent_2_combined0,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)6,\n        (int32_t)4,\n        (int32_t)2,\n        (int32_t)0));\n  __m256i\n  adjacent_4_combined0 =\n    mm256_sllv_epi32(adjacent_4_combined,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)6,\n        (int32_t)0,\n        (int32_t)6,\n        (int32_t)0,\n        (int32_t)6,\n        (int32_t)0,\n        (int32_t)6));\n  __m256i adjacent_4_combined1 = mm256_srli_epi64((int32_t)6, adjacent_4_combined0, __m256i);\n  __m256i second_4_combined = mm256_bsrli_epi128((int32_t)8, adjacent_4_combined1, __m256i);\n  __m256i least_12_bits_shifted_up = mm256_slli_epi64((int32_t)52, second_4_combined, __m256i);\n  __m256i bits_sequential = mm256_add_epi64(adjacent_4_combined1, least_12_bits_shifted_up);\n  __m256i\n  bits_sequential0 =\n    mm256_srlv_epi64(bits_sequential,\n      mm256_set_epi64x((int64_t)0LL, (int64_t)0LL, (int64_t)12LL, (int64_t)0LL));\n  return mm256_castsi256_si128(bits_sequential0);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_t0_serialize(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  Eurydice_arr_88 serialized = { .data = { 0U } };\n  __m256i simd_unit_changed = libcrux_ml_dsa_simd_avx2_encoding_t0_change_interval(simd_unit);\n  __m128i\n  bits_sequential = libcrux_ml_dsa_simd_avx2_encoding_t0_serialize_aux(simd_unit_changed);\n  mm_storeu_bytes_si128(Eurydice_array_to_slice_mut_46(&serialized), bits_sequential);\n  Eurydice_slice_copy(out,\n    Eurydice_array_to_subslice_shared_362(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)13U })),\n    uint8_t);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_t0_serialize_a2(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_ml_dsa_simd_avx2_encoding_t0_serialize(simd_unit, out);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_t0_deserialize_unsigned(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n)\n{\n  Eurydice_arr_88 serialized_extended = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_368(&serialized_extended,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)13U })),\n    serialized,\n    uint8_t);\n  __m128i serialized0 = mm_loadu_si128(Eurydice_array_to_slice_shared_46(&serialized_extended));\n  __m256i serialized1 = mm256_set_m128i(serialized0, serialized0);\n  __m256i\n  coefficients =\n    mm256_shuffle_epi8(serialized1,\n      mm256_set_epi8((int8_t)-1,\n        (int8_t)-1,\n        (int8_t)12,\n        (int8_t)11,\n        (int8_t)-1,\n        (int8_t)11,\n        (int8_t)10,\n        (int8_t)9,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)9,\n        (int8_t)8,\n        (int8_t)-1,\n        (int8_t)8,\n        (int8_t)7,\n        (int8_t)6,\n        (int8_t)-1,\n        (int8_t)6,\n        (int8_t)5,\n        (int8_t)4,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)4,\n        (int8_t)3,\n        (int8_t)-1,\n        (int8_t)3,\n        (int8_t)2,\n        (int8_t)1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)1,\n        (int8_t)0));\n  __m256i\n  coefficients0 =\n    mm256_srlv_epi32(coefficients,\n      mm256_set_epi32((int32_t)3,\n        (int32_t)6,\n        (int32_t)1,\n        (int32_t)4,\n        (int32_t)7,\n        (int32_t)2,\n        (int32_t)5,\n        (int32_t)0));\n  __m256i\n  coefficients1 =\n    mm256_and_si256(coefficients0,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_T0_DESERIALIZE_UNSIGNED_COEFFICIENT_MASK));\n  out[0U] = coefficients1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_t0_deserialize(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n)\n{\n  libcrux_ml_dsa_simd_avx2_encoding_t0_deserialize_unsigned(serialized, out);\n  out[0U] = libcrux_ml_dsa_simd_avx2_encoding_t0_change_interval(out);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_t0_deserialize_a2(Eurydice_borrow_slice_u8 serialized, __m256i *out)\n{\n  libcrux_ml_dsa_simd_avx2_encoding_t0_deserialize(serialized, out);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_t1_serialize(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  Eurydice_arr_6d serialized = { .data = { 0U } };\n  __m256i\n  adjacent_2_combined =\n    mm256_sllv_epi32(simd_unit[0U],\n      mm256_set_epi32((int32_t)0,\n        (int32_t)22,\n        (int32_t)0,\n        (int32_t)22,\n        (int32_t)0,\n        (int32_t)22,\n        (int32_t)0,\n        (int32_t)22));\n  __m256i adjacent_2_combined0 = mm256_srli_epi64((int32_t)22, adjacent_2_combined, __m256i);\n  __m256i\n  adjacent_4_combined =\n    mm256_permutevar8x32_epi32(adjacent_2_combined0,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)0,\n        (int32_t)6,\n        (int32_t)4,\n        (int32_t)0,\n        (int32_t)0,\n        (int32_t)2,\n        (int32_t)0));\n  __m256i\n  adjacent_4_combined0 =\n    mm256_sllv_epi32(adjacent_4_combined,\n      mm256_set_epi32((int32_t)0,\n        (int32_t)12,\n        (int32_t)0,\n        (int32_t)12,\n        (int32_t)0,\n        (int32_t)12,\n        (int32_t)0,\n        (int32_t)12));\n  __m256i adjacent_4_combined1 = mm256_srli_epi64((int32_t)12, adjacent_4_combined0, __m256i);\n  __m128i lower_4 = mm256_castsi256_si128(adjacent_4_combined1);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_369(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)16U })),\n    lower_4);\n  __m128i upper_4 = mm256_extracti128_si256((int32_t)1, adjacent_4_combined1, __m128i);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_369(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)5U, .end = (size_t)21U })),\n    upper_4);\n  Eurydice_slice_copy(out,\n    Eurydice_array_to_subslice_shared_363(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)10U })),\n    uint8_t);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_t1_serialize_a2(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_ml_dsa_simd_avx2_encoding_t1_serialize(simd_unit, out);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_encoding_t1_deserialize(Eurydice_borrow_slice_u8 bytes, __m256i *out)\n{\n  Eurydice_arr_88 bytes_extended = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_368(&bytes_extended,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)10U })),\n    bytes,\n    uint8_t);\n  __m128i bytes_loaded = mm_loadu_si128(Eurydice_array_to_slice_shared_46(&bytes_extended));\n  __m256i bytes_loaded0 = mm256_set_m128i(bytes_loaded, bytes_loaded);\n  __m256i\n  coefficients =\n    mm256_shuffle_epi8(bytes_loaded0,\n      mm256_set_epi8((int8_t)-1,\n        (int8_t)-1,\n        (int8_t)9,\n        (int8_t)8,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)8,\n        (int8_t)7,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)7,\n        (int8_t)6,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)6,\n        (int8_t)5,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)4,\n        (int8_t)3,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)3,\n        (int8_t)2,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)2,\n        (int8_t)1,\n        (int8_t)-1,\n        (int8_t)-1,\n        (int8_t)1,\n        (int8_t)0));\n  __m256i\n  coefficients0 =\n    mm256_srlv_epi32(coefficients,\n      mm256_set_epi32((int32_t)6,\n        (int32_t)4,\n        (int32_t)2,\n        (int32_t)0,\n        (int32_t)6,\n        (int32_t)4,\n        (int32_t)2,\n        (int32_t)0));\n  out[0U] =\n    mm256_and_si256(coefficients0,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_T1_DESERIALIZE_COEFFICIENT_MASK));\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_t1_deserialize_a2(Eurydice_borrow_slice_u8 serialized, __m256i *out)\n{\n  libcrux_ml_dsa_simd_avx2_encoding_t1_deserialize(serialized, out);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  __m256i zeta,\n  size_t step_by,\n  __m256i field_modulus,\n  __m256i inverse_of_modulus_mod_montgomery_r\n)\n{\n  __m256i t = re->data[index + step_by];\n  libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_aux(field_modulus,\n    inverse_of_modulus_mod_montgomery_r,\n    &t,\n    &zeta);\n  re->data[index + step_by] = re->data[index];\n  libcrux_ml_dsa_simd_avx2_arithmetic_subtract(&re->data[index + step_by], &t);\n  libcrux_ml_dsa_simd_avx2_arithmetic_add(&re->data[index], &t);\n}\n\n/**\n This is equivalent to the pqclean 0 and 1\n\n This does 32 Montgomery multiplications (192 multiplications).\n This is the same as in pqclean. The only difference is locality of registers.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6(Eurydice_arr_cd0 *re)\n{\n  __m256i field_modulus = mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS);\n  __m256i\n  inverse_of_modulus_mod_montgomery_r =\n    mm256_set1_epi32((int32_t)LIBCRUX_ML_DSA_SIMD_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R);\n  __m256i zeta7 = mm256_set1_epi32((int32_t)25847);\n  __m256i zeta60 = mm256_set1_epi32((int32_t)-2608894);\n  __m256i zeta61 = mm256_set1_epi32((int32_t)-518909);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)0U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)0U + (size_t)1U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)0U + (size_t)2U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)0U + (size_t)3U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)8U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)8U + (size_t)1U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)8U + (size_t)2U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)8U + (size_t)3U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)0U,\n    zeta60,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)0U + (size_t)1U,\n    zeta60,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)0U + (size_t)2U,\n    zeta60,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)0U + (size_t)3U,\n    zeta60,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)16U,\n    zeta61,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)16U + (size_t)1U,\n    zeta61,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)16U + (size_t)2U,\n    zeta61,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)16U + (size_t)3U,\n    zeta61,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)4U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)4U + (size_t)1U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)4U + (size_t)2U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)4U + (size_t)3U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)12U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)12U + (size_t)1U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)12U + (size_t)2U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)12U + (size_t)3U,\n    zeta7,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)4U,\n    zeta60,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)4U + (size_t)1U,\n    zeta60,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)4U + (size_t)2U,\n    zeta60,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)4U + (size_t)3U,\n    zeta60,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)20U,\n    zeta61,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)20U + (size_t)1U,\n    zeta61,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)20U + (size_t)2U,\n    zeta61,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(re,\n    (size_t)20U + (size_t)3U,\n    zeta61,\n    LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6,\n    field_modulus,\n    inverse_of_modulus_mod_montgomery_r);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.ntt.ntt_at_layer_5_to_3.round\nwith const generics\n- STEP= 32\n- STEP_BY= 4\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_f6(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta\n)\n{\n  __m256i rhs = mm256_set1_epi32(zeta);\n  size_t\n  offset =\n    index * (size_t)32U * (size_t)2U / LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT;\n  for (size_t i = offset; i < offset + (size_t)4U; i++)\n  {\n    size_t j = i;\n    libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(&re->data[j + (size_t)4U], &rhs);\n    __m256i tmp = mm256_sub_epi32(re->data[j], re->data[j + (size_t)4U]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)4U]);\n    re->data[j + (size_t)4U] = tmp;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.ntt.ntt_at_layer_5_to_3.round\nwith const generics\n- STEP= 16\n- STEP_BY= 2\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_90(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta\n)\n{\n  __m256i rhs = mm256_set1_epi32(zeta);\n  size_t\n  offset =\n    index * (size_t)16U * (size_t)2U / LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT;\n  for (size_t i = offset; i < offset + (size_t)2U; i++)\n  {\n    size_t j = i;\n    libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(&re->data[j + (size_t)2U], &rhs);\n    __m256i tmp = mm256_sub_epi32(re->data[j], re->data[j + (size_t)2U]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)2U]);\n    re->data[j + (size_t)2U] = tmp;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.ntt.ntt_at_layer_5_to_3.round\nwith const generics\n- STEP= 8\n- STEP_BY= 1\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta\n)\n{\n  __m256i rhs = mm256_set1_epi32(zeta);\n  size_t\n  offset = index * (size_t)8U * (size_t)2U / LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT;\n  for (size_t i = offset; i < offset + (size_t)1U; i++)\n  {\n    size_t j = i;\n    libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(&re->data[j + (size_t)1U], &rhs);\n    __m256i tmp = mm256_sub_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] = tmp;\n  }\n}\n\n/**\n Layer 5, 4, 3\n\n Each layer does 16 Montgomery multiplications -> 3*16 = 48 total\n pqclean does 4 * 4 on each layer -> 48 total | plus 4 * 4 shuffles every time (48)\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_f6(re, (size_t)0U, (int32_t)237124);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_f6(re, (size_t)1U, (int32_t)-777960);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_f6(re, (size_t)2U, (int32_t)-876248);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_f6(re, (size_t)3U, (int32_t)466468);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_90(re, (size_t)0U, (int32_t)1826347);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_90(re, (size_t)1U, (int32_t)2353451);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_90(re, (size_t)2U, (int32_t)-359251);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_90(re, (size_t)3U, (int32_t)-2091905);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_90(re, (size_t)4U, (int32_t)3119733);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_90(re, (size_t)5U, (int32_t)-2884855);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_90(re, (size_t)6U, (int32_t)3111497);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_90(re, (size_t)7U, (int32_t)2680103);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)0U, (int32_t)2725464);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)1U, (int32_t)1024112);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)2U, (int32_t)-1079900);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)3U, (int32_t)3585928);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)4U, (int32_t)-549488);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)5U, (int32_t)-1119584);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)6U, (int32_t)2619752);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)7U, (int32_t)-2108549);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)8U, (int32_t)-2118186);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)9U, (int32_t)-3859737);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)10U, (int32_t)-1399561);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)11U, (int32_t)-3277672);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)12U, (int32_t)1757237);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)13U, (int32_t)-19422);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)14U, (int32_t)4010497);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(re, (size_t)15U, (int32_t)280005);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_ntt_butterfly_8(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta0,\n  int32_t zeta1\n)\n{\n  __m256i re0 = re->data[index];\n  __m256i re1 = re->data[index + (size_t)1U];\n  __m256i summands = mm256_set_m128i(mm256_castsi256_si128(re1), mm256_castsi256_si128(re0));\n  __m256i zeta_products = mm256_permute2x128_si256((int32_t)19, re1, re0, __m256i);\n  __m256i zetas = mm256_set_epi32(zeta1, zeta1, zeta1, zeta1, zeta0, zeta0, zeta0, zeta0);\n  libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(&zeta_products, &zetas);\n  __m256i sub_terms = mm256_sub_epi32(summands, zeta_products);\n  __m256i add_terms = mm256_add_epi32(summands, zeta_products);\n  __m256i\n  nre0 = mm256_set_m128i(mm256_castsi256_si128(sub_terms), mm256_castsi256_si128(add_terms));\n  __m256i nre1 = mm256_permute2x128_si256((int32_t)19, sub_terms, add_terms, __m256i);\n  re->data[index] = nre0;\n  re->data[index + (size_t)1U] = nre1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_2(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)0U, (int32_t)2706023, (int32_t)95776);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)2U, (int32_t)3077325, (int32_t)3530437);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)4U, (int32_t)-1661693, (int32_t)-3592148);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)6U, (int32_t)-2537516, (int32_t)3915439);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)8U, (int32_t)-3861115, (int32_t)-3043716);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)10U, (int32_t)3574422, (int32_t)-2867647);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)12U, (int32_t)3539968, (int32_t)-300467);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)14U, (int32_t)2348700, (int32_t)-539299);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re,\n    (size_t)16U,\n    (int32_t)-1699267,\n    (int32_t)-1643818);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)18U, (int32_t)3505694, (int32_t)-3821735);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)20U, (int32_t)3507263, (int32_t)-2140649);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)22U, (int32_t)-1600420, (int32_t)3699596);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)24U, (int32_t)811944, (int32_t)531354);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)26U, (int32_t)954230, (int32_t)3881043);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)28U, (int32_t)3900724, (int32_t)-2556880);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_8(re, (size_t)30U, (int32_t)2071892, (int32_t)-2797779);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_ntt_butterfly_4(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta_a0,\n  int32_t zeta_a1,\n  int32_t zeta_b0,\n  int32_t zeta_b1\n)\n{\n  __m256i re0 = re->data[index];\n  __m256i re1 = re->data[index + (size_t)1U];\n  __m256i summands = mm256_unpacklo_epi64(re0, re1);\n  __m256i zeta_products = mm256_unpackhi_epi64(re0, re1);\n  __m256i\n  zetas = mm256_set_epi32(zeta_b1, zeta_b1, zeta_a1, zeta_a1, zeta_b0, zeta_b0, zeta_a0, zeta_a0);\n  libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(&zeta_products, &zetas);\n  __m256i sub_terms = mm256_sub_epi32(summands, zeta_products);\n  __m256i add_terms = mm256_add_epi32(summands, zeta_products);\n  __m256i nre0 = mm256_unpacklo_epi64(add_terms, sub_terms);\n  __m256i nre1 = mm256_unpackhi_epi64(add_terms, sub_terms);\n  re->data[index] = nre0;\n  re->data[index + (size_t)1U] = nre1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_1(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)0U,\n    (int32_t)-3930395,\n    (int32_t)-1528703,\n    (int32_t)-3677745,\n    (int32_t)-3041255);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)2U,\n    (int32_t)-1452451,\n    (int32_t)3475950,\n    (int32_t)2176455,\n    (int32_t)-1585221);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)4U,\n    (int32_t)-1257611,\n    (int32_t)1939314,\n    (int32_t)-4083598,\n    (int32_t)-1000202);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)6U,\n    (int32_t)-3190144,\n    (int32_t)-3157330,\n    (int32_t)-3632928,\n    (int32_t)126922);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)8U,\n    (int32_t)3412210,\n    (int32_t)-983419,\n    (int32_t)2147896,\n    (int32_t)2715295);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)10U,\n    (int32_t)-2967645,\n    (int32_t)-3693493,\n    (int32_t)-411027,\n    (int32_t)-2477047);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)12U,\n    (int32_t)-671102,\n    (int32_t)-1228525,\n    (int32_t)-22981,\n    (int32_t)-1308169);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)14U,\n    (int32_t)-381987,\n    (int32_t)1349076,\n    (int32_t)1852771,\n    (int32_t)-1430430);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)16U,\n    (int32_t)-3343383,\n    (int32_t)264944,\n    (int32_t)508951,\n    (int32_t)3097992);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)18U,\n    (int32_t)44288,\n    (int32_t)-1100098,\n    (int32_t)904516,\n    (int32_t)3958618);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)20U,\n    (int32_t)-3724342,\n    (int32_t)-8578,\n    (int32_t)1653064,\n    (int32_t)-3249728);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)22U,\n    (int32_t)2389356,\n    (int32_t)-210977,\n    (int32_t)759969,\n    (int32_t)-1316856);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)24U,\n    (int32_t)189548,\n    (int32_t)-3553272,\n    (int32_t)3159746,\n    (int32_t)-1851402);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)26U,\n    (int32_t)-2409325,\n    (int32_t)-177440,\n    (int32_t)1315589,\n    (int32_t)1341330);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)28U,\n    (int32_t)1285669,\n    (int32_t)-1584928,\n    (int32_t)-812732,\n    (int32_t)-1439742);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_4(re,\n    (size_t)30U,\n    (int32_t)-3019102,\n    (int32_t)-3881060,\n    (int32_t)-3628969,\n    (int32_t)3839961);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_ntt_butterfly_2(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta_a0,\n  int32_t zeta_a1,\n  int32_t zeta_a2,\n  int32_t zeta_a3,\n  int32_t zeta_b0,\n  int32_t zeta_b1,\n  int32_t zeta_b2,\n  int32_t zeta_b3\n)\n{\n  __m256i re0 = re->data[index];\n  __m256i re1 = re->data[index + (size_t)1U];\n  __m256i a = mm256_shuffle_epi32((int32_t)216, re0, __m256i);\n  __m256i b = mm256_shuffle_epi32((int32_t)216, re1, __m256i);\n  __m256i summands = mm256_unpacklo_epi64(a, b);\n  __m256i zeta_products = mm256_unpackhi_epi64(a, b);\n  __m256i\n  zetas = mm256_set_epi32(zeta_b3, zeta_b2, zeta_a3, zeta_a2, zeta_b1, zeta_b0, zeta_a1, zeta_a0);\n  libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(&zeta_products, &zetas);\n  __m256i sub_terms = mm256_sub_epi32(summands, zeta_products);\n  __m256i add_terms = mm256_add_epi32(summands, zeta_products);\n  __m256i a_terms_shuffled = mm256_unpacklo_epi64(add_terms, sub_terms);\n  __m256i b_terms_shuffled = mm256_unpackhi_epi64(add_terms, sub_terms);\n  __m256i nre0 = mm256_shuffle_epi32((int32_t)216, a_terms_shuffled, __m256i);\n  __m256i nre1 = mm256_shuffle_epi32((int32_t)216, b_terms_shuffled, __m256i);\n  re->data[index] = nre0;\n  re->data[index + (size_t)1U] = nre1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_0(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)0U,\n    (int32_t)2091667,\n    (int32_t)3407706,\n    (int32_t)2316500,\n    (int32_t)3817976,\n    (int32_t)-3342478,\n    (int32_t)2244091,\n    (int32_t)-2446433,\n    (int32_t)-3562462);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)2U,\n    (int32_t)266997,\n    (int32_t)2434439,\n    (int32_t)-1235728,\n    (int32_t)3513181,\n    (int32_t)-3520352,\n    (int32_t)-3759364,\n    (int32_t)-1197226,\n    (int32_t)-3193378);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)4U,\n    (int32_t)900702,\n    (int32_t)1859098,\n    (int32_t)909542,\n    (int32_t)819034,\n    (int32_t)495491,\n    (int32_t)-1613174,\n    (int32_t)-43260,\n    (int32_t)-522500);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)6U,\n    (int32_t)-655327,\n    (int32_t)-3122442,\n    (int32_t)2031748,\n    (int32_t)3207046,\n    (int32_t)-3556995,\n    (int32_t)-525098,\n    (int32_t)-768622,\n    (int32_t)-3595838);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)8U,\n    (int32_t)342297,\n    (int32_t)286988,\n    (int32_t)-2437823,\n    (int32_t)4108315,\n    (int32_t)3437287,\n    (int32_t)-3342277,\n    (int32_t)1735879,\n    (int32_t)203044);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)10U,\n    (int32_t)2842341,\n    (int32_t)2691481,\n    (int32_t)-2590150,\n    (int32_t)1265009,\n    (int32_t)4055324,\n    (int32_t)1247620,\n    (int32_t)2486353,\n    (int32_t)1595974);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)12U,\n    (int32_t)-3767016,\n    (int32_t)1250494,\n    (int32_t)2635921,\n    (int32_t)-3548272,\n    (int32_t)-2994039,\n    (int32_t)1869119,\n    (int32_t)1903435,\n    (int32_t)-1050970);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)14U,\n    (int32_t)-1333058,\n    (int32_t)1237275,\n    (int32_t)-3318210,\n    (int32_t)-1430225,\n    (int32_t)-451100,\n    (int32_t)1312455,\n    (int32_t)3306115,\n    (int32_t)-1962642);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)16U,\n    (int32_t)-1279661,\n    (int32_t)1917081,\n    (int32_t)-2546312,\n    (int32_t)-1374803,\n    (int32_t)1500165,\n    (int32_t)777191,\n    (int32_t)2235880,\n    (int32_t)3406031);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)18U,\n    (int32_t)-542412,\n    (int32_t)-2831860,\n    (int32_t)-1671176,\n    (int32_t)-1846953,\n    (int32_t)-2584293,\n    (int32_t)-3724270,\n    (int32_t)594136,\n    (int32_t)-3776993);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)20U,\n    (int32_t)-2013608,\n    (int32_t)2432395,\n    (int32_t)2454455,\n    (int32_t)-164721,\n    (int32_t)1957272,\n    (int32_t)3369112,\n    (int32_t)185531,\n    (int32_t)-1207385);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)22U,\n    (int32_t)-3183426,\n    (int32_t)162844,\n    (int32_t)1616392,\n    (int32_t)3014001,\n    (int32_t)810149,\n    (int32_t)1652634,\n    (int32_t)-3694233,\n    (int32_t)-1799107);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)24U,\n    (int32_t)-3038916,\n    (int32_t)3523897,\n    (int32_t)3866901,\n    (int32_t)269760,\n    (int32_t)2213111,\n    (int32_t)-975884,\n    (int32_t)1717735,\n    (int32_t)472078);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)26U,\n    (int32_t)-426683,\n    (int32_t)1723600,\n    (int32_t)-1803090,\n    (int32_t)1910376,\n    (int32_t)-1667432,\n    (int32_t)-1104333,\n    (int32_t)-260646,\n    (int32_t)-3833893);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)28U,\n    (int32_t)-2939036,\n    (int32_t)-2235985,\n    (int32_t)-420899,\n    (int32_t)-2286327,\n    (int32_t)183443,\n    (int32_t)-976891,\n    (int32_t)1612842,\n    (int32_t)-3545687);\n  libcrux_ml_dsa_simd_avx2_ntt_butterfly_2(re,\n    (size_t)30U,\n    (int32_t)-554416,\n    (int32_t)3919660,\n    (int32_t)-48306,\n    (int32_t)-1362209,\n    (int32_t)3937738,\n    (int32_t)1400424,\n    (int32_t)-846154,\n    (int32_t)1976782);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_avx2_ntt(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6(re);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3(re);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_2(re);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_1(re);\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_0(re);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_ntt_ntt(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_ntt_ntt_avx2_ntt(re);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_ntt_a2(Eurydice_arr_cd0 *simd_units)\n{\n  libcrux_ml_dsa_simd_avx2_ntt_ntt(simd_units);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE libcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2\nlibcrux_ml_dsa_simd_avx2_invntt_simd_unit_invert_ntt_at_layer_0(\n  __m256i simd_unit0,\n  __m256i simd_unit1,\n  int32_t zeta00,\n  int32_t zeta01,\n  int32_t zeta02,\n  int32_t zeta03,\n  int32_t zeta10,\n  int32_t zeta11,\n  int32_t zeta12,\n  int32_t zeta13\n)\n{\n  __m256i a_shuffled = mm256_shuffle_epi32((int32_t)216, simd_unit0, __m256i);\n  __m256i b_shuffled0 = mm256_shuffle_epi32((int32_t)216, simd_unit1, __m256i);\n  __m256i lo_values = mm256_unpacklo_epi64(a_shuffled, b_shuffled0);\n  __m256i hi_values = mm256_unpackhi_epi64(a_shuffled, b_shuffled0);\n  __m256i differences = hi_values;\n  libcrux_ml_dsa_simd_avx2_arithmetic_subtract(&differences, &lo_values);\n  libcrux_ml_dsa_simd_avx2_arithmetic_add(&lo_values, &hi_values);\n  __m256i sums = lo_values;\n  __m256i\n  zetas = mm256_set_epi32(zeta13, zeta12, zeta03, zeta02, zeta11, zeta10, zeta01, zeta00);\n  libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(&differences, &zetas);\n  __m256i a_shuffled0 = mm256_unpacklo_epi64(sums, differences);\n  __m256i b_shuffled = mm256_unpackhi_epi64(sums, differences);\n  __m256i a = mm256_shuffle_epi32((int32_t)216, a_shuffled0, __m256i);\n  __m256i b = mm256_shuffle_epi32((int32_t)216, b_shuffled, __m256i);\n  return (KRML_CLITERAL(libcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2){ .fst = a, .snd = b });\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta00,\n  int32_t zeta01,\n  int32_t zeta02,\n  int32_t zeta03,\n  int32_t zeta10,\n  int32_t zeta11,\n  int32_t zeta12,\n  int32_t zeta13\n)\n{\n  libcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2\n  uu____0 =\n    libcrux_ml_dsa_simd_avx2_invntt_simd_unit_invert_ntt_at_layer_0(re->data[index],\n      re->data[index + (size_t)1U],\n      zeta00,\n      zeta01,\n      zeta02,\n      zeta03,\n      zeta10,\n      zeta11,\n      zeta12,\n      zeta13);\n  __m256i uu____1 = uu____0.snd;\n  re->data[index] = uu____0.fst;\n  re->data[index + (size_t)1U] = uu____1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)0U,\n    (int32_t)1976782,\n    (int32_t)-846154,\n    (int32_t)1400424,\n    (int32_t)3937738,\n    (int32_t)-1362209,\n    (int32_t)-48306,\n    (int32_t)3919660,\n    (int32_t)-554416);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)2U,\n    (int32_t)-3545687,\n    (int32_t)1612842,\n    (int32_t)-976891,\n    (int32_t)183443,\n    (int32_t)-2286327,\n    (int32_t)-420899,\n    (int32_t)-2235985,\n    (int32_t)-2939036);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)4U,\n    (int32_t)-3833893,\n    (int32_t)-260646,\n    (int32_t)-1104333,\n    (int32_t)-1667432,\n    (int32_t)1910376,\n    (int32_t)-1803090,\n    (int32_t)1723600,\n    (int32_t)-426683);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)6U,\n    (int32_t)472078,\n    (int32_t)1717735,\n    (int32_t)-975884,\n    (int32_t)2213111,\n    (int32_t)269760,\n    (int32_t)3866901,\n    (int32_t)3523897,\n    (int32_t)-3038916);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)8U,\n    (int32_t)-1799107,\n    (int32_t)-3694233,\n    (int32_t)1652634,\n    (int32_t)810149,\n    (int32_t)3014001,\n    (int32_t)1616392,\n    (int32_t)162844,\n    (int32_t)-3183426);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)10U,\n    (int32_t)-1207385,\n    (int32_t)185531,\n    (int32_t)3369112,\n    (int32_t)1957272,\n    (int32_t)-164721,\n    (int32_t)2454455,\n    (int32_t)2432395,\n    (int32_t)-2013608);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)12U,\n    (int32_t)-3776993,\n    (int32_t)594136,\n    (int32_t)-3724270,\n    (int32_t)-2584293,\n    (int32_t)-1846953,\n    (int32_t)-1671176,\n    (int32_t)-2831860,\n    (int32_t)-542412);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)14U,\n    (int32_t)3406031,\n    (int32_t)2235880,\n    (int32_t)777191,\n    (int32_t)1500165,\n    (int32_t)-1374803,\n    (int32_t)-2546312,\n    (int32_t)1917081,\n    (int32_t)-1279661);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)16U,\n    (int32_t)-1962642,\n    (int32_t)3306115,\n    (int32_t)1312455,\n    (int32_t)-451100,\n    (int32_t)-1430225,\n    (int32_t)-3318210,\n    (int32_t)1237275,\n    (int32_t)-1333058);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)18U,\n    (int32_t)-1050970,\n    (int32_t)1903435,\n    (int32_t)1869119,\n    (int32_t)-2994039,\n    (int32_t)-3548272,\n    (int32_t)2635921,\n    (int32_t)1250494,\n    (int32_t)-3767016);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)20U,\n    (int32_t)1595974,\n    (int32_t)2486353,\n    (int32_t)1247620,\n    (int32_t)4055324,\n    (int32_t)1265009,\n    (int32_t)-2590150,\n    (int32_t)2691481,\n    (int32_t)2842341);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)22U,\n    (int32_t)203044,\n    (int32_t)1735879,\n    (int32_t)-3342277,\n    (int32_t)3437287,\n    (int32_t)4108315,\n    (int32_t)-2437823,\n    (int32_t)286988,\n    (int32_t)342297);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)24U,\n    (int32_t)-3595838,\n    (int32_t)-768622,\n    (int32_t)-525098,\n    (int32_t)-3556995,\n    (int32_t)3207046,\n    (int32_t)2031748,\n    (int32_t)-3122442,\n    (int32_t)-655327);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)26U,\n    (int32_t)-522500,\n    (int32_t)-43260,\n    (int32_t)-1613174,\n    (int32_t)495491,\n    (int32_t)819034,\n    (int32_t)909542,\n    (int32_t)1859098,\n    (int32_t)900702);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)28U,\n    (int32_t)-3193378,\n    (int32_t)-1197226,\n    (int32_t)-3759364,\n    (int32_t)-3520352,\n    (int32_t)3513181,\n    (int32_t)-1235728,\n    (int32_t)2434439,\n    (int32_t)266997);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(re,\n    (size_t)30U,\n    (int32_t)-3562462,\n    (int32_t)-2446433,\n    (int32_t)2244091,\n    (int32_t)-3342478,\n    (int32_t)3817976,\n    (int32_t)2316500,\n    (int32_t)3407706,\n    (int32_t)2091667);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE libcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2\nlibcrux_ml_dsa_simd_avx2_invntt_simd_unit_invert_ntt_at_layer_1(\n  __m256i simd_unit0,\n  __m256i simd_unit1,\n  int32_t zeta00,\n  int32_t zeta01,\n  int32_t zeta10,\n  int32_t zeta11\n)\n{\n  __m256i lo_values = mm256_unpacklo_epi64(simd_unit0, simd_unit1);\n  __m256i hi_values = mm256_unpackhi_epi64(simd_unit0, simd_unit1);\n  __m256i differences = hi_values;\n  libcrux_ml_dsa_simd_avx2_arithmetic_subtract(&differences, &lo_values);\n  libcrux_ml_dsa_simd_avx2_arithmetic_add(&lo_values, &hi_values);\n  __m256i sums = lo_values;\n  __m256i\n  zetas = mm256_set_epi32(zeta11, zeta11, zeta01, zeta01, zeta10, zeta10, zeta00, zeta00);\n  libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(&differences, &zetas);\n  __m256i a = mm256_unpacklo_epi64(sums, differences);\n  __m256i b = mm256_unpackhi_epi64(sums, differences);\n  return (KRML_CLITERAL(libcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2){ .fst = a, .snd = b });\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta_00,\n  int32_t zeta_01,\n  int32_t zeta_10,\n  int32_t zeta_11\n)\n{\n  libcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2\n  uu____0 =\n    libcrux_ml_dsa_simd_avx2_invntt_simd_unit_invert_ntt_at_layer_1(re->data[index],\n      re->data[index + (size_t)1U],\n      zeta_00,\n      zeta_01,\n      zeta_10,\n      zeta_11);\n  __m256i uu____1 = uu____0.snd;\n  re->data[index] = uu____0.fst;\n  re->data[index + (size_t)1U] = uu____1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)0U,\n    (int32_t)3839961,\n    (int32_t)-3628969,\n    (int32_t)-3881060,\n    (int32_t)-3019102);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)2U,\n    (int32_t)-1439742,\n    (int32_t)-812732,\n    (int32_t)-1584928,\n    (int32_t)1285669);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)4U,\n    (int32_t)1341330,\n    (int32_t)1315589,\n    (int32_t)-177440,\n    (int32_t)-2409325);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)6U,\n    (int32_t)-1851402,\n    (int32_t)3159746,\n    (int32_t)-3553272,\n    (int32_t)189548);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)8U,\n    (int32_t)-1316856,\n    (int32_t)759969,\n    (int32_t)-210977,\n    (int32_t)2389356);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)10U,\n    (int32_t)-3249728,\n    (int32_t)1653064,\n    (int32_t)-8578,\n    (int32_t)-3724342);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)12U,\n    (int32_t)3958618,\n    (int32_t)904516,\n    (int32_t)-1100098,\n    (int32_t)44288);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)14U,\n    (int32_t)3097992,\n    (int32_t)508951,\n    (int32_t)264944,\n    (int32_t)-3343383);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)16U,\n    (int32_t)-1430430,\n    (int32_t)1852771,\n    (int32_t)1349076,\n    (int32_t)-381987);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)18U,\n    (int32_t)-1308169,\n    (int32_t)-22981,\n    (int32_t)-1228525,\n    (int32_t)-671102);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)20U,\n    (int32_t)-2477047,\n    (int32_t)-411027,\n    (int32_t)-3693493,\n    (int32_t)-2967645);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)22U,\n    (int32_t)2715295,\n    (int32_t)2147896,\n    (int32_t)-983419,\n    (int32_t)3412210);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)24U,\n    (int32_t)126922,\n    (int32_t)-3632928,\n    (int32_t)-3157330,\n    (int32_t)-3190144);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)26U,\n    (int32_t)-1000202,\n    (int32_t)-4083598,\n    (int32_t)1939314,\n    (int32_t)-1257611);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)28U,\n    (int32_t)-1585221,\n    (int32_t)2176455,\n    (int32_t)3475950,\n    (int32_t)-1452451);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(re,\n    (size_t)30U,\n    (int32_t)-3041255,\n    (int32_t)-3677745,\n    (int32_t)-1528703,\n    (int32_t)-3930395);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE libcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2\nlibcrux_ml_dsa_simd_avx2_invntt_simd_unit_invert_ntt_at_layer_2(\n  __m256i simd_unit0,\n  __m256i simd_unit1,\n  int32_t zeta0,\n  int32_t zeta1\n)\n{\n  __m256i lo_values = mm256_permute2x128_si256((int32_t)32, simd_unit0, simd_unit1, __m256i);\n  __m256i hi_values = mm256_permute2x128_si256((int32_t)49, simd_unit0, simd_unit1, __m256i);\n  __m256i differences = hi_values;\n  libcrux_ml_dsa_simd_avx2_arithmetic_subtract(&differences, &lo_values);\n  libcrux_ml_dsa_simd_avx2_arithmetic_add(&lo_values, &hi_values);\n  __m256i sums = lo_values;\n  __m256i zetas = mm256_set_epi32(zeta1, zeta1, zeta1, zeta1, zeta0, zeta0, zeta0, zeta0);\n  libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(&differences, &zetas);\n  __m256i a = mm256_permute2x128_si256((int32_t)32, sums, differences, __m256i);\n  __m256i b = mm256_permute2x128_si256((int32_t)49, sums, differences, __m256i);\n  return (KRML_CLITERAL(libcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2){ .fst = a, .snd = b });\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta1,\n  int32_t zeta2\n)\n{\n  libcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2\n  uu____0 =\n    libcrux_ml_dsa_simd_avx2_invntt_simd_unit_invert_ntt_at_layer_2(re->data[index],\n      re->data[index + (size_t)1U],\n      zeta1,\n      zeta2);\n  __m256i uu____1 = uu____0.snd;\n  re->data[index] = uu____0.fst;\n  re->data[index + (size_t)1U] = uu____1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)0U,\n    (int32_t)-2797779,\n    (int32_t)2071892);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)2U,\n    (int32_t)-2556880,\n    (int32_t)3900724);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)4U,\n    (int32_t)3881043,\n    (int32_t)954230);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)6U,\n    (int32_t)531354,\n    (int32_t)811944);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)8U,\n    (int32_t)3699596,\n    (int32_t)-1600420);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)10U,\n    (int32_t)-2140649,\n    (int32_t)3507263);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)12U,\n    (int32_t)-3821735,\n    (int32_t)3505694);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)14U,\n    (int32_t)-1643818,\n    (int32_t)-1699267);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)16U,\n    (int32_t)-539299,\n    (int32_t)2348700);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)18U,\n    (int32_t)-300467,\n    (int32_t)3539968);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)20U,\n    (int32_t)-2867647,\n    (int32_t)3574422);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)22U,\n    (int32_t)-3043716,\n    (int32_t)-3861115);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)24U,\n    (int32_t)3915439,\n    (int32_t)-2537516);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)26U,\n    (int32_t)-3592148,\n    (int32_t)-1661693);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)28U,\n    (int32_t)3530437,\n    (int32_t)3077325);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(re,\n    (size_t)30U,\n    (int32_t)95776,\n    (int32_t)2706023);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE __m256i\nlibcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(\n  __m256i lhs,\n  int32_t constant\n)\n{\n  __m256i rhs = mm256_set1_epi32(constant);\n  __m256i field_modulus = mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS);\n  __m256i\n  inverse_of_modulus_mod_montgomery_r =\n    mm256_set1_epi32((int32_t)LIBCRUX_ML_DSA_SIMD_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R);\n  __m256i prod02 = mm256_mul_epi32(lhs, rhs);\n  __m256i\n  prod13 =\n    mm256_mul_epi32(mm256_shuffle_epi32((int32_t)245, lhs, __m256i),\n      mm256_shuffle_epi32((int32_t)245, rhs, __m256i));\n  __m256i k02 = mm256_mul_epi32(prod02, inverse_of_modulus_mod_montgomery_r);\n  __m256i k13 = mm256_mul_epi32(prod13, inverse_of_modulus_mod_montgomery_r);\n  __m256i c02 = mm256_mul_epi32(k02, field_modulus);\n  __m256i c13 = mm256_mul_epi32(k13, field_modulus);\n  __m256i res02 = mm256_sub_epi32(prod02, c02);\n  __m256i res13 = mm256_sub_epi32(prod13, c13);\n  __m256i res02_shifted = mm256_shuffle_epi32((int32_t)245, res02, __m256i);\n  return mm256_blend_epi32((int32_t)170, res02_shifted, res13, __m256i);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 1\n- ZETA= 280005\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_99(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)280005);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 2\n- STEP_BY= 1\n- ZETA= 4010497\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_1c(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)2U; i < (size_t)2U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)4010497);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 4\n- STEP_BY= 1\n- ZETA= -19422\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_6b(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)4U; i < (size_t)4U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-19422);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 6\n- STEP_BY= 1\n- ZETA= 1757237\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_44(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)6U; i < (size_t)6U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)1757237);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 1\n- ZETA= -3277672\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a8(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-3277672);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 10\n- STEP_BY= 1\n- ZETA= -1399561\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_1f(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)10U; i < (size_t)10U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-1399561);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 12\n- STEP_BY= 1\n- ZETA= -3859737\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_95(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)12U; i < (size_t)12U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-3859737);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 14\n- STEP_BY= 1\n- ZETA= -2118186\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3b(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)14U; i < (size_t)14U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-2118186);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 1\n- ZETA= -2108549\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-2108549);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 18\n- STEP_BY= 1\n- ZETA= 2619752\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_e4(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)18U; i < (size_t)18U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)2619752);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 20\n- STEP_BY= 1\n- ZETA= -1119584\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_de(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)20U; i < (size_t)20U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-1119584);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 22\n- STEP_BY= 1\n- ZETA= -549488\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_05(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)22U; i < (size_t)22U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-549488);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 1\n- ZETA= 3585928\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_d9(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)3585928);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 26\n- STEP_BY= 1\n- ZETA= -1079900\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3a(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)26U; i < (size_t)26U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-1079900);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 28\n- STEP_BY= 1\n- ZETA= 1024112\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3b0(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)28U; i < (size_t)28U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)1024112);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 30\n- STEP_BY= 1\n- ZETA= 2725464\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a0(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)30U; i < (size_t)30U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)1U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)1U]);\n    re->data[j + (size_t)1U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)2725464);\n  }\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_3(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_99(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_1c(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_6b(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_44(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a8(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_1f(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_95(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3b(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_e4(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_de(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_05(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_d9(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3a(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3b0(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a0(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 2\n- ZETA= 2680103\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_990(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)2U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)2U]);\n    re->data[j + (size_t)2U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)2680103);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 4\n- STEP_BY= 2\n- ZETA= 3111497\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_6b0(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)4U; i < (size_t)4U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)2U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)2U]);\n    re->data[j + (size_t)2U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)3111497);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 2\n- ZETA= -2884855\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a80(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)2U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)2U]);\n    re->data[j + (size_t)2U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-2884855);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 12\n- STEP_BY= 2\n- ZETA= 3119733\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_950(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)12U; i < (size_t)12U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)2U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)2U]);\n    re->data[j + (size_t)2U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)3119733);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 2\n- ZETA= -2091905\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a0(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)2U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)2U]);\n    re->data[j + (size_t)2U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-2091905);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 20\n- STEP_BY= 2\n- ZETA= -359251\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_de0(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)20U; i < (size_t)20U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)2U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)2U]);\n    re->data[j + (size_t)2U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-359251);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 2\n- ZETA= 2353451\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_d90(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)2U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)2U]);\n    re->data[j + (size_t)2U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)2353451);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 28\n- STEP_BY= 2\n- ZETA= 1826347\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3b1(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)28U; i < (size_t)28U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)2U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)2U]);\n    re->data[j + (size_t)2U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)1826347);\n  }\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_4(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_990(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_6b0(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a80(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_950(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a0(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_de0(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_d90(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3b1(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 4\n- ZETA= 466468\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_991(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)4U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)4U]);\n    re->data[j + (size_t)4U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)466468);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 4\n- ZETA= -876248\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a81(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)4U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)4U]);\n    re->data[j + (size_t)4U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-876248);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 4\n- ZETA= -777960\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a1(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)4U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)4U]);\n    re->data[j + (size_t)4U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-777960);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 4\n- ZETA= 237124\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_d91(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)4U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)4U]);\n    re->data[j + (size_t)4U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)237124);\n  }\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_5(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_991(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a81(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a1(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_d91(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 8\n- ZETA= -518909\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_992(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)8U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)8U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)8U]);\n    re->data[j + (size_t)8U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-518909);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 8\n- ZETA= -2608894\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a2(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)8U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)8U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)8U]);\n    re->data[j + (size_t)8U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)-2608894);\n  }\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_6(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_992(re);\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a2(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 16\n- ZETA= 25847\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_993(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)16U; i++)\n  {\n    size_t j = i;\n    __m256i a_minus_b = mm256_sub_epi32(re->data[j + (size_t)16U], re->data[j]);\n    re->data[j] = mm256_add_epi32(re->data[j], re->data[j + (size_t)16U]);\n    re->data[j + (size_t)16U] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(a_minus_b,\n        (int32_t)25847);\n  }\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_7(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_993(re);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_montgomery_inv_inner(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0(re);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1(re);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2(re);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_3(re);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_4(re);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_5(re);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_6(re);\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_7(re);\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    re->data[i0] =\n      libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(re->data[i0],\n        LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_MONTGOMERY_INV_INNER_FACTOR);\n  }\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_montgomery(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_montgomery_inv_inner(re);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_invert_ntt_montgomery_a2(Eurydice_arr_cd0 *simd_units)\n{\n  libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_montgomery(simd_units);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.arithmetic.shift_left_then_reduce\nwith const generics\n- SHIFT_BY= 0\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ninline void\nlibcrux_ml_dsa_simd_avx2_arithmetic_shift_left_then_reduce_c3(__m256i *simd_unit)\n{\n  __m256i shifted = mm256_slli_epi32((int32_t)0, simd_unit[0U], __m256i);\n  __m256i quotient = mm256_add_epi32(shifted, mm256_set1_epi32((int32_t)1 << 22U));\n  __m256i quotient0 = mm256_srai_epi32((int32_t)23, quotient, __m256i);\n  __m256i\n  quotient_times_field_modulus =\n    mm256_mullo_epi32(quotient0,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS));\n  simd_unit[0U] = mm256_sub_epi32(shifted, quotient_times_field_modulus);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_reduce_a2(Eurydice_arr_cd0 *simd_units)\n{\n  libcrux_ml_dsa_simd_avx2_arithmetic_shift_left_then_reduce_c3(simd_units->data);\n  libcrux_ml_dsa_simd_avx2_arithmetic_shift_left_then_reduce_c3(&simd_units->data[8U]);\n  libcrux_ml_dsa_simd_avx2_arithmetic_shift_left_then_reduce_c3(&simd_units->data[16U]);\n  libcrux_ml_dsa_simd_avx2_arithmetic_shift_left_then_reduce_c3(&simd_units->data[24U]);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.zero_ff\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\") static Eurydice_arr_cd0 zero_ff_64(void)\n{\n  Eurydice_arr_cd0 lit;\n  __m256i repeat_expression[32U];\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    repeat_expression[i] = libcrux_ml_dsa_simd_avx2_zero_a2();\n  }\n  memcpy(lit.data, repeat_expression, (size_t)32U * sizeof (__m256i));\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_eta_equals_4\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE bool\nrejection_sample_less_than_eta_equals_4_64(\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *sampled_coefficients,\n  Eurydice_arr_13 *out\n)\n{\n  bool done = false;\n  for (size_t i = (size_t)0U; i < randomness.meta / (size_t)4U; i++)\n  {\n    size_t _cloop_i = i;\n    Eurydice_borrow_slice_u8\n    random_bytes =\n      Eurydice_slice_subslice_shared_7e(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = _cloop_i * (size_t)4U,\n            .end = _cloop_i * (size_t)4U + (size_t)4U\n          }\n        ));\n    if (!done)\n    {\n      size_t\n      sampled =\n        libcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_equals_4_a2(random_bytes,\n          Eurydice_array_to_subslice_from_mut_96(out, sampled_coefficients[0U]));\n      sampled_coefficients[0U] = sampled_coefficients[0U] + sampled;\n      if (sampled_coefficients[0U] >= LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        done = true;\n      }\n    }\n  }\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_eta_equals_2\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE bool\nrejection_sample_less_than_eta_equals_2_64(\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *sampled_coefficients,\n  Eurydice_arr_13 *out\n)\n{\n  bool done = false;\n  for (size_t i = (size_t)0U; i < randomness.meta / (size_t)4U; i++)\n  {\n    size_t _cloop_i = i;\n    Eurydice_borrow_slice_u8\n    random_bytes =\n      Eurydice_slice_subslice_shared_7e(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = _cloop_i * (size_t)4U,\n            .end = _cloop_i * (size_t)4U + (size_t)4U\n          }\n        ));\n    if (!done)\n    {\n      size_t\n      sampled =\n        libcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_equals_2_a2(random_bytes,\n          Eurydice_array_to_subslice_from_mut_96(out, sampled_coefficients[0U]));\n      sampled_coefficients[0U] = sampled_coefficients[0U] + sampled;\n      if (sampled_coefficients[0U] >= LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        done = true;\n      }\n    }\n  }\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_eta\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE bool\nrejection_sample_less_than_eta_64(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *sampled,\n  Eurydice_arr_13 *out\n)\n{\n  switch (eta)\n  {\n    case libcrux_ml_dsa_constants_Eta_Two:\n      {\n        break;\n      }\n    case libcrux_ml_dsa_constants_Eta_Four:\n      {\n        return rejection_sample_less_than_eta_equals_4_64(randomness, sampled, out);\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  return rejection_sample_less_than_eta_equals_2_64(randomness, sampled, out);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.from_i32_array_ff\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic void\nfrom_i32_array_ff_64(Eurydice_dst_ref_shared_fc array, Eurydice_arr_cd0 *result)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_DSA_SIMD_TRAITS_SIMD_UNITS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_simd_avx2_from_coefficient_array_a2(Eurydice_slice_subslice_shared_46(array,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT\n          }\n        )),\n      &result->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.sample_four_error_ring_elements\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nsample_four_error_ring_elements_fc(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 seed,\n  uint16_t start_index,\n  Eurydice_dst_ref_mut_2a re\n)\n{\n  Eurydice_arr_a2 seed0 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, start_index);\n  Eurydice_arr_a2\n  seed1 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, (uint32_t)start_index + 1U);\n  Eurydice_arr_a2\n  seed2 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, (uint32_t)start_index + 2U);\n  Eurydice_arr_a2\n  seed3 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, (uint32_t)start_index + 3U);\n  Eurydice_arr_05\n  state =\n    libcrux_ml_dsa_hash_functions_simd256_init_absorb_x4_ad(Eurydice_array_to_slice_shared_39(&seed0),\n      Eurydice_array_to_slice_shared_39(&seed1),\n      Eurydice_array_to_slice_shared_39(&seed2),\n      Eurydice_array_to_slice_shared_39(&seed3));\n  Eurydice_arr_3d_x4\n  randomnesses0 = libcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_x4_ad(&state);\n  Eurydice_arr_380\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  size_t sampled0 = (size_t)0U;\n  size_t sampled1 = (size_t)0U;\n  size_t sampled2 = (size_t)0U;\n  size_t sampled3 = (size_t)0U;\n  libcrux_ml_dsa_constants_Eta uu____0 = eta;\n  bool\n  done0 =\n    rejection_sample_less_than_eta_64(uu____0,\n      Eurydice_array_to_slice_shared_d4(&randomnesses0.fst),\n      &sampled0,\n      out.data);\n  libcrux_ml_dsa_constants_Eta uu____1 = eta;\n  bool\n  done1 =\n    rejection_sample_less_than_eta_64(uu____1,\n      Eurydice_array_to_slice_shared_d4(&randomnesses0.snd),\n      &sampled1,\n      &out.data[1U]);\n  libcrux_ml_dsa_constants_Eta uu____2 = eta;\n  bool\n  done2 =\n    rejection_sample_less_than_eta_64(uu____2,\n      Eurydice_array_to_slice_shared_d4(&randomnesses0.thd),\n      &sampled2,\n      &out.data[2U]);\n  libcrux_ml_dsa_constants_Eta uu____3 = eta;\n  bool\n  done3 =\n    rejection_sample_less_than_eta_64(uu____3,\n      Eurydice_array_to_slice_shared_d4(&randomnesses0.f3),\n      &sampled3,\n      &out.data[3U]);\n  while (true)\n  {\n    if (done0)\n    {\n      if (done1)\n      {\n        if (done2)\n        {\n          if (done3)\n          {\n            break;\n          }\n          else\n          {\n            Eurydice_arr_3d_x4\n            randomnesses = libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_x4_ad(&state);\n            if (!done0)\n            {\n              libcrux_ml_dsa_constants_Eta uu____4 = eta;\n              done0 =\n                rejection_sample_less_than_eta_64(uu____4,\n                  Eurydice_array_to_slice_shared_d4(&randomnesses.fst),\n                  &sampled0,\n                  out.data);\n            }\n            if (!done1)\n            {\n              libcrux_ml_dsa_constants_Eta uu____5 = eta;\n              done1 =\n                rejection_sample_less_than_eta_64(uu____5,\n                  Eurydice_array_to_slice_shared_d4(&randomnesses.snd),\n                  &sampled1,\n                  &out.data[1U]);\n            }\n            if (!done2)\n            {\n              libcrux_ml_dsa_constants_Eta uu____6 = eta;\n              done2 =\n                rejection_sample_less_than_eta_64(uu____6,\n                  Eurydice_array_to_slice_shared_d4(&randomnesses.thd),\n                  &sampled2,\n                  &out.data[2U]);\n            }\n            if (!done3)\n            {\n              libcrux_ml_dsa_constants_Eta uu____7 = eta;\n              done3 =\n                rejection_sample_less_than_eta_64(uu____7,\n                  Eurydice_array_to_slice_shared_d4(&randomnesses.f3),\n                  &sampled3,\n                  &out.data[3U]);\n            }\n          }\n        }\n        else\n        {\n          Eurydice_arr_3d_x4\n          randomnesses = libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_x4_ad(&state);\n          if (!done0)\n          {\n            libcrux_ml_dsa_constants_Eta uu____8 = eta;\n            done0 =\n              rejection_sample_less_than_eta_64(uu____8,\n                Eurydice_array_to_slice_shared_d4(&randomnesses.fst),\n                &sampled0,\n                out.data);\n          }\n          if (!done1)\n          {\n            libcrux_ml_dsa_constants_Eta uu____9 = eta;\n            done1 =\n              rejection_sample_less_than_eta_64(uu____9,\n                Eurydice_array_to_slice_shared_d4(&randomnesses.snd),\n                &sampled1,\n                &out.data[1U]);\n          }\n          if (!done2)\n          {\n            libcrux_ml_dsa_constants_Eta uu____10 = eta;\n            done2 =\n              rejection_sample_less_than_eta_64(uu____10,\n                Eurydice_array_to_slice_shared_d4(&randomnesses.thd),\n                &sampled2,\n                &out.data[2U]);\n          }\n          if (!done3)\n          {\n            libcrux_ml_dsa_constants_Eta uu____11 = eta;\n            done3 =\n              rejection_sample_less_than_eta_64(uu____11,\n                Eurydice_array_to_slice_shared_d4(&randomnesses.f3),\n                &sampled3,\n                &out.data[3U]);\n          }\n        }\n      }\n      else\n      {\n        Eurydice_arr_3d_x4\n        randomnesses = libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_x4_ad(&state);\n        if (!done0)\n        {\n          libcrux_ml_dsa_constants_Eta uu____12 = eta;\n          done0 =\n            rejection_sample_less_than_eta_64(uu____12,\n              Eurydice_array_to_slice_shared_d4(&randomnesses.fst),\n              &sampled0,\n              out.data);\n        }\n        if (!done1)\n        {\n          libcrux_ml_dsa_constants_Eta uu____13 = eta;\n          done1 =\n            rejection_sample_less_than_eta_64(uu____13,\n              Eurydice_array_to_slice_shared_d4(&randomnesses.snd),\n              &sampled1,\n              &out.data[1U]);\n        }\n        if (!done2)\n        {\n          libcrux_ml_dsa_constants_Eta uu____14 = eta;\n          done2 =\n            rejection_sample_less_than_eta_64(uu____14,\n              Eurydice_array_to_slice_shared_d4(&randomnesses.thd),\n              &sampled2,\n              &out.data[2U]);\n        }\n        if (!done3)\n        {\n          libcrux_ml_dsa_constants_Eta uu____15 = eta;\n          done3 =\n            rejection_sample_less_than_eta_64(uu____15,\n              Eurydice_array_to_slice_shared_d4(&randomnesses.f3),\n              &sampled3,\n              &out.data[3U]);\n        }\n      }\n    }\n    else\n    {\n      Eurydice_arr_3d_x4\n      randomnesses = libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_x4_ad(&state);\n      if (!done0)\n      {\n        libcrux_ml_dsa_constants_Eta uu____16 = eta;\n        done0 =\n          rejection_sample_less_than_eta_64(uu____16,\n            Eurydice_array_to_slice_shared_d4(&randomnesses.fst),\n            &sampled0,\n            out.data);\n      }\n      if (!done1)\n      {\n        libcrux_ml_dsa_constants_Eta uu____17 = eta;\n        done1 =\n          rejection_sample_less_than_eta_64(uu____17,\n            Eurydice_array_to_slice_shared_d4(&randomnesses.snd),\n            &sampled1,\n            &out.data[1U]);\n      }\n      if (!done2)\n      {\n        libcrux_ml_dsa_constants_Eta uu____18 = eta;\n        done2 =\n          rejection_sample_less_than_eta_64(uu____18,\n            Eurydice_array_to_slice_shared_d4(&randomnesses.thd),\n            &sampled2,\n            &out.data[2U]);\n      }\n      if (!done3)\n      {\n        libcrux_ml_dsa_constants_Eta uu____19 = eta;\n        done3 =\n          rejection_sample_less_than_eta_64(uu____19,\n            Eurydice_array_to_slice_shared_d4(&randomnesses.f3),\n            &sampled3,\n            &out.data[3U]);\n      }\n    }\n  }\n  size_t max0 = (size_t)start_index + (size_t)4U;\n  size_t max;\n  if (re.meta < max0)\n  {\n    max = re.meta;\n  }\n  else\n  {\n    max = max0;\n  }\n  for (size_t i = (size_t)start_index; i < max; i++)\n  {\n    size_t i0 = i;\n    from_i32_array_ff_64(Eurydice_array_to_slice_shared_20(&out.data[i0 % (size_t)4U]),\n      &re.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.samplex4.sample_s1_and_s2\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nsample_s1_and_s2_fc(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_mut_2a s1_s2\n)\n{\n  size_t len = s1_s2.meta;\n  for (size_t i = (size_t)0U; i < len / (size_t)4U; i++)\n  {\n    size_t i0 = i;\n    sample_four_error_ring_elements_fc(eta, seed, 4U * (uint32_t)(uint16_t)i0, s1_s2);\n  }\n  size_t remainder = len % (size_t)4U;\n  if (remainder != (size_t)0U)\n  {\n    sample_four_error_ring_elements_fc(eta, seed, (uint16_t)(len - remainder), s1_s2);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 8\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_mut_2a\narray_to_slice_mut_719(Eurydice_arr_53 *a)\n{\n  Eurydice_dst_ref_mut_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b\nwith const generics\n- $16size_t\n*/\ntypedef struct arr_30_s { Eurydice_arr_cd0 data[16U]; } arr_30;\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_field_modulus\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE bool\nrejection_sample_less_than_field_modulus_64(\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *sampled_coefficients,\n  Eurydice_arr_13 *out\n)\n{\n  bool done = false;\n  for (size_t i = (size_t)0U; i < randomness.meta / (size_t)24U; i++)\n  {\n    size_t _cloop_i = i;\n    Eurydice_borrow_slice_u8\n    random_bytes =\n      Eurydice_slice_subslice_shared_7e(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = _cloop_i * (size_t)24U,\n            .end = _cloop_i * (size_t)24U + (size_t)24U\n          }\n        ));\n    if (!done)\n    {\n      size_t\n      sampled =\n        libcrux_ml_dsa_simd_avx2_rejection_sample_less_than_field_modulus_a2(random_bytes,\n          Eurydice_array_to_subslice_from_mut_96(out, sampled_coefficients[0U]));\n      sampled_coefficients[0U] = sampled_coefficients[0U] + sampled;\n      if (sampled_coefficients[0U] >= LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        done = true;\n      }\n    }\n  }\n  return done;\n}\n\n/**\n Sample and write out up to four ring elements.\n\n If i <= `elements_requested`, a field element with domain separated\n seed according to the provided index is generated in\n `tmp_stack[i]`. After successful rejection sampling in\n `tmp_stack[i]`, the ring element is written to `matrix` at the\n provided index in `indices[i]`.\n `rand_stack` is a working buffer that holds initial Shake output.\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.sample_up_to_four_ring_elements_flat\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_hash_functions_simd256_Shake128x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nsample_up_to_four_ring_elements_flat_0a(\n  size_t columns,\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_mut_2a matrix,\n  Eurydice_arr_12 *rand_stack0,\n  Eurydice_arr_12 *rand_stack1,\n  Eurydice_arr_12 *rand_stack2,\n  Eurydice_arr_12 *rand_stack3,\n  Eurydice_dst_ref_mut_4c tmp_stack,\n  size_t start_index,\n  size_t elements_requested\n)\n{\n  Eurydice_arr_48\n  seed0 =\n    libcrux_ml_dsa_sample_add_domain_separator(seed,\n      libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index, columns));\n  Eurydice_arr_48\n  seed1 =\n    libcrux_ml_dsa_sample_add_domain_separator(seed,\n      libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index + (size_t)1U,\n        columns));\n  Eurydice_arr_48\n  seed2 =\n    libcrux_ml_dsa_sample_add_domain_separator(seed,\n      libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index + (size_t)2U,\n        columns));\n  Eurydice_arr_48\n  seed3 =\n    libcrux_ml_dsa_sample_add_domain_separator(seed,\n      libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index + (size_t)3U,\n        columns));\n  Eurydice_arr_05\n  state =\n    libcrux_ml_dsa_hash_functions_simd256_init_absorb_3b(Eurydice_array_to_slice_shared_8d(&seed0),\n      Eurydice_array_to_slice_shared_8d(&seed1),\n      Eurydice_array_to_slice_shared_8d(&seed2),\n      Eurydice_array_to_slice_shared_8d(&seed3));\n  libcrux_ml_dsa_hash_functions_simd256_squeeze_first_five_blocks_3b(&state,\n    rand_stack0,\n    rand_stack1,\n    rand_stack2,\n    rand_stack3);\n  size_t sampled0 = (size_t)0U;\n  size_t sampled1 = (size_t)0U;\n  size_t sampled2 = (size_t)0U;\n  size_t sampled3 = (size_t)0U;\n  bool\n  done0 =\n    rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_a8(rand_stack0),\n      &sampled0,\n      tmp_stack.ptr);\n  bool\n  done1 =\n    rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_a8(rand_stack1),\n      &sampled1,\n      &tmp_stack.ptr[1U]);\n  bool\n  done2 =\n    rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_a8(rand_stack2),\n      &sampled2,\n      &tmp_stack.ptr[2U]);\n  bool\n  done3 =\n    rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_a8(rand_stack3),\n      &sampled3,\n      &tmp_stack.ptr[3U]);\n  while (true)\n  {\n    if (done0)\n    {\n      if (done1)\n      {\n        if (done2)\n        {\n          if (done3)\n          {\n            break;\n          }\n          else\n          {\n            Eurydice_arr_27_x4\n            randomnesses = libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_3b(&state);\n            if (!done0)\n            {\n              done0 =\n                rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.fst),\n                  &sampled0,\n                  tmp_stack.ptr);\n            }\n            if (!done1)\n            {\n              done1 =\n                rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.snd),\n                  &sampled1,\n                  &tmp_stack.ptr[1U]);\n            }\n            if (!done2)\n            {\n              done2 =\n                rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.thd),\n                  &sampled2,\n                  &tmp_stack.ptr[2U]);\n            }\n            if (!done3)\n            {\n              done3 =\n                rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.f3),\n                  &sampled3,\n                  &tmp_stack.ptr[3U]);\n            }\n          }\n        }\n        else\n        {\n          Eurydice_arr_27_x4\n          randomnesses = libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_3b(&state);\n          if (!done0)\n          {\n            done0 =\n              rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.fst),\n                &sampled0,\n                tmp_stack.ptr);\n          }\n          if (!done1)\n          {\n            done1 =\n              rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.snd),\n                &sampled1,\n                &tmp_stack.ptr[1U]);\n          }\n          if (!done2)\n          {\n            done2 =\n              rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.thd),\n                &sampled2,\n                &tmp_stack.ptr[2U]);\n          }\n          if (!done3)\n          {\n            done3 =\n              rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.f3),\n                &sampled3,\n                &tmp_stack.ptr[3U]);\n          }\n        }\n      }\n      else\n      {\n        Eurydice_arr_27_x4\n        randomnesses = libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_3b(&state);\n        if (!done0)\n        {\n          done0 =\n            rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.fst),\n              &sampled0,\n              tmp_stack.ptr);\n        }\n        if (!done1)\n        {\n          done1 =\n            rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.snd),\n              &sampled1,\n              &tmp_stack.ptr[1U]);\n        }\n        if (!done2)\n        {\n          done2 =\n            rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.thd),\n              &sampled2,\n              &tmp_stack.ptr[2U]);\n        }\n        if (!done3)\n        {\n          done3 =\n            rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.f3),\n              &sampled3,\n              &tmp_stack.ptr[3U]);\n        }\n      }\n    }\n    else\n    {\n      Eurydice_arr_27_x4\n      randomnesses = libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_3b(&state);\n      if (!done0)\n      {\n        done0 =\n          rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.fst),\n            &sampled0,\n            tmp_stack.ptr);\n      }\n      if (!done1)\n      {\n        done1 =\n          rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.snd),\n            &sampled1,\n            &tmp_stack.ptr[1U]);\n      }\n      if (!done2)\n      {\n        done2 =\n          rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.thd),\n            &sampled2,\n            &tmp_stack.ptr[2U]);\n      }\n      if (!done3)\n      {\n        done3 =\n          rejection_sample_less_than_field_modulus_64(Eurydice_array_to_slice_shared_7b(&randomnesses.f3),\n            &sampled3,\n            &tmp_stack.ptr[3U]);\n      }\n    }\n  }\n  for (size_t i = (size_t)0U; i < elements_requested; i++)\n  {\n    size_t k = i;\n    from_i32_array_ff_64(Eurydice_array_to_slice_shared_20(&tmp_stack.ptr[k]),\n      &matrix.ptr[start_index + k]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.samplex4.matrix_flat\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_hash_functions_simd256_Shake128x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nmatrix_flat_0a(size_t columns, Eurydice_borrow_slice_u8 seed, Eurydice_dst_ref_mut_2a matrix)\n{\n  Eurydice_arr_12 rand_stack0 = { .data = { 0U } };\n  Eurydice_arr_12 rand_stack1 = { .data = { 0U } };\n  Eurydice_arr_12 rand_stack2 = { .data = { 0U } };\n  Eurydice_arr_12 rand_stack3 = { .data = { 0U } };\n  Eurydice_arr_380\n  tmp_stack =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  for (size_t i = (size_t)0U; i < matrix.meta / (size_t)4U + (size_t)1U; i++)\n  {\n    size_t start_index = i;\n    size_t start_index0 = start_index * (size_t)4U;\n    if (start_index0 >= matrix.meta)\n    {\n      break;\n    }\n    size_t elements_requested;\n    if (start_index0 + (size_t)4U <= matrix.meta)\n    {\n      elements_requested = (size_t)4U;\n    }\n    else\n    {\n      elements_requested = matrix.meta - start_index0;\n    }\n    sample_up_to_four_ring_elements_flat_0a(columns,\n      seed,\n      matrix,\n      &rand_stack0,\n      &rand_stack1,\n      &rand_stack2,\n      &rand_stack3,\n      Eurydice_array_to_slice_mut_f6(&tmp_stack),\n      start_index0,\n      elements_requested);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::samplex4::X4Sampler for libcrux_ml_dsa::samplex4::avx2::AVX2Sampler}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.samplex4.avx2.matrix_flat.inner_e8\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_samplex4_avx2_matrix_flat_inner_e8_64(\n  size_t columns,\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_mut_2a matrix\n)\n{\n  matrix_flat_0a(columns, seed, matrix);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::samplex4::X4Sampler for libcrux_ml_dsa::samplex4::avx2::AVX2Sampler}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.samplex4.avx2.matrix_flat_e8\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(\n  size_t columns,\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_mut_2a matrix\n)\n{\n  libcrux_ml_dsa_samplex4_avx2_matrix_flat_inner_e8_64(columns, seed, matrix);\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 16\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\") static Eurydice_dst_ref_mut_2a array_to_slice_mut_7110(arr_30 *a)\n{\n  Eurydice_dst_ref_mut_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 4\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_mut_2a\narray_to_slice_mut_7111(Eurydice_arr_15 *a)\n{\n  Eurydice_dst_ref_mut_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 8\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_subslice_shared_c32(const Eurydice_arr_53 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_shared_2a){ .ptr = a->data + r.start, .meta = r.end - r.start }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ntt.ntt\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\") static KRML_MUSTINLINE void ntt_64(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_ntt_a2(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ntt.ntt_multiply_montgomery\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nntt_multiply_montgomery_64(Eurydice_arr_cd0 *lhs, const Eurydice_arr_cd0 *rhs)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_simd_avx2_montgomery_multiply_a2(&lhs->data[i0], &rhs->data[i0]);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.add_ff\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nadd_ff_64(Eurydice_arr_cd0 *self, const Eurydice_arr_cd0 *rhs)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_simd_avx2_add_a2(&self->data[i0], &rhs->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ntt.reduce\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\") static KRML_MUSTINLINE void reduce_64(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_reduce_a2(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ntt.invert_ntt_montgomery\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ninvert_ntt_montgomery_64(Eurydice_arr_cd0 *re)\n{\n  libcrux_ml_dsa_simd_avx2_invert_ntt_montgomery_a2(re);\n}\n\n/**\n Compute InvertNTT(Â ◦ ŝ₁) + s₂\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.compute_as1_plus_s2\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ncompute_as1_plus_s2_64(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  Eurydice_dst_ref_mut_2a a_as_ntt,\n  Eurydice_dst_ref_shared_2a s1_ntt,\n  Eurydice_dst_ref_shared_2a s1_s2,\n  Eurydice_dst_ref_mut_2a result\n)\n{\n  for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < columns_in_a; i++)\n    {\n      size_t j = i;\n      ntt_multiply_montgomery_64(&a_as_ntt.ptr[i1 * columns_in_a + j], &s1_ntt.ptr[j]);\n      add_ff_64(&result.ptr[i1], &a_as_ntt.ptr[i1 * columns_in_a + j]);\n    }\n  }\n  for (size_t i = (size_t)0U; i < result.meta; i++)\n  {\n    size_t i0 = i;\n    reduce_64(&result.ptr[i0]);\n    invert_ntt_montgomery_64(&result.ptr[i0]);\n    add_ff_64(&result.ptr[i0], &s1_s2.ptr[columns_in_a + i0]);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 4\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_slice_shared_719(const Eurydice_arr_15 *a)\n{\n  Eurydice_dst_ref_shared_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 8\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_slice_shared_7110(const Eurydice_arr_53 *a)\n{\n  Eurydice_dst_ref_shared_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.power2round_vector\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\npower2round_vector_64(Eurydice_dst_ref_mut_2a t, Eurydice_dst_ref_mut_2a t1)\n{\n  for (size_t i0 = (size_t)0U; i0 < t.meta; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n    {\n      size_t j = i;\n      libcrux_ml_dsa_simd_avx2_power2round_a2(&t.ptr[i1].data[j], &t1.ptr[i1].data[j]);\n    }\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t1.serialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nserialize_64(const Eurydice_arr_cd0 *re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    const __m256i *simd_unit = &re->data[i0];\n    libcrux_ml_dsa_simd_avx2_t1_serialize_a2(simd_unit,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_ENCODING_T1_SERIALIZE_OUTPUT_BYTES_PER_SIMD_UNIT,\n            .end = (i0 + (size_t)1U) *\n              LIBCRUX_ML_DSA_ENCODING_T1_SERIALIZE_OUTPUT_BYTES_PER_SIMD_UNIT\n          }\n        )));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.verification_key.generate_serialized\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ngenerate_serialized_64(\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_shared_2a t1,\n  Eurydice_mut_borrow_slice_u8 verification_key_serialized\n)\n{\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(verification_key_serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE\n        }\n      )),\n    seed,\n    uint8_t);\n  for (size_t i = (size_t)0U; i < t1.meta; i++)\n  {\n    size_t i0 = i;\n    const Eurydice_arr_cd0 *ring_element = &t1.ptr[i0];\n    size_t\n    offset =\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE +\n        i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE;\n    serialize_64(ring_element,\n      Eurydice_slice_subslice_mut_7e(verification_key_serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = offset,\n            .end = offset + LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE\n          }\n        )));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256\nwith const generics\n- OUTPUT_LENGTH= 64\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_shake256_24(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_060 *out\n)\n{\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_d8(out), input);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_8c\nwith const generics\n- OUTPUT_LENGTH= 64\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_shake256_8c_24(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_060 *out\n)\n{\n  libcrux_ml_dsa_hash_functions_simd256_shake256_24(input, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.error.serialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nserialize_640(\n  libcrux_ml_dsa_constants_Eta eta,\n  const Eurydice_arr_cd0 *re,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  size_t output_bytes_per_simd_unit = libcrux_ml_dsa_encoding_error_chunk_size(eta);\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    const __m256i *simd_unit = &re->data[i0];\n    libcrux_ml_dsa_simd_avx2_error_serialize_a2(eta,\n      simd_unit,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * output_bytes_per_simd_unit,\n            .end = (i0 + (size_t)1U) * output_bytes_per_simd_unit\n          }\n        )));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t0.serialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nserialize_641(const Eurydice_arr_cd0 *re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    const __m256i *simd_unit = &re->data[i0];\n    libcrux_ml_dsa_simd_avx2_t0_serialize_a2(simd_unit,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT\n          }\n        )));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.signing_key.generate_serialized\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_hash_functions_simd256_Shake256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ngenerate_serialized_18(\n  libcrux_ml_dsa_constants_Eta eta,\n  size_t error_ring_element_size,\n  Eurydice_borrow_slice_u8 seed_matrix,\n  Eurydice_borrow_slice_u8 seed_signing,\n  Eurydice_borrow_slice_u8 verification_key,\n  Eurydice_dst_ref_shared_2a s1_2,\n  Eurydice_dst_ref_shared_2a t0,\n  Eurydice_mut_borrow_slice_u8 signing_key_serialized\n)\n{\n  size_t offset = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(signing_key_serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = offset,\n          .end = offset + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE\n        }\n      )),\n    seed_matrix,\n    uint8_t);\n  offset = offset + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE;\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(signing_key_serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = offset,\n          .end = offset + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE\n        }\n      )),\n    seed_signing,\n    uint8_t);\n  offset = offset + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE;\n  Eurydice_arr_060 verification_key_hash = { .data = { 0U } };\n  libcrux_ml_dsa_hash_functions_simd256_shake256_8c_24(verification_key, &verification_key_hash);\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(signing_key_serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = offset,\n          .end = offset + LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH\n        }\n      )),\n    Eurydice_array_to_slice_shared_d8(&verification_key_hash),\n    uint8_t);\n  offset = offset + LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH;\n  for (size_t i = (size_t)0U; i < s1_2.meta; i++)\n  {\n    size_t i0 = i;\n    serialize_640(eta,\n      &s1_2.ptr[i0],\n      Eurydice_slice_subslice_mut_7e(signing_key_serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = offset,\n            .end = offset + error_ring_element_size\n          }\n        )));\n    offset = offset + error_ring_element_size;\n  }\n  for (size_t i = (size_t)0U; i < t0.meta; i++)\n  {\n    size_t _cloop_j = i;\n    const Eurydice_arr_cd0 *ring_element = &t0.ptr[_cloop_j];\n    serialize_641(ring_element,\n      Eurydice_slice_subslice_mut_7e(signing_key_serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = offset,\n            .end = offset + LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE\n          }\n        )));\n    offset = offset + LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.generate_key_pair\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ngenerate_key_pair_07(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  Eurydice_arr_d10 seed_expanded0 = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x2\n  lvalue =\n    {\n      .data = {\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A\n      }\n    };\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n    Eurydice_array_to_slice_shared_26(&lvalue));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n    Eurydice_array_to_slice_mut_18(&seed_expanded0));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_18(&seed_expanded0),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_expanded = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(seed_expanded,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_error_vectors = uu____1.fst;\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.snd;\n  Eurydice_arr_53 s1_s2;\n  Eurydice_arr_cd0 repeat_expression0[8U];\n  KRML_MAYBE_FOR8(i, (size_t)0U, (size_t)8U, (size_t)1U, repeat_expression0[i] = zero_ff_64(););\n  memcpy(s1_s2.data, repeat_expression0, (size_t)8U * sizeof (Eurydice_arr_cd0));\n  sample_s1_and_s2_fc(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,\n    seed_for_error_vectors,\n    array_to_slice_mut_719(&s1_s2));\n  Eurydice_arr_15 t0;\n  Eurydice_arr_cd0 repeat_expression1[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression1[i] = zero_ff_64(););\n  memcpy(t0.data, repeat_expression1, (size_t)4U * sizeof (Eurydice_arr_cd0));\n  arr_30 a_as_ntt;\n  Eurydice_arr_cd0 repeat_expression2[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression2[i] = zero_ff_64(););\n  memcpy(a_as_ntt.data, repeat_expression2, (size_t)16U * sizeof (Eurydice_arr_cd0));\n  libcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n    seed_for_a,\n    array_to_slice_mut_7110(&a_as_ntt));\n  Eurydice_arr_15 s1_ntt;\n  Eurydice_arr_cd0 repeat_expression3[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression3[i] = zero_ff_64(););\n  memcpy(s1_ntt.data, repeat_expression3, (size_t)4U * sizeof (Eurydice_arr_cd0));\n  Eurydice_slice_copy(array_to_slice_mut_7111(&s1_ntt),\n    array_to_subslice_shared_c32(&s1_s2,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A\n        }\n      )),\n    Eurydice_arr_cd0);\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    ntt_64(&s1_ntt.data[i0]););\n  compute_as1_plus_s2_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n    LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n    array_to_slice_mut_7110(&a_as_ntt),\n    array_to_slice_shared_719(&s1_ntt),\n    array_to_slice_shared_7110(&s1_s2),\n    array_to_slice_mut_7111(&t0));\n  Eurydice_arr_15 t1;\n  Eurydice_arr_cd0 repeat_expression[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = zero_ff_64(););\n  memcpy(t1.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_cd0));\n  power2round_vector_64(array_to_slice_mut_7111(&t0), array_to_slice_mut_7111(&t1));\n  generate_serialized_64(seed_for_a, array_to_slice_shared_719(&t1), verification_key);\n  generate_serialized_18(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE,\n    seed_for_a,\n    seed_for_signing,\n    (\n      KRML_CLITERAL(Eurydice_borrow_slice_u8){\n        .ptr = verification_key.ptr,\n        .meta = verification_key.meta\n      }\n    ),\n    array_to_slice_shared_7110(&s1_s2),\n    array_to_slice_shared_719(&t0),\n    signing_key);\n}\n\n/**\n Key Generation.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_generate_key_pair__inner(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  generate_key_pair_07(randomness, signing_key, verification_key);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_generate_key_pair__inner(randomness,\n    signing_key,\n    verification_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.error.deserialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ndeserialize_64(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_arr_cd0 *result\n)\n{\n  size_t chunk_size = libcrux_ml_dsa_encoding_error_chunk_size(eta);\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_simd_avx2_error_deserialize_a2(eta,\n      Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * chunk_size,\n            .end = (i0 + (size_t)1U) * chunk_size\n          }\n        )),\n      &result->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.error.deserialize_to_vector_then_ntt\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ndeserialize_to_vector_then_ntt_64(\n  libcrux_ml_dsa_constants_Eta eta,\n  size_t ring_element_size,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_dst_ref_mut_2a ring_elements\n)\n{\n  for (size_t i = (size_t)0U; i < serialized.meta / ring_element_size; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * ring_element_size,\n            .end = i0 * ring_element_size + ring_element_size\n          }\n        ));\n    deserialize_64(eta, bytes, &ring_elements.ptr[i0]);\n    ntt_64(&ring_elements.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t0.deserialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ndeserialize_640(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_cd0 *result)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_simd_avx2_t0_deserialize_a2(Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT\n          }\n        )),\n      &result->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t0.deserialize_to_vector_then_ntt\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ndeserialize_to_vector_then_ntt_640(\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_dst_ref_mut_2a ring_elements\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < serialized.meta / LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE,\n            .end = i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE +\n              LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE\n          }\n        ));\n    deserialize_640(bytes, &ring_elements.ptr[i0]);\n    ntt_64(&ring_elements.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_15\n\n*/\ntypedef struct Option_9d_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_15 f0;\n}\nOption_9d;\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_x4\nwith const generics\n- OUT_LEN= 576\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_shake256_x4_1b(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_5f0 *out0,\n  Eurydice_arr_5f0 *out1,\n  Eurydice_arr_5f0 *out2,\n  Eurydice_arr_5f0 *out3\n)\n{\n  libcrux_sha3_avx2_x4_shake256(input0,\n    input1,\n    input2,\n    input3,\n    Eurydice_array_to_slice_mut_fa(out0),\n    Eurydice_array_to_slice_mut_fa(out1),\n    Eurydice_array_to_slice_mut_fa(out2),\n    Eurydice_array_to_slice_mut_fa(out3));\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake256x4}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_x4_ad\nwith const generics\n- OUT_LEN= 576\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_shake256_x4_ad_1b(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_5f0 *out0,\n  Eurydice_arr_5f0 *out1,\n  Eurydice_arr_5f0 *out2,\n  Eurydice_arr_5f0 *out3\n)\n{\n  libcrux_ml_dsa_hash_functions_simd256_shake256_x4_1b(input0,\n    input1,\n    input2,\n    input3,\n    out0,\n    out1,\n    out2,\n    out3);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.gamma1.deserialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ndeserialize_641(\n  size_t gamma1_exponent,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_arr_cd0 *result\n)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_simd_avx2_gamma1_deserialize_a2(Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (gamma1_exponent + (size_t)1U),\n            .end = (i0 + (size_t)1U) * (gamma1_exponent + (size_t)1U)\n          }\n        )),\n      &result->data[i0],\n      gamma1_exponent);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_x4\nwith const generics\n- OUT_LEN= 640\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_shake256_x4_c8(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_c30 *out0,\n  Eurydice_arr_c30 *out1,\n  Eurydice_arr_c30 *out2,\n  Eurydice_arr_c30 *out3\n)\n{\n  libcrux_sha3_avx2_x4_shake256(input0,\n    input1,\n    input2,\n    input3,\n    Eurydice_array_to_slice_mut_7d(out0),\n    Eurydice_array_to_slice_mut_7d(out1),\n    Eurydice_array_to_slice_mut_7d(out2),\n    Eurydice_array_to_slice_mut_7d(out3));\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake256x4}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_x4_ad\nwith const generics\n- OUT_LEN= 640\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_shake256_x4_ad_c8(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_c30 *out0,\n  Eurydice_arr_c30 *out1,\n  Eurydice_arr_c30 *out2,\n  Eurydice_arr_c30 *out3\n)\n{\n  libcrux_ml_dsa_hash_functions_simd256_shake256_x4_c8(input0,\n    input1,\n    input2,\n    input3,\n    out0,\n    out1,\n    out2,\n    out3);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256\nwith const generics\n- OUTPUT_LENGTH= 640\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_shake256_c8(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_c30 *out\n)\n{\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_7d(out), input);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_8c\nwith const generics\n- OUTPUT_LENGTH= 640\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_shake256_8c_c8(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_c30 *out\n)\n{\n  libcrux_ml_dsa_hash_functions_simd256_shake256_c8(input, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256\nwith const generics\n- OUTPUT_LENGTH= 576\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_shake256_1b(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_5f0 *out\n)\n{\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_fa(out), input);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_8c\nwith const generics\n- OUTPUT_LENGTH= 576\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_simd256_shake256_8c_1b(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_5f0 *out\n)\n{\n  libcrux_ml_dsa_hash_functions_simd256_shake256_1b(input, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.sample_mask_ring_element\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_hash_functions_simd256_Shake256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nsample_mask_ring_element_18(\n  const Eurydice_arr_a2 *seed,\n  Eurydice_arr_cd0 *result,\n  size_t gamma1_exponent\n)\n{\n  switch (gamma1_exponent)\n  {\n    case 17U:\n      {\n        break;\n      }\n    case 19U:\n      {\n        Eurydice_arr_c30 out = { .data = { 0U } };\n        libcrux_ml_dsa_hash_functions_simd256_shake256_8c_c8(Eurydice_array_to_slice_shared_39(seed),\n          &out);\n        deserialize_641(gamma1_exponent, Eurydice_array_to_slice_shared_7d0(&out), result);\n        return;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  Eurydice_arr_5f0 out = { .data = { 0U } };\n  libcrux_ml_dsa_hash_functions_simd256_shake256_8c_1b(Eurydice_array_to_slice_shared_39(seed),\n    &out);\n  deserialize_641(gamma1_exponent, Eurydice_array_to_slice_shared_fa(&out), result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.sample_mask_vector\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nsample_mask_vector_f4(\n  size_t dimension,\n  size_t gamma1_exponent,\n  const Eurydice_arr_060 *seed,\n  uint16_t *domain_separator,\n  Eurydice_dst_ref_mut_2a mask\n)\n{\n  Eurydice_arr_a2\n  seed0 =\n    libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_d8(seed),\n      domain_separator[0U]);\n  Eurydice_arr_a2\n  seed1 =\n    libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_d8(seed),\n      (uint32_t)domain_separator[0U] + 1U);\n  Eurydice_arr_a2\n  seed2 =\n    libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_d8(seed),\n      (uint32_t)domain_separator[0U] + 2U);\n  Eurydice_arr_a2\n  seed3 =\n    libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_d8(seed),\n      (uint32_t)domain_separator[0U] + 3U);\n  domain_separator[0U] = (uint32_t)domain_separator[0U] + 4U;\n  switch (gamma1_exponent)\n  {\n    case 17U:\n      {\n        Eurydice_arr_5f0 out0 = { .data = { 0U } };\n        Eurydice_arr_5f0 out1 = { .data = { 0U } };\n        Eurydice_arr_5f0 out2 = { .data = { 0U } };\n        Eurydice_arr_5f0 out3 = { .data = { 0U } };\n        libcrux_ml_dsa_hash_functions_simd256_shake256_x4_ad_1b(Eurydice_array_to_slice_shared_39(&seed0),\n          Eurydice_array_to_slice_shared_39(&seed1),\n          Eurydice_array_to_slice_shared_39(&seed2),\n          Eurydice_array_to_slice_shared_39(&seed3),\n          &out0,\n          &out1,\n          &out2,\n          &out3);\n        deserialize_641(gamma1_exponent, Eurydice_array_to_slice_shared_fa(&out0), mask.ptr);\n        deserialize_641(gamma1_exponent, Eurydice_array_to_slice_shared_fa(&out1), &mask.ptr[1U]);\n        deserialize_641(gamma1_exponent, Eurydice_array_to_slice_shared_fa(&out2), &mask.ptr[2U]);\n        deserialize_641(gamma1_exponent, Eurydice_array_to_slice_shared_fa(&out3), &mask.ptr[3U]);\n        break;\n      }\n    case 19U:\n      {\n        Eurydice_arr_c30 out0 = { .data = { 0U } };\n        Eurydice_arr_c30 out1 = { .data = { 0U } };\n        Eurydice_arr_c30 out2 = { .data = { 0U } };\n        Eurydice_arr_c30 out3 = { .data = { 0U } };\n        libcrux_ml_dsa_hash_functions_simd256_shake256_x4_ad_c8(Eurydice_array_to_slice_shared_39(&seed0),\n          Eurydice_array_to_slice_shared_39(&seed1),\n          Eurydice_array_to_slice_shared_39(&seed2),\n          Eurydice_array_to_slice_shared_39(&seed3),\n          &out0,\n          &out1,\n          &out2,\n          &out3);\n        deserialize_641(gamma1_exponent, Eurydice_array_to_slice_shared_7d0(&out0), mask.ptr);\n        deserialize_641(gamma1_exponent, Eurydice_array_to_slice_shared_7d0(&out1), &mask.ptr[1U]);\n        deserialize_641(gamma1_exponent, Eurydice_array_to_slice_shared_7d0(&out2), &mask.ptr[2U]);\n        deserialize_641(gamma1_exponent, Eurydice_array_to_slice_shared_7d0(&out3), &mask.ptr[3U]);\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  for (size_t i = (size_t)4U; i < dimension; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_a2\n    seed4 =\n      libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_d8(seed),\n        domain_separator[0U]);\n    domain_separator[0U] = (uint32_t)domain_separator[0U] + 1U;\n    sample_mask_ring_element_18(&seed4, &mask.ptr[i0], gamma1_exponent);\n  }\n}\n\n/**\n Compute InvertNTT(Â ◦ ŷ)\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.compute_matrix_x_mask\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ncompute_matrix_x_mask_64(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  Eurydice_dst_ref_shared_2a matrix,\n  Eurydice_dst_ref_shared_2a mask,\n  Eurydice_dst_ref_mut_2a result\n)\n{\n  for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < columns_in_a; i++)\n    {\n      size_t j = i;\n      Eurydice_arr_cd0 product = mask.ptr[j];\n      ntt_multiply_montgomery_64(&product, &matrix.ptr[i1 * columns_in_a + j]);\n      add_ff_64(&result.ptr[i1], &product);\n    }\n    reduce_64(&result.ptr[i1]);\n    invert_ntt_montgomery_64(&result.ptr[i1]);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 16\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_slice_shared_7111(const arr_30 *a)\n{\n  Eurydice_dst_ref_shared_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.decompose_vector\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ndecompose_vector_64(\n  size_t dimension,\n  int32_t gamma2,\n  Eurydice_dst_ref_shared_2a t,\n  Eurydice_dst_ref_mut_2a low,\n  Eurydice_dst_ref_mut_2a high\n)\n{\n  for (size_t i0 = (size_t)0U; i0 < dimension; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n    {\n      size_t j = i;\n      libcrux_ml_dsa_simd_avx2_decompose_a2(gamma2,\n        &t.ptr[i1].data[j],\n        &low.ptr[i1].data[j],\n        &high.ptr[i1].data[j]);\n    }\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.commitment.serialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nserialize_642(const Eurydice_arr_cd0 *re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  size_t output_bytes_per_simd_unit = serialized.meta / ((size_t)8U * (size_t)4U);\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    const __m256i *simd_unit = &re->data[i0];\n    libcrux_ml_dsa_simd_avx2_commitment_serialize_a2(simd_unit,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * output_bytes_per_simd_unit,\n            .end = (i0 + (size_t)1U) * output_bytes_per_simd_unit\n          }\n        )));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.commitment.serialize_vector\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nserialize_vector_64(\n  size_t ring_element_size,\n  Eurydice_dst_ref_shared_2a vector,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  size_t offset = (size_t)0U;\n  for (size_t i = (size_t)0U; i < vector.meta; i++)\n  {\n    size_t _cloop_j = i;\n    const Eurydice_arr_cd0 *ring_element = &vector.ptr[_cloop_j];\n    serialize_642(ring_element,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = offset,\n            .end = offset + ring_element_size\n          }\n        )));\n    offset = offset + ring_element_size;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.sample_challenge_ring_element\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_hash_functions_simd256_Shake256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nsample_challenge_ring_element_18(\n  Eurydice_borrow_slice_u8 seed,\n  size_t number_of_ones,\n  Eurydice_arr_cd0 *re\n)\n{\n  Eurydice_arr_26 state = libcrux_ml_dsa_hash_functions_simd256_init_absorb_final_8c(seed);\n  Eurydice_arr_3d\n  randomness0 = libcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_8c(&state);\n  Eurydice_array_u8x8 arr;\n  memcpy(arr.data,\n    Eurydice_array_to_subslice_shared_360(&randomness0,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)8U })).ptr,\n    (size_t)8U * sizeof (uint8_t));\n  uint64_t\n  signs =\n    core_num__u64__from_le_bytes(core_result_unwrap_26_ab((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        )));\n  Eurydice_arr_c3 result = { .data = { 0U } };\n  size_t out_index = (size_t)256U - number_of_ones;\n  bool\n  done =\n    libcrux_ml_dsa_sample_inside_out_shuffle(Eurydice_array_to_subslice_from_shared_8c(&randomness0,\n        (size_t)8U),\n      &out_index,\n      &signs,\n      &result);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_3d\n      randomness = libcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_8c(&state);\n      done =\n        libcrux_ml_dsa_sample_inside_out_shuffle(Eurydice_array_to_slice_shared_d4(&randomness),\n          &out_index,\n          &signs,\n          &result);\n    }\n  }\n  from_i32_array_ff_64(Eurydice_array_to_slice_shared_200(&result), re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.vector_times_ring_element\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nvector_times_ring_element_64(\n  Eurydice_dst_ref_mut_2a vector,\n  const Eurydice_arr_cd0 *ring_element\n)\n{\n  for (size_t i = (size_t)0U; i < vector.meta; i++)\n  {\n    size_t i0 = i;\n    ntt_multiply_montgomery_64(&vector.ptr[i0], ring_element);\n    invert_ntt_montgomery_64(&vector.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.add_vectors\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nadd_vectors_64(size_t dimension, Eurydice_dst_ref_mut_2a lhs, Eurydice_dst_ref_shared_2a rhs)\n{\n  for (size_t i = (size_t)0U; i < dimension; i++)\n  {\n    size_t i0 = i;\n    add_ff_64(&lhs.ptr[i0], &rhs.ptr[i0]);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.subtract_ff\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nsubtract_ff_64(Eurydice_arr_cd0 *self, const Eurydice_arr_cd0 *rhs)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_simd_avx2_subtract_a2(&self->data[i0], &rhs->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.subtract_vectors\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nsubtract_vectors_64(\n  size_t dimension,\n  Eurydice_dst_ref_mut_2a lhs,\n  Eurydice_dst_ref_shared_2a rhs\n)\n{\n  for (size_t i = (size_t)0U; i < dimension; i++)\n  {\n    size_t i0 = i;\n    subtract_ff_64(&lhs.ptr[i0], &rhs.ptr[i0]);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.infinity_norm_exceeds_ff\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE bool\ninfinity_norm_exceeds_ff_64(const Eurydice_arr_cd0 *self, int32_t bound)\n{\n  bool result = false;\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    bool uu____0;\n    if (result)\n    {\n      uu____0 = true;\n    }\n    else\n    {\n      uu____0 = libcrux_ml_dsa_simd_avx2_infinity_norm_exceeds_a2(&self->data[i0], bound);\n    }\n    result = uu____0;\n  }\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.vector_infinity_norm_exceeds\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE bool\nvector_infinity_norm_exceeds_64(Eurydice_dst_ref_shared_2a vector, int32_t bound)\n{\n  bool result = false;\n  for (size_t i = (size_t)0U; i < vector.meta; i++)\n  {\n    size_t i0 = i;\n    bool uu____0;\n    if (result)\n    {\n      uu____0 = true;\n    }\n    else\n    {\n      uu____0 = infinity_norm_exceeds_ff_64(&vector.ptr[i0], bound);\n    }\n    result = uu____0;\n  }\n  return result;\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.to_i32_array_ff\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_arr_c3\nto_i32_array_ff_64(const Eurydice_arr_cd0 *self)\n{\n  Eurydice_arr_c3 result = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_simd_avx2_to_coefficient_array_a2(&self->data[i0],\n      Eurydice_array_to_subslice_mut_7f(&result,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT\n          }\n        )));\n  }\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.make_hint\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE size_t\nmake_hint_64(\n  Eurydice_dst_ref_shared_2a low,\n  Eurydice_dst_ref_shared_2a high,\n  int32_t gamma2,\n  Eurydice_dst_ref_mut_22 hint\n)\n{\n  size_t true_hints = (size_t)0U;\n  Eurydice_arr_cd0 hint_simd = zero_ff_64();\n  for (size_t i0 = (size_t)0U; i0 < low.meta; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n    {\n      size_t j = i;\n      size_t\n      one_hints_count =\n        libcrux_ml_dsa_simd_avx2_compute_hint_a2(&low.ptr[i1].data[j],\n          &high.ptr[i1].data[j],\n          gamma2,\n          &hint_simd.data[j]);\n      true_hints = true_hints + one_hints_count;\n    }\n    Eurydice_arr_c3 uu____0 = to_i32_array_ff_64(&hint_simd);\n    hint.ptr[i1] = uu____0;\n  }\n  return true_hints;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.gamma1.serialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nserialize_643(\n  const Eurydice_arr_cd0 *re,\n  Eurydice_mut_borrow_slice_u8 serialized,\n  size_t gamma1_exponent\n)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    const __m256i *simd_unit = &re->data[i0];\n    libcrux_ml_dsa_simd_avx2_gamma1_serialize_a2(simd_unit,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (gamma1_exponent + (size_t)1U),\n            .end = (i0 + (size_t)1U) * (gamma1_exponent + (size_t)1U)\n          }\n        )),\n      gamma1_exponent);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.signature.serialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nserialize_644(\n  Eurydice_borrow_slice_u8 commitment_hash,\n  Eurydice_dst_ref_shared_2a signer_response,\n  Eurydice_dst_ref_shared_22 hint,\n  size_t commitment_hash_size,\n  size_t columns_in_a,\n  size_t rows_in_a,\n  size_t gamma1_exponent,\n  size_t gamma1_ring_element_size,\n  size_t max_ones_in_hint,\n  Eurydice_mut_borrow_slice_u8 signature\n)\n{\n  size_t offset = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(signature,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = offset,\n          .end = offset + commitment_hash_size\n        }\n      )),\n    commitment_hash,\n    uint8_t);\n  offset = offset + commitment_hash_size;\n  for (size_t i = (size_t)0U; i < columns_in_a; i++)\n  {\n    size_t i0 = i;\n    serialize_643(&signer_response.ptr[i0],\n      Eurydice_slice_subslice_mut_7e(signature,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = offset,\n            .end = offset + gamma1_ring_element_size\n          }\n        )),\n      gamma1_exponent);\n    offset = offset + gamma1_ring_element_size;\n  }\n  size_t true_hints_seen = (size_t)0U;\n  for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)256U; i++)\n    {\n      size_t j = i;\n      if (hint.ptr[i1].data[j] == (int32_t)1)\n      {\n        signature.ptr[offset + true_hints_seen] = (uint8_t)j;\n        true_hints_seen++;\n      }\n    }\n    signature.ptr[offset + max_ones_in_hint + i1] = (uint8_t)true_hints_seen;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_internal\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_internal_07(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(signing_key,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized0 = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(remaining_serialized0,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized1 = uu____1.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(remaining_serialized1,\n      LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 verification_key_hash = uu____2.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized2 = uu____2.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____3 =\n    Eurydice_slice_split_at(remaining_serialized2,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s1_serialized = uu____3.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized = uu____3.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____4 =\n    Eurydice_slice_split_at(remaining_serialized,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s2_serialized = uu____4.fst;\n  Eurydice_borrow_slice_u8 t0_serialized = uu____4.snd;\n  Eurydice_arr_15 s1_as_ntt;\n  Eurydice_arr_cd0 repeat_expression0[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression0[i] = zero_ff_64(););\n  memcpy(s1_as_ntt.data, repeat_expression0, (size_t)4U * sizeof (Eurydice_arr_cd0));\n  Eurydice_arr_15 s2_as_ntt;\n  Eurydice_arr_cd0 repeat_expression1[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression1[i] = zero_ff_64(););\n  memcpy(s2_as_ntt.data, repeat_expression1, (size_t)4U * sizeof (Eurydice_arr_cd0));\n  Eurydice_arr_15 t0_as_ntt;\n  Eurydice_arr_cd0 repeat_expression2[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression2[i] = zero_ff_64(););\n  memcpy(t0_as_ntt.data, repeat_expression2, (size_t)4U * sizeof (Eurydice_arr_cd0));\n  deserialize_to_vector_then_ntt_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE,\n    s1_serialized,\n    array_to_slice_mut_7111(&s1_as_ntt));\n  deserialize_to_vector_then_ntt_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE,\n    s2_serialized,\n    array_to_slice_mut_7111(&s2_as_ntt));\n  deserialize_to_vector_then_ntt_640(t0_serialized, array_to_slice_mut_7111(&t0_as_ntt));\n  arr_30 matrix;\n  Eurydice_arr_cd0 repeat_expression3[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression3[i] = zero_ff_64(););\n  memcpy(matrix.data, repeat_expression3, (size_t)16U * sizeof (Eurydice_arr_cd0));\n  libcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n    seed_for_a,\n    array_to_slice_mut_7110(&matrix));\n  Eurydice_arr_060 message_representative = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(verification_key_hash,\n    &domain_separation_context,\n    message,\n    &message_representative);\n  Eurydice_arr_060 mask_seed = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake0 = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0, seed_for_signing);\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake0,\n    Eurydice_array_to_slice_shared_d8(&message_representative));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake0,\n    Eurydice_array_to_slice_mut_d8(&mask_seed));\n  uint16_t domain_separator_for_mask = 0U;\n  size_t attempt = (size_t)0U;\n  core_option_Option_90 commitment_hash0 = { .tag = core_option_None };\n  Option_9d signer_response0 = { .tag = core_option_None };\n  core_option_Option_cf hint0 = { .tag = core_option_None };\n  while (attempt < LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN)\n  {\n    attempt++;\n    Eurydice_arr_15 mask;\n    Eurydice_arr_cd0 repeat_expression4[4U];\n    KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression4[i] = zero_ff_64(););\n    memcpy(mask.data, repeat_expression4, (size_t)4U * sizeof (Eurydice_arr_cd0));\n    Eurydice_arr_15 w0;\n    Eurydice_arr_cd0 repeat_expression5[4U];\n    KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression5[i] = zero_ff_64(););\n    memcpy(w0.data, repeat_expression5, (size_t)4U * sizeof (Eurydice_arr_cd0));\n    Eurydice_arr_15 commitment;\n    Eurydice_arr_cd0 repeat_expression6[4U];\n    KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression6[i] = zero_ff_64(););\n    memcpy(commitment.data, repeat_expression6, (size_t)4U * sizeof (Eurydice_arr_cd0));\n    sample_mask_vector_f4(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT,\n      &mask_seed,\n      &domain_separator_for_mask,\n      array_to_slice_mut_7111(&mask));\n    Eurydice_arr_15 a_x_mask;\n    Eurydice_arr_cd0 repeat_expression[4U];\n    KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = zero_ff_64(););\n    memcpy(a_x_mask.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_cd0));\n    Eurydice_arr_15\n    mask_ntt =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)4U,\n        &mask,\n        Eurydice_arr_cd0,\n        Eurydice_arr_15);\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t i0 = i;\n      ntt_64(&mask_ntt.data[i0]););\n    compute_matrix_x_mask_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n      array_to_slice_shared_7111(&matrix),\n      array_to_slice_shared_719(&mask_ntt),\n      array_to_slice_mut_7111(&a_x_mask));\n    decompose_vector_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2,\n      array_to_slice_shared_719(&a_x_mask),\n      array_to_slice_mut_7111(&w0),\n      array_to_slice_mut_7111(&commitment));\n    Eurydice_arr_60 commitment_hash_candidate = { .data = { 0U } };\n    Eurydice_arr_56 commitment_serialized = { .data = { 0U } };\n    serialize_vector_64(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_COMMITMENT_RING_ELEMENT_SIZE,\n      array_to_slice_shared_719(&commitment),\n      Eurydice_array_to_slice_mut_ee(&commitment_serialized));\n    libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n    shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n    libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n      Eurydice_array_to_slice_shared_d8(&message_representative));\n    libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n      Eurydice_array_to_slice_shared_ee(&commitment_serialized));\n    libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n      Eurydice_array_to_slice_mut_6e(&commitment_hash_candidate));\n    Eurydice_arr_cd0 verifier_challenge = zero_ff_64();\n    sample_challenge_ring_element_18(Eurydice_array_to_slice_shared_6e(&commitment_hash_candidate),\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ONES_IN_VERIFIER_CHALLENGE,\n      &verifier_challenge);\n    ntt_64(&verifier_challenge);\n    Eurydice_arr_15\n    challenge_times_s1 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)4U,\n        &s1_as_ntt,\n        Eurydice_arr_cd0,\n        Eurydice_arr_15);\n    Eurydice_arr_15\n    challenge_times_s2 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)4U,\n        &s2_as_ntt,\n        Eurydice_arr_cd0,\n        Eurydice_arr_15);\n    vector_times_ring_element_64(array_to_slice_mut_7111(&challenge_times_s1),\n      &verifier_challenge);\n    vector_times_ring_element_64(array_to_slice_mut_7111(&challenge_times_s2),\n      &verifier_challenge);\n    add_vectors_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n      array_to_slice_mut_7111(&mask),\n      array_to_slice_shared_719(&challenge_times_s1));\n    subtract_vectors_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n      array_to_slice_mut_7111(&w0),\n      array_to_slice_shared_719(&challenge_times_s2));\n    if\n    (\n      !vector_infinity_norm_exceeds_64(array_to_slice_shared_719(&mask),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA)\n    )\n    {\n      if\n      (\n        !vector_infinity_norm_exceeds_64(array_to_slice_shared_719(&w0),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2 - LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA)\n      )\n      {\n        Eurydice_arr_15\n        challenge_times_t0 =\n          core_array__core__clone__Clone_for__T__N___clone((size_t)4U,\n            &t0_as_ntt,\n            Eurydice_arr_cd0,\n            Eurydice_arr_15);\n        vector_times_ring_element_64(array_to_slice_mut_7111(&challenge_times_t0),\n          &verifier_challenge);\n        if\n        (\n          !vector_infinity_norm_exceeds_64(array_to_slice_shared_719(&challenge_times_t0),\n            LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2)\n        )\n        {\n          add_vectors_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n            array_to_slice_mut_7111(&w0),\n            array_to_slice_shared_719(&challenge_times_t0));\n          Eurydice_arr_83\n          hint_candidate =\n            {\n              .data = {\n                { .data = { 0U } },\n                { .data = { 0U } },\n                { .data = { 0U } },\n                { .data = { 0U } }\n              }\n            };\n          size_t\n          ones_in_hint =\n            make_hint_64(array_to_slice_shared_719(&w0),\n              array_to_slice_shared_719(&commitment),\n              LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2,\n              Eurydice_array_to_slice_mut_6d(&hint_candidate));\n          if (!(ones_in_hint > LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT))\n          {\n            attempt = LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN;\n            commitment_hash0 =\n              (\n                KRML_CLITERAL(core_option_Option_90){\n                  .tag = core_option_Some,\n                  .f0 = commitment_hash_candidate\n                }\n              );\n            signer_response0 = (KRML_CLITERAL(Option_9d){ .tag = core_option_Some, .f0 = mask });\n            hint0 =\n              (\n                KRML_CLITERAL(core_option_Option_cf){\n                  .tag = core_option_Some,\n                  .f0 = hint_candidate\n                }\n              );\n          }\n        }\n      }\n    }\n  }\n  core_result_Result_53 uu____5;\n  if (commitment_hash0.tag == core_option_None)\n  {\n    uu____5 =\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n        }\n      );\n  }\n  else\n  {\n    Eurydice_arr_60 commitment_hash = commitment_hash0.f0;\n    Eurydice_arr_60 commitment_hash1 = commitment_hash;\n    if (signer_response0.tag == core_option_None)\n    {\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n    else\n    {\n      Eurydice_arr_15 signer_response = signer_response0.f0;\n      Eurydice_arr_15 signer_response1 = signer_response;\n      if (!(hint0.tag == core_option_None))\n      {\n        Eurydice_arr_83 hint = hint0.f0;\n        Eurydice_arr_83 hint1 = hint;\n        serialize_644(Eurydice_array_to_slice_shared_6e(&commitment_hash1),\n          array_to_slice_shared_719(&signer_response1),\n          Eurydice_array_to_slice_shared_6d(&hint1),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COMMITMENT_HASH_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT,\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_GAMMA1_RING_ELEMENT_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT,\n          Eurydice_array_to_slice_mut_180(signature));\n        return (KRML_CLITERAL(core_result_Result_53){ .tag = core_result_Ok });\n      }\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n  }\n  return uu____5;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_mut\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_mut_07(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    sign_internal_07(signing_key,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_48\nsign_07(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_400 signature = libcrux_ml_dsa_types_zero_c5_1a();\n  core_result_Result_53\n  uu____0 = sign_mut_07(signing_key, message, context, randomness, &signature);\n  core_result_Result_48 uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_48){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_48){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign__inner(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return sign_07(Eurydice_array_to_slice_shared_59(signing_key), message, context, randomness);\n}\n\n/**\n Sign.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign__inner(signing_key,\n      message,\n      context,\n      randomness);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_mut__inner(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  return\n    sign_mut_07(Eurydice_array_to_slice_shared_59(signing_key),\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\n Sign.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_mut(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_mut__inner(signing_key,\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_pre_hashed_mut\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_pre_hashed_mut_37(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))\n  {\n    libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n    core_result_Result_a8\n    uu____0 =\n      libcrux_ml_dsa_pre_hash_new_88(context,\n        (\n          KRML_CLITERAL(core_option_Option_b5){\n            .tag = core_option_Some,\n            .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n          }\n        ));\n    if (!(uu____0.tag == core_result_Ok))\n    {\n      return\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n          }\n        );\n    }\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n    return\n      sign_internal_07(signing_key,\n        (\n          KRML_CLITERAL(Eurydice_borrow_slice_u8){\n            .ptr = pre_hash_buffer.ptr,\n            .meta = pre_hash_buffer.meta\n          }\n        ),\n        (\n          KRML_CLITERAL(core_option_Option_84){\n            .tag = core_option_Some,\n            .f0 = domain_separation_context\n          }\n        ),\n        randomness,\n        signature);\n  }\n  return\n    (\n      KRML_CLITERAL(core_result_Result_53){\n        .tag = core_result_Err,\n        .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_pre_hashed\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_48\nsign_pre_hashed_37(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_400 signature = libcrux_ml_dsa_types_zero_c5_1a();\n  core_result_Result_53\n  uu____0 =\n    sign_pre_hashed_mut_37(signing_key,\n      message,\n      context,\n      pre_hash_buffer,\n      randomness,\n      &signature);\n  core_result_Result_48 uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_48){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_48){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_pre_hashed_shake128__inner(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    sign_pre_hashed_37(Eurydice_array_to_slice_shared_59(signing_key),\n      message,\n      context,\n      pre_hash_buffer,\n      randomness);\n}\n\n/**\n Sign (pre-hashed).\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_pre_hashed_shake128(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_pre_hashed_shake128__inner(signing_key,\n      message,\n      context,\n      pre_hash_buffer,\n      randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t1.deserialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic void\ndeserialize_642(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_cd0 *result)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_simd_avx2_t1_deserialize_a2(Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_ENCODING_T1_DESERIALIZE_WINDOW,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_ENCODING_T1_DESERIALIZE_WINDOW\n          }\n        )),\n      &result->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.verification_key.deserialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ndeserialize_643(\n  size_t rows_in_a,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_dst_ref_mut_2a t1\n)\n{\n  for (size_t i = (size_t)0U; i < rows_in_a; i++)\n  {\n    size_t i0 = i;\n    deserialize_642(Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE\n          }\n        )),\n      &t1.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.signature.deserialize\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_41\ndeserialize_644(\n  size_t columns_in_a,\n  size_t rows_in_a,\n  size_t commitment_hash_size,\n  size_t gamma1_exponent,\n  size_t gamma1_ring_element_size,\n  size_t max_ones_in_hint,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_mut_borrow_slice_u8 out_commitment_hash,\n  Eurydice_dst_ref_mut_2a out_signer_response,\n  Eurydice_dst_ref_mut_22 out_hint\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(serialized,\n      commitment_hash_size,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 commitment_hash = uu____0.fst;\n  Eurydice_borrow_slice_u8 rest_of_serialized = uu____0.snd;\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out_commitment_hash,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = commitment_hash_size })),\n    commitment_hash,\n    uint8_t);\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(rest_of_serialized,\n      gamma1_ring_element_size * columns_in_a,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 signer_response_serialized = uu____1.fst;\n  Eurydice_borrow_slice_u8 hint_serialized = uu____1.snd;\n  for (size_t i = (size_t)0U; i < columns_in_a; i++)\n  {\n    size_t i0 = i;\n    deserialize_641(gamma1_exponent,\n      Eurydice_slice_subslice_shared_7e(signer_response_serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * gamma1_ring_element_size,\n            .end = (i0 + (size_t)1U) * gamma1_ring_element_size\n          }\n        )),\n      &out_signer_response.ptr[i0]);\n  }\n  size_t previous_true_hints_seen = (size_t)0U;\n  bool malformed_hint = false;\n  for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)\n  {\n    size_t i1 = i0;\n    size_t current_true_hints_seen = (size_t)hint_serialized.ptr[max_ones_in_hint + i1];\n    if (current_true_hints_seen < previous_true_hints_seen)\n    {\n      malformed_hint = true;\n      break;\n    }\n    if (current_true_hints_seen > max_ones_in_hint)\n    {\n      malformed_hint = true;\n      break;\n    }\n    for (size_t i = previous_true_hints_seen; i < current_true_hints_seen; i++)\n    {\n      size_t j = i;\n      if (j > previous_true_hints_seen)\n      {\n        if (hint_serialized.ptr[j] <= hint_serialized.ptr[j - (size_t)1U])\n        {\n          malformed_hint = true;\n          break;\n        }\n      }\n      libcrux_ml_dsa_encoding_signature_set_hint(out_hint, i1, (size_t)hint_serialized.ptr[j]);\n    }\n    if (malformed_hint)\n    {\n      break;\n    }\n    previous_true_hints_seen = current_true_hints_seen;\n  }\n  for (size_t i = previous_true_hints_seen; i < max_ones_in_hint; i++)\n  {\n    size_t j = i;\n    if (hint_serialized.ptr[j] != 0U)\n    {\n      malformed_hint = true;\n      break;\n    }\n  }\n  core_result_Result_41 uu____2;\n  if (malformed_hint)\n  {\n    uu____2 =\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_MalformedHintError\n        }\n      );\n  }\n  else\n  {\n    uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });\n  }\n  return uu____2;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.arithmetic.shift_left_then_reduce\nwith const generics\n- SHIFT_BY= 13\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ninline void\nlibcrux_ml_dsa_simd_avx2_arithmetic_shift_left_then_reduce_84(__m256i *simd_unit)\n{\n  __m256i shifted = mm256_slli_epi32((int32_t)13, simd_unit[0U], __m256i);\n  __m256i quotient = mm256_add_epi32(shifted, mm256_set1_epi32((int32_t)1 << 22U));\n  __m256i quotient0 = mm256_srai_epi32((int32_t)23, quotient, __m256i);\n  __m256i\n  quotient_times_field_modulus =\n    mm256_mullo_epi32(quotient0,\n      mm256_set1_epi32(LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS));\n  simd_unit[0U] = mm256_sub_epi32(shifted, quotient_times_field_modulus);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.shift_left_then_reduce_a2\nwith const generics\n- SHIFT_BY= 13\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_simd_avx2_shift_left_then_reduce_a2_84(__m256i *simd_unit)\n{\n  libcrux_ml_dsa_simd_avx2_arithmetic_shift_left_then_reduce_84(simd_unit);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.shift_left_then_reduce\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- SHIFT_BY= 13\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nshift_left_then_reduce_3a(Eurydice_arr_cd0 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_simd_avx2_shift_left_then_reduce_a2_84(&re->data[i0]);\n  }\n}\n\n/**\n Compute InvertNTT(Â ◦ ẑ - ĉ ◦ NTT(t₁2ᵈ))\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.compute_w_approx\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ncompute_w_approx_64(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  Eurydice_dst_ref_shared_2a matrix,\n  Eurydice_dst_ref_shared_2a signer_response,\n  const Eurydice_arr_cd0 *verifier_challenge_as_ntt,\n  Eurydice_dst_ref_mut_2a t1\n)\n{\n  for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)\n  {\n    size_t i1 = i0;\n    Eurydice_arr_cd0 inner_result = zero_ff_64();\n    for (size_t i = (size_t)0U; i < columns_in_a; i++)\n    {\n      size_t j = i;\n      Eurydice_arr_cd0 product = matrix.ptr[i1 * columns_in_a + j];\n      ntt_multiply_montgomery_64(&product, &signer_response.ptr[j]);\n      add_ff_64(&inner_result, &product);\n    }\n    shift_left_then_reduce_3a(&t1.ptr[i1]);\n    ntt_64(&t1.ptr[i1]);\n    ntt_multiply_montgomery_64(&t1.ptr[i1], verifier_challenge_as_ntt);\n    subtract_ff_64(&inner_result, &t1.ptr[i1]);\n    t1.ptr[i1] = inner_result;\n    reduce_64(&t1.ptr[i1]);\n    invert_ntt_montgomery_64(&t1.ptr[i1]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.use_hint\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\nuse_hint_64(int32_t gamma2, Eurydice_dst_ref_shared_22 hint, Eurydice_dst_ref_mut_2a re_vector)\n{\n  for (size_t i0 = (size_t)0U; i0 < re_vector.meta; i0++)\n  {\n    size_t i1 = i0;\n    Eurydice_arr_cd0 tmp = zero_ff_64();\n    from_i32_array_ff_64(Eurydice_array_to_slice_shared_200(&hint.ptr[i1]), &tmp);\n    for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n    {\n      size_t j = i;\n      libcrux_ml_dsa_simd_avx2_use_hint_a2(gamma2, &re_vector.ptr[i1].data[j], &tmp.data[j]);\n    }\n    re_vector.ptr[i1] = tmp;\n  }\n}\n\n/**\n The internal verification API.\n\n If no `domain_separation_context` is supplied, it is assumed that\n `message` already contains the domain separation.\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.verify_internal\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_internal_07(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  const Eurydice_arr_400 *signature_serialized\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_bb(verification_key),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 t1_serialized = uu____0.snd;\n  Eurydice_arr_15 t1;\n  Eurydice_arr_cd0 repeat_expression0[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression0[i] = zero_ff_64(););\n  memcpy(t1.data, repeat_expression0, (size_t)4U * sizeof (Eurydice_arr_cd0));\n  deserialize_643(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n    t1_serialized,\n    array_to_slice_mut_7111(&t1));\n  Eurydice_arr_60 deserialized_commitment_hash = { .data = { 0U } };\n  Eurydice_arr_15 deserialized_signer_response;\n  Eurydice_arr_cd0 repeat_expression1[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression1[i] = zero_ff_64(););\n  memcpy(deserialized_signer_response.data,\n    repeat_expression1,\n    (size_t)4U * sizeof (Eurydice_arr_cd0));\n  Eurydice_arr_83\n  deserialized_hint =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  core_result_Result_41\n  uu____1 =\n    deserialize_644(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COMMITMENT_HASH_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_GAMMA1_RING_ELEMENT_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT,\n      Eurydice_array_to_slice_shared_180(signature_serialized),\n      Eurydice_array_to_slice_mut_6e(&deserialized_commitment_hash),\n      array_to_slice_mut_7111(&deserialized_signer_response),\n      Eurydice_array_to_slice_mut_6d(&deserialized_hint));\n  core_result_Result_41 uu____2;\n  if (uu____1.tag == core_result_Ok)\n  {\n    if\n    (\n      vector_infinity_norm_exceeds_64(array_to_slice_shared_719(&deserialized_signer_response),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA)\n    )\n    {\n      uu____2 =\n        (\n          KRML_CLITERAL(core_result_Result_41){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError\n          }\n        );\n    }\n    else\n    {\n      arr_30 matrix;\n      Eurydice_arr_cd0 repeat_expression[16U];\n      KRML_MAYBE_FOR16(i,\n        (size_t)0U,\n        (size_t)16U,\n        (size_t)1U,\n        repeat_expression[i] = zero_ff_64(););\n      memcpy(matrix.data, repeat_expression, (size_t)16U * sizeof (Eurydice_arr_cd0));\n      libcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n        seed_for_a,\n        array_to_slice_mut_7110(&matrix));\n      Eurydice_arr_060 verification_key_hash = { .data = { 0U } };\n      libcrux_ml_dsa_hash_functions_simd256_shake256_8c_24(Eurydice_array_to_slice_shared_bb(verification_key),\n        &verification_key_hash);\n      Eurydice_arr_060 message_representative = { .data = { 0U } };\n      libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(Eurydice_array_to_slice_shared_d8(&verification_key_hash),\n        &domain_separation_context,\n        message,\n        &message_representative);\n      Eurydice_arr_cd0 verifier_challenge = zero_ff_64();\n      sample_challenge_ring_element_18(Eurydice_array_to_slice_shared_6e(&deserialized_commitment_hash),\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ONES_IN_VERIFIER_CHALLENGE,\n        &verifier_challenge);\n      ntt_64(&verifier_challenge);\n      KRML_MAYBE_FOR4(i,\n        (size_t)0U,\n        (size_t)4U,\n        (size_t)1U,\n        size_t i0 = i;\n        ntt_64(&deserialized_signer_response.data[i0]););\n      compute_w_approx_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n        array_to_slice_shared_7111(&matrix),\n        array_to_slice_shared_719(&deserialized_signer_response),\n        &verifier_challenge,\n        array_to_slice_mut_7111(&t1));\n      Eurydice_arr_60 recomputed_commitment_hash = { .data = { 0U } };\n      use_hint_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2,\n        Eurydice_array_to_slice_shared_6d(&deserialized_hint),\n        array_to_slice_mut_7111(&t1));\n      Eurydice_arr_56 commitment_serialized = { .data = { 0U } };\n      serialize_vector_64(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_COMMITMENT_RING_ELEMENT_SIZE,\n        array_to_slice_shared_719(&t1),\n        Eurydice_array_to_slice_mut_ee(&commitment_serialized));\n      libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n      shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n      libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n        Eurydice_array_to_slice_shared_d8(&message_representative));\n      libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n        Eurydice_array_to_slice_shared_ee(&commitment_serialized));\n      libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n        Eurydice_array_to_slice_mut_6e(&recomputed_commitment_hash));\n      if\n      (\n        Eurydice_array_eq((size_t)32U,\n          &deserialized_commitment_hash,\n          &recomputed_commitment_hash,\n          uint8_t)\n      )\n      {\n        uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });\n      }\n      else\n      {\n        uu____2 =\n          (\n            KRML_CLITERAL(core_result_Result_41){\n              .tag = core_result_Err,\n              .f0 = libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError\n            }\n          );\n      }\n    }\n  }\n  else\n  {\n    libcrux_ml_dsa_types_VerificationError e = uu____1.f0;\n    uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Err, .f0 = e });\n  }\n  return uu____2;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.verify\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_07(\n  const Eurydice_arr_40 *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature_serialized\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_07(verification_key_serialized,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify__inner(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n)\n{\n  return verify_07(verification_key, message, context, signature);\n}\n\n/**\n Verify.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify__inner(verification_key,\n      message,\n      context,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.verify_pre_hashed\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_pre_hashed_37(\n  const Eurydice_arr_40 *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_400 *signature_serialized\n)\n{\n  libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (\n        KRML_CLITERAL(core_option_Option_b5){\n          .tag = core_option_Some,\n          .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n        }\n      ));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_07(verification_key_serialized,\n      (\n        KRML_CLITERAL(Eurydice_borrow_slice_u8){\n          .ptr = pre_hash_buffer.ptr,\n          .meta = pre_hash_buffer.meta\n        }\n      ),\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify_pre_hashed_shake128__inner(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_400 *signature\n)\n{\n  return verify_pre_hashed_37(verification_key, message, context, pre_hash_buffer, signature);\n}\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify_pre_hashed_shake128(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_400 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify_pre_hashed_shake128__inner(verification_key,\n      message,\n      context,\n      pre_hash_buffer,\n      signature);\n}\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b\nwith const generics\n- $11size_t\n*/\ntypedef struct arr_ad_s { Eurydice_arr_cd0 data[11U]; } arr_ad;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 11\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\") static Eurydice_dst_ref_mut_2a array_to_slice_mut_7112(arr_ad *a)\n{\n  Eurydice_dst_ref_mut_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)11U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b\nwith const generics\n- $30size_t\n*/\ntypedef struct arr_b7_s { Eurydice_arr_cd0 data[30U]; } arr_b7;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 30\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\") static Eurydice_dst_ref_mut_2a array_to_slice_mut_7113(arr_b7 *a)\n{\n  Eurydice_dst_ref_mut_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)30U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 5\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_mut_2a\narray_to_slice_mut_7114(Eurydice_arr_dd *a)\n{\n  Eurydice_dst_ref_mut_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)5U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 11\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_subslice_shared_c33(const arr_ad *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_shared_2a){ .ptr = a->data + r.start, .meta = r.end - r.start }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 5\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_slice_shared_7112(const Eurydice_arr_dd *a)\n{\n  Eurydice_dst_ref_shared_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)5U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 11\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_slice_shared_7113(const arr_ad *a)\n{\n  Eurydice_dst_ref_shared_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)11U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 6\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_mut_2a\narray_to_slice_mut_7115(Eurydice_arr_b50 *a)\n{\n  Eurydice_dst_ref_mut_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)6U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 6\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_slice_shared_7114(const Eurydice_arr_b50 *a)\n{\n  Eurydice_dst_ref_shared_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)6U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.generate_key_pair\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ngenerate_key_pair_070(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  Eurydice_arr_d10 seed_expanded0 = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x2\n  lvalue =\n    {\n      .data = {\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A\n      }\n    };\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n    Eurydice_array_to_slice_shared_26(&lvalue));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n    Eurydice_array_to_slice_mut_18(&seed_expanded0));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_18(&seed_expanded0),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_expanded = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(seed_expanded,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_error_vectors = uu____1.fst;\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.snd;\n  arr_ad s1_s2;\n  Eurydice_arr_cd0 repeat_expression0[11U];\n  KRML_MAYBE_FOR11(i,\n    (size_t)0U,\n    (size_t)11U,\n    (size_t)1U,\n    repeat_expression0[i] = zero_ff_64(););\n  memcpy(s1_s2.data, repeat_expression0, (size_t)11U * sizeof (Eurydice_arr_cd0));\n  sample_s1_and_s2_fc(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,\n    seed_for_error_vectors,\n    array_to_slice_mut_7112(&s1_s2));\n  Eurydice_arr_b50 t0;\n  Eurydice_arr_cd0 repeat_expression1[6U];\n  KRML_MAYBE_FOR6(i, (size_t)0U, (size_t)6U, (size_t)1U, repeat_expression1[i] = zero_ff_64(););\n  memcpy(t0.data, repeat_expression1, (size_t)6U * sizeof (Eurydice_arr_cd0));\n  arr_b7 a_as_ntt;\n  Eurydice_arr_cd0 repeat_expression2[30U];\n  for (size_t i = (size_t)0U; i < (size_t)30U; i++)\n  {\n    repeat_expression2[i] = zero_ff_64();\n  }\n  memcpy(a_as_ntt.data, repeat_expression2, (size_t)30U * sizeof (Eurydice_arr_cd0));\n  libcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n    seed_for_a,\n    array_to_slice_mut_7113(&a_as_ntt));\n  Eurydice_arr_dd s1_ntt;\n  Eurydice_arr_cd0 repeat_expression3[5U];\n  KRML_MAYBE_FOR5(i, (size_t)0U, (size_t)5U, (size_t)1U, repeat_expression3[i] = zero_ff_64(););\n  memcpy(s1_ntt.data, repeat_expression3, (size_t)5U * sizeof (Eurydice_arr_cd0));\n  Eurydice_slice_copy(array_to_slice_mut_7114(&s1_ntt),\n    array_to_subslice_shared_c33(&s1_s2,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A\n        }\n      )),\n    Eurydice_arr_cd0);\n  KRML_MAYBE_FOR5(i,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    size_t i0 = i;\n    ntt_64(&s1_ntt.data[i0]););\n  compute_as1_plus_s2_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n    LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n    array_to_slice_mut_7113(&a_as_ntt),\n    array_to_slice_shared_7112(&s1_ntt),\n    array_to_slice_shared_7113(&s1_s2),\n    array_to_slice_mut_7115(&t0));\n  Eurydice_arr_b50 t1;\n  Eurydice_arr_cd0 repeat_expression[6U];\n  KRML_MAYBE_FOR6(i, (size_t)0U, (size_t)6U, (size_t)1U, repeat_expression[i] = zero_ff_64(););\n  memcpy(t1.data, repeat_expression, (size_t)6U * sizeof (Eurydice_arr_cd0));\n  power2round_vector_64(array_to_slice_mut_7115(&t0), array_to_slice_mut_7115(&t1));\n  generate_serialized_64(seed_for_a, array_to_slice_shared_7114(&t1), verification_key);\n  generate_serialized_18(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE,\n    seed_for_a,\n    seed_for_signing,\n    (\n      KRML_CLITERAL(Eurydice_borrow_slice_u8){\n        .ptr = verification_key.ptr,\n        .meta = verification_key.meta\n      }\n    ),\n    array_to_slice_shared_7113(&s1_s2),\n    array_to_slice_shared_7114(&t0),\n    signing_key);\n}\n\n/**\n Key Generation.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_generate_key_pair__inner(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  generate_key_pair_070(randomness, signing_key, verification_key);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_generate_key_pair__inner(randomness,\n    signing_key,\n    verification_key);\n}\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_dd\n\n*/\ntypedef struct Option_ec_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_dd f0;\n}\nOption_ec;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 30\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_slice_shared_7115(const arr_b7 *a)\n{\n  Eurydice_dst_ref_shared_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)30U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_internal\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_internal_070(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(signing_key,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized0 = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(remaining_serialized0,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized1 = uu____1.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(remaining_serialized1,\n      LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 verification_key_hash = uu____2.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized2 = uu____2.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____3 =\n    Eurydice_slice_split_at(remaining_serialized2,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s1_serialized = uu____3.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized = uu____3.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____4 =\n    Eurydice_slice_split_at(remaining_serialized,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s2_serialized = uu____4.fst;\n  Eurydice_borrow_slice_u8 t0_serialized = uu____4.snd;\n  Eurydice_arr_dd s1_as_ntt;\n  Eurydice_arr_cd0 repeat_expression0[5U];\n  KRML_MAYBE_FOR5(i, (size_t)0U, (size_t)5U, (size_t)1U, repeat_expression0[i] = zero_ff_64(););\n  memcpy(s1_as_ntt.data, repeat_expression0, (size_t)5U * sizeof (Eurydice_arr_cd0));\n  Eurydice_arr_b50 s2_as_ntt;\n  Eurydice_arr_cd0 repeat_expression1[6U];\n  KRML_MAYBE_FOR6(i, (size_t)0U, (size_t)6U, (size_t)1U, repeat_expression1[i] = zero_ff_64(););\n  memcpy(s2_as_ntt.data, repeat_expression1, (size_t)6U * sizeof (Eurydice_arr_cd0));\n  Eurydice_arr_b50 t0_as_ntt;\n  Eurydice_arr_cd0 repeat_expression2[6U];\n  KRML_MAYBE_FOR6(i, (size_t)0U, (size_t)6U, (size_t)1U, repeat_expression2[i] = zero_ff_64(););\n  memcpy(t0_as_ntt.data, repeat_expression2, (size_t)6U * sizeof (Eurydice_arr_cd0));\n  deserialize_to_vector_then_ntt_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE,\n    s1_serialized,\n    array_to_slice_mut_7114(&s1_as_ntt));\n  deserialize_to_vector_then_ntt_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE,\n    s2_serialized,\n    array_to_slice_mut_7115(&s2_as_ntt));\n  deserialize_to_vector_then_ntt_640(t0_serialized, array_to_slice_mut_7115(&t0_as_ntt));\n  arr_b7 matrix;\n  Eurydice_arr_cd0 repeat_expression3[30U];\n  for (size_t i = (size_t)0U; i < (size_t)30U; i++)\n  {\n    repeat_expression3[i] = zero_ff_64();\n  }\n  memcpy(matrix.data, repeat_expression3, (size_t)30U * sizeof (Eurydice_arr_cd0));\n  libcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n    seed_for_a,\n    array_to_slice_mut_7113(&matrix));\n  Eurydice_arr_060 message_representative = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(verification_key_hash,\n    &domain_separation_context,\n    message,\n    &message_representative);\n  Eurydice_arr_060 mask_seed = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake0 = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0, seed_for_signing);\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake0,\n    Eurydice_array_to_slice_shared_d8(&message_representative));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake0,\n    Eurydice_array_to_slice_mut_d8(&mask_seed));\n  uint16_t domain_separator_for_mask = 0U;\n  size_t attempt = (size_t)0U;\n  core_option_Option_a6 commitment_hash0 = { .tag = core_option_None };\n  Option_ec signer_response0 = { .tag = core_option_None };\n  core_option_Option_cb hint0 = { .tag = core_option_None };\n  while (attempt < LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN)\n  {\n    attempt++;\n    Eurydice_arr_dd mask;\n    Eurydice_arr_cd0 repeat_expression4[5U];\n    KRML_MAYBE_FOR5(i, (size_t)0U, (size_t)5U, (size_t)1U, repeat_expression4[i] = zero_ff_64(););\n    memcpy(mask.data, repeat_expression4, (size_t)5U * sizeof (Eurydice_arr_cd0));\n    Eurydice_arr_b50 w0;\n    Eurydice_arr_cd0 repeat_expression5[6U];\n    KRML_MAYBE_FOR6(i, (size_t)0U, (size_t)6U, (size_t)1U, repeat_expression5[i] = zero_ff_64(););\n    memcpy(w0.data, repeat_expression5, (size_t)6U * sizeof (Eurydice_arr_cd0));\n    Eurydice_arr_b50 commitment;\n    Eurydice_arr_cd0 repeat_expression6[6U];\n    KRML_MAYBE_FOR6(i, (size_t)0U, (size_t)6U, (size_t)1U, repeat_expression6[i] = zero_ff_64(););\n    memcpy(commitment.data, repeat_expression6, (size_t)6U * sizeof (Eurydice_arr_cd0));\n    sample_mask_vector_f4(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT,\n      &mask_seed,\n      &domain_separator_for_mask,\n      array_to_slice_mut_7114(&mask));\n    Eurydice_arr_b50 a_x_mask;\n    Eurydice_arr_cd0 repeat_expression[6U];\n    KRML_MAYBE_FOR6(i, (size_t)0U, (size_t)6U, (size_t)1U, repeat_expression[i] = zero_ff_64(););\n    memcpy(a_x_mask.data, repeat_expression, (size_t)6U * sizeof (Eurydice_arr_cd0));\n    Eurydice_arr_dd\n    mask_ntt =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)5U,\n        &mask,\n        Eurydice_arr_cd0,\n        Eurydice_arr_dd);\n    KRML_MAYBE_FOR5(i,\n      (size_t)0U,\n      (size_t)5U,\n      (size_t)1U,\n      size_t i0 = i;\n      ntt_64(&mask_ntt.data[i0]););\n    compute_matrix_x_mask_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n      array_to_slice_shared_7115(&matrix),\n      array_to_slice_shared_7112(&mask_ntt),\n      array_to_slice_mut_7115(&a_x_mask));\n    decompose_vector_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2,\n      array_to_slice_shared_7114(&a_x_mask),\n      array_to_slice_mut_7115(&w0),\n      array_to_slice_mut_7115(&commitment));\n    Eurydice_arr_5f commitment_hash_candidate = { .data = { 0U } };\n    Eurydice_arr_56 commitment_serialized = { .data = { 0U } };\n    serialize_vector_64(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_COMMITMENT_RING_ELEMENT_SIZE,\n      array_to_slice_shared_7114(&commitment),\n      Eurydice_array_to_slice_mut_ee(&commitment_serialized));\n    libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n    shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n    libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n      Eurydice_array_to_slice_shared_d8(&message_representative));\n    libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n      Eurydice_array_to_slice_shared_ee(&commitment_serialized));\n    libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n      Eurydice_array_to_slice_mut_95(&commitment_hash_candidate));\n    Eurydice_arr_cd0 verifier_challenge = zero_ff_64();\n    sample_challenge_ring_element_18(Eurydice_array_to_slice_shared_95(&commitment_hash_candidate),\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ONES_IN_VERIFIER_CHALLENGE,\n      &verifier_challenge);\n    ntt_64(&verifier_challenge);\n    Eurydice_arr_dd\n    challenge_times_s1 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)5U,\n        &s1_as_ntt,\n        Eurydice_arr_cd0,\n        Eurydice_arr_dd);\n    Eurydice_arr_b50\n    challenge_times_s2 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)6U,\n        &s2_as_ntt,\n        Eurydice_arr_cd0,\n        Eurydice_arr_b50);\n    vector_times_ring_element_64(array_to_slice_mut_7114(&challenge_times_s1),\n      &verifier_challenge);\n    vector_times_ring_element_64(array_to_slice_mut_7115(&challenge_times_s2),\n      &verifier_challenge);\n    add_vectors_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n      array_to_slice_mut_7114(&mask),\n      array_to_slice_shared_7112(&challenge_times_s1));\n    subtract_vectors_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n      array_to_slice_mut_7115(&w0),\n      array_to_slice_shared_7114(&challenge_times_s2));\n    if\n    (\n      !vector_infinity_norm_exceeds_64(array_to_slice_shared_7112(&mask),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA)\n    )\n    {\n      if\n      (\n        !vector_infinity_norm_exceeds_64(array_to_slice_shared_7114(&w0),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2 - LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA)\n      )\n      {\n        Eurydice_arr_b50\n        challenge_times_t0 =\n          core_array__core__clone__Clone_for__T__N___clone((size_t)6U,\n            &t0_as_ntt,\n            Eurydice_arr_cd0,\n            Eurydice_arr_b50);\n        vector_times_ring_element_64(array_to_slice_mut_7115(&challenge_times_t0),\n          &verifier_challenge);\n        if\n        (\n          !vector_infinity_norm_exceeds_64(array_to_slice_shared_7114(&challenge_times_t0),\n            LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2)\n        )\n        {\n          add_vectors_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n            array_to_slice_mut_7115(&w0),\n            array_to_slice_shared_7114(&challenge_times_t0));\n          Eurydice_arr_b5\n          hint_candidate =\n            {\n              .data = {\n                { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n                { .data = { 0U } }, { .data = { 0U } }\n              }\n            };\n          size_t\n          ones_in_hint =\n            make_hint_64(array_to_slice_shared_7114(&w0),\n              array_to_slice_shared_7114(&commitment),\n              LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2,\n              Eurydice_array_to_slice_mut_6d0(&hint_candidate));\n          if (!(ones_in_hint > LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT))\n          {\n            attempt = LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN;\n            commitment_hash0 =\n              (\n                KRML_CLITERAL(core_option_Option_a6){\n                  .tag = core_option_Some,\n                  .f0 = commitment_hash_candidate\n                }\n              );\n            signer_response0 = (KRML_CLITERAL(Option_ec){ .tag = core_option_Some, .f0 = mask });\n            hint0 =\n              (\n                KRML_CLITERAL(core_option_Option_cb){\n                  .tag = core_option_Some,\n                  .f0 = hint_candidate\n                }\n              );\n          }\n        }\n      }\n    }\n  }\n  core_result_Result_53 uu____5;\n  if (commitment_hash0.tag == core_option_None)\n  {\n    uu____5 =\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n        }\n      );\n  }\n  else\n  {\n    Eurydice_arr_5f commitment_hash = commitment_hash0.f0;\n    Eurydice_arr_5f commitment_hash1 = commitment_hash;\n    if (signer_response0.tag == core_option_None)\n    {\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n    else\n    {\n      Eurydice_arr_dd signer_response = signer_response0.f0;\n      Eurydice_arr_dd signer_response1 = signer_response;\n      if (!(hint0.tag == core_option_None))\n      {\n        Eurydice_arr_b5 hint = hint0.f0;\n        Eurydice_arr_b5 hint1 = hint;\n        serialize_644(Eurydice_array_to_slice_shared_95(&commitment_hash1),\n          array_to_slice_shared_7112(&signer_response1),\n          Eurydice_array_to_slice_shared_6d0(&hint1),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COMMITMENT_HASH_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT,\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_GAMMA1_RING_ELEMENT_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT,\n          Eurydice_array_to_slice_mut_ee0(signature));\n        return (KRML_CLITERAL(core_result_Result_53){ .tag = core_result_Ok });\n      }\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n  }\n  return uu____5;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_mut\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_mut_070(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    sign_internal_070(signing_key,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_8c\nsign_070(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_96 signature = libcrux_ml_dsa_types_zero_c5_fa();\n  core_result_Result_53\n  uu____0 = sign_mut_070(signing_key, message, context, randomness, &signature);\n  core_result_Result_8c uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_8c){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_8c){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign__inner(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return sign_070(Eurydice_array_to_slice_shared_ef(signing_key), message, context, randomness);\n}\n\n/**\n Sign.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign__inner(signing_key,\n      message,\n      context,\n      randomness);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_mut__inner(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  return\n    sign_mut_070(Eurydice_array_to_slice_shared_ef(signing_key),\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\n Sign.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_mut(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_mut__inner(signing_key,\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_pre_hashed_mut\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_pre_hashed_mut_370(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))\n  {\n    libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n    core_result_Result_a8\n    uu____0 =\n      libcrux_ml_dsa_pre_hash_new_88(context,\n        (\n          KRML_CLITERAL(core_option_Option_b5){\n            .tag = core_option_Some,\n            .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n          }\n        ));\n    if (!(uu____0.tag == core_result_Ok))\n    {\n      return\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n          }\n        );\n    }\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n    return\n      sign_internal_070(signing_key,\n        (\n          KRML_CLITERAL(Eurydice_borrow_slice_u8){\n            .ptr = pre_hash_buffer.ptr,\n            .meta = pre_hash_buffer.meta\n          }\n        ),\n        (\n          KRML_CLITERAL(core_option_Option_84){\n            .tag = core_option_Some,\n            .f0 = domain_separation_context\n          }\n        ),\n        randomness,\n        signature);\n  }\n  return\n    (\n      KRML_CLITERAL(core_result_Result_53){\n        .tag = core_result_Err,\n        .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_pre_hashed\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_8c\nsign_pre_hashed_370(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_96 signature = libcrux_ml_dsa_types_zero_c5_fa();\n  core_result_Result_53\n  uu____0 =\n    sign_pre_hashed_mut_370(signing_key,\n      message,\n      context,\n      pre_hash_buffer,\n      randomness,\n      &signature);\n  core_result_Result_8c uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_8c){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_8c){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_pre_hashed_shake128__inner(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    sign_pre_hashed_370(Eurydice_array_to_slice_shared_ef(signing_key),\n      message,\n      context,\n      pre_hash_buffer,\n      randomness);\n}\n\n/**\n Sign (pre-hashed).\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_pre_hashed_shake128(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_pre_hashed_shake128__inner(signing_key,\n      message,\n      context,\n      pre_hash_buffer,\n      randomness);\n}\n\n/**\n The internal verification API.\n\n If no `domain_separation_context` is supplied, it is assumed that\n `message` already contains the domain separation.\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.verify_internal\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_internal_070(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  const Eurydice_arr_96 *signature_serialized\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_5b(verification_key),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 t1_serialized = uu____0.snd;\n  Eurydice_arr_b50 t1;\n  Eurydice_arr_cd0 repeat_expression0[6U];\n  KRML_MAYBE_FOR6(i, (size_t)0U, (size_t)6U, (size_t)1U, repeat_expression0[i] = zero_ff_64(););\n  memcpy(t1.data, repeat_expression0, (size_t)6U * sizeof (Eurydice_arr_cd0));\n  deserialize_643(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n    t1_serialized,\n    array_to_slice_mut_7115(&t1));\n  Eurydice_arr_5f deserialized_commitment_hash = { .data = { 0U } };\n  Eurydice_arr_dd deserialized_signer_response;\n  Eurydice_arr_cd0 repeat_expression1[5U];\n  KRML_MAYBE_FOR5(i, (size_t)0U, (size_t)5U, (size_t)1U, repeat_expression1[i] = zero_ff_64(););\n  memcpy(deserialized_signer_response.data,\n    repeat_expression1,\n    (size_t)5U * sizeof (Eurydice_arr_cd0));\n  Eurydice_arr_b5\n  deserialized_hint =\n    {\n      .data = {\n        { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n        { .data = { 0U } }, { .data = { 0U } }\n      }\n    };\n  core_result_Result_41\n  uu____1 =\n    deserialize_644(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COMMITMENT_HASH_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_GAMMA1_RING_ELEMENT_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT,\n      Eurydice_array_to_slice_shared_ee0(signature_serialized),\n      Eurydice_array_to_slice_mut_95(&deserialized_commitment_hash),\n      array_to_slice_mut_7114(&deserialized_signer_response),\n      Eurydice_array_to_slice_mut_6d0(&deserialized_hint));\n  core_result_Result_41 uu____2;\n  if (uu____1.tag == core_result_Ok)\n  {\n    if\n    (\n      vector_infinity_norm_exceeds_64(array_to_slice_shared_7112(&deserialized_signer_response),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA)\n    )\n    {\n      uu____2 =\n        (\n          KRML_CLITERAL(core_result_Result_41){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError\n          }\n        );\n    }\n    else\n    {\n      arr_b7 matrix;\n      Eurydice_arr_cd0 repeat_expression[30U];\n      for (size_t i = (size_t)0U; i < (size_t)30U; i++)\n      {\n        repeat_expression[i] = zero_ff_64();\n      }\n      memcpy(matrix.data, repeat_expression, (size_t)30U * sizeof (Eurydice_arr_cd0));\n      libcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n        seed_for_a,\n        array_to_slice_mut_7113(&matrix));\n      Eurydice_arr_060 verification_key_hash = { .data = { 0U } };\n      libcrux_ml_dsa_hash_functions_simd256_shake256_8c_24(Eurydice_array_to_slice_shared_5b(verification_key),\n        &verification_key_hash);\n      Eurydice_arr_060 message_representative = { .data = { 0U } };\n      libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(Eurydice_array_to_slice_shared_d8(&verification_key_hash),\n        &domain_separation_context,\n        message,\n        &message_representative);\n      Eurydice_arr_cd0 verifier_challenge = zero_ff_64();\n      sample_challenge_ring_element_18(Eurydice_array_to_slice_shared_95(&deserialized_commitment_hash),\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ONES_IN_VERIFIER_CHALLENGE,\n        &verifier_challenge);\n      ntt_64(&verifier_challenge);\n      KRML_MAYBE_FOR5(i,\n        (size_t)0U,\n        (size_t)5U,\n        (size_t)1U,\n        size_t i0 = i;\n        ntt_64(&deserialized_signer_response.data[i0]););\n      compute_w_approx_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n        array_to_slice_shared_7115(&matrix),\n        array_to_slice_shared_7112(&deserialized_signer_response),\n        &verifier_challenge,\n        array_to_slice_mut_7115(&t1));\n      Eurydice_arr_5f recomputed_commitment_hash = { .data = { 0U } };\n      use_hint_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2,\n        Eurydice_array_to_slice_shared_6d0(&deserialized_hint),\n        array_to_slice_mut_7115(&t1));\n      Eurydice_arr_56 commitment_serialized = { .data = { 0U } };\n      serialize_vector_64(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_COMMITMENT_RING_ELEMENT_SIZE,\n        array_to_slice_shared_7114(&t1),\n        Eurydice_array_to_slice_mut_ee(&commitment_serialized));\n      libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n      shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n      libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n        Eurydice_array_to_slice_shared_d8(&message_representative));\n      libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n        Eurydice_array_to_slice_shared_ee(&commitment_serialized));\n      libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n        Eurydice_array_to_slice_mut_95(&recomputed_commitment_hash));\n      if\n      (\n        Eurydice_array_eq((size_t)48U,\n          &deserialized_commitment_hash,\n          &recomputed_commitment_hash,\n          uint8_t)\n      )\n      {\n        uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });\n      }\n      else\n      {\n        uu____2 =\n          (\n            KRML_CLITERAL(core_result_Result_41){\n              .tag = core_result_Err,\n              .f0 = libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError\n            }\n          );\n      }\n    }\n  }\n  else\n  {\n    libcrux_ml_dsa_types_VerificationError e = uu____1.f0;\n    uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Err, .f0 = e });\n  }\n  return uu____2;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.verify\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_070(\n  const Eurydice_arr_4a *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature_serialized\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_070(verification_key_serialized,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify__inner(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n)\n{\n  return verify_070(verification_key, message, context, signature);\n}\n\n/**\n Verify.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify__inner(verification_key,\n      message,\n      context,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.verify_pre_hashed\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_pre_hashed_370(\n  const Eurydice_arr_4a *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_96 *signature_serialized\n)\n{\n  libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (\n        KRML_CLITERAL(core_option_Option_b5){\n          .tag = core_option_Some,\n          .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n        }\n      ));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_070(verification_key_serialized,\n      (\n        KRML_CLITERAL(Eurydice_borrow_slice_u8){\n          .ptr = pre_hash_buffer.ptr,\n          .meta = pre_hash_buffer.meta\n        }\n      ),\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify_pre_hashed_shake128__inner(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_96 *signature\n)\n{\n  return verify_pre_hashed_370(verification_key, message, context, pre_hash_buffer, signature);\n}\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify_pre_hashed_shake128(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_96 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify_pre_hashed_shake128__inner(verification_key,\n      message,\n      context,\n      pre_hash_buffer,\n      signature);\n}\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b\nwith const generics\n- $15size_t\n*/\ntypedef struct arr_34_s { Eurydice_arr_cd0 data[15U]; } arr_34;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 15\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\") static Eurydice_dst_ref_mut_2a array_to_slice_mut_7116(arr_34 *a)\n{\n  Eurydice_dst_ref_mut_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)15U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b\nwith const generics\n- $56size_t\n*/\ntypedef struct arr_ad0_s { Eurydice_arr_cd0 data[56U]; } arr_ad0;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 56\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_mut_2a\narray_to_slice_mut_7117(arr_ad0 *a)\n{\n  Eurydice_dst_ref_mut_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)56U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 7\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_mut_2a\narray_to_slice_mut_7118(Eurydice_arr_39 *a)\n{\n  Eurydice_dst_ref_mut_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)7U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 15\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_subslice_shared_c34(const arr_34 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_shared_2a){ .ptr = a->data + r.start, .meta = r.end - r.start }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 7\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_slice_shared_7116(const Eurydice_arr_39 *a)\n{\n  Eurydice_dst_ref_shared_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)7U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 15\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_slice_shared_7117(const arr_34 *a)\n{\n  Eurydice_dst_ref_shared_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)15U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.generate_key_pair\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE void\ngenerate_key_pair_071(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  Eurydice_arr_d10 seed_expanded0 = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x2\n  lvalue =\n    {\n      .data = {\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A\n      }\n    };\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n    Eurydice_array_to_slice_shared_26(&lvalue));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n    Eurydice_array_to_slice_mut_18(&seed_expanded0));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_18(&seed_expanded0),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_expanded = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(seed_expanded,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_error_vectors = uu____1.fst;\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.snd;\n  arr_34 s1_s2;\n  Eurydice_arr_cd0 repeat_expression0[15U];\n  KRML_MAYBE_FOR15(i,\n    (size_t)0U,\n    (size_t)15U,\n    (size_t)1U,\n    repeat_expression0[i] = zero_ff_64(););\n  memcpy(s1_s2.data, repeat_expression0, (size_t)15U * sizeof (Eurydice_arr_cd0));\n  sample_s1_and_s2_fc(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,\n    seed_for_error_vectors,\n    array_to_slice_mut_7116(&s1_s2));\n  Eurydice_arr_53 t0;\n  Eurydice_arr_cd0 repeat_expression1[8U];\n  KRML_MAYBE_FOR8(i, (size_t)0U, (size_t)8U, (size_t)1U, repeat_expression1[i] = zero_ff_64(););\n  memcpy(t0.data, repeat_expression1, (size_t)8U * sizeof (Eurydice_arr_cd0));\n  arr_ad0 a_as_ntt;\n  Eurydice_arr_cd0 repeat_expression2[56U];\n  for (size_t i = (size_t)0U; i < (size_t)56U; i++)\n  {\n    repeat_expression2[i] = zero_ff_64();\n  }\n  memcpy(a_as_ntt.data, repeat_expression2, (size_t)56U * sizeof (Eurydice_arr_cd0));\n  libcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n    seed_for_a,\n    array_to_slice_mut_7117(&a_as_ntt));\n  Eurydice_arr_39 s1_ntt;\n  Eurydice_arr_cd0 repeat_expression3[7U];\n  KRML_MAYBE_FOR7(i, (size_t)0U, (size_t)7U, (size_t)1U, repeat_expression3[i] = zero_ff_64(););\n  memcpy(s1_ntt.data, repeat_expression3, (size_t)7U * sizeof (Eurydice_arr_cd0));\n  Eurydice_slice_copy(array_to_slice_mut_7118(&s1_ntt),\n    array_to_subslice_shared_c34(&s1_s2,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A\n        }\n      )),\n    Eurydice_arr_cd0);\n  KRML_MAYBE_FOR7(i,\n    (size_t)0U,\n    (size_t)7U,\n    (size_t)1U,\n    size_t i0 = i;\n    ntt_64(&s1_ntt.data[i0]););\n  compute_as1_plus_s2_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n    LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n    array_to_slice_mut_7117(&a_as_ntt),\n    array_to_slice_shared_7116(&s1_ntt),\n    array_to_slice_shared_7117(&s1_s2),\n    array_to_slice_mut_719(&t0));\n  Eurydice_arr_53 t1;\n  Eurydice_arr_cd0 repeat_expression[8U];\n  KRML_MAYBE_FOR8(i, (size_t)0U, (size_t)8U, (size_t)1U, repeat_expression[i] = zero_ff_64(););\n  memcpy(t1.data, repeat_expression, (size_t)8U * sizeof (Eurydice_arr_cd0));\n  power2round_vector_64(array_to_slice_mut_719(&t0), array_to_slice_mut_719(&t1));\n  generate_serialized_64(seed_for_a, array_to_slice_shared_7110(&t1), verification_key);\n  generate_serialized_18(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE,\n    seed_for_a,\n    seed_for_signing,\n    (\n      KRML_CLITERAL(Eurydice_borrow_slice_u8){\n        .ptr = verification_key.ptr,\n        .meta = verification_key.meta\n      }\n    ),\n    array_to_slice_shared_7117(&s1_s2),\n    array_to_slice_shared_7110(&t0),\n    signing_key);\n}\n\n/**\n Key Generation.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_generate_key_pair__inner(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  generate_key_pair_071(randomness, signing_key, verification_key);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_generate_key_pair__inner(randomness,\n    signing_key,\n    verification_key);\n}\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_39\n\n*/\ntypedef struct Option_c4_s\n{\n  core_option_Option_08_tags tag;\n  Eurydice_arr_39 f0;\n}\nOption_c4;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- N= 56\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic Eurydice_dst_ref_shared_2a\narray_to_slice_shared_7118(const arr_ad0 *a)\n{\n  Eurydice_dst_ref_shared_2a lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)56U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_internal\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_internal_071(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(signing_key,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized0 = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(remaining_serialized0,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized1 = uu____1.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(remaining_serialized1,\n      LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 verification_key_hash = uu____2.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized2 = uu____2.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____3 =\n    Eurydice_slice_split_at(remaining_serialized2,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s1_serialized = uu____3.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized = uu____3.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____4 =\n    Eurydice_slice_split_at(remaining_serialized,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s2_serialized = uu____4.fst;\n  Eurydice_borrow_slice_u8 t0_serialized = uu____4.snd;\n  Eurydice_arr_39 s1_as_ntt;\n  Eurydice_arr_cd0 repeat_expression0[7U];\n  KRML_MAYBE_FOR7(i, (size_t)0U, (size_t)7U, (size_t)1U, repeat_expression0[i] = zero_ff_64(););\n  memcpy(s1_as_ntt.data, repeat_expression0, (size_t)7U * sizeof (Eurydice_arr_cd0));\n  Eurydice_arr_53 s2_as_ntt;\n  Eurydice_arr_cd0 repeat_expression1[8U];\n  KRML_MAYBE_FOR8(i, (size_t)0U, (size_t)8U, (size_t)1U, repeat_expression1[i] = zero_ff_64(););\n  memcpy(s2_as_ntt.data, repeat_expression1, (size_t)8U * sizeof (Eurydice_arr_cd0));\n  Eurydice_arr_53 t0_as_ntt;\n  Eurydice_arr_cd0 repeat_expression2[8U];\n  KRML_MAYBE_FOR8(i, (size_t)0U, (size_t)8U, (size_t)1U, repeat_expression2[i] = zero_ff_64(););\n  memcpy(t0_as_ntt.data, repeat_expression2, (size_t)8U * sizeof (Eurydice_arr_cd0));\n  deserialize_to_vector_then_ntt_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE,\n    s1_serialized,\n    array_to_slice_mut_7118(&s1_as_ntt));\n  deserialize_to_vector_then_ntt_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE,\n    s2_serialized,\n    array_to_slice_mut_719(&s2_as_ntt));\n  deserialize_to_vector_then_ntt_640(t0_serialized, array_to_slice_mut_719(&t0_as_ntt));\n  arr_ad0 matrix;\n  Eurydice_arr_cd0 repeat_expression3[56U];\n  for (size_t i = (size_t)0U; i < (size_t)56U; i++)\n  {\n    repeat_expression3[i] = zero_ff_64();\n  }\n  memcpy(matrix.data, repeat_expression3, (size_t)56U * sizeof (Eurydice_arr_cd0));\n  libcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n    seed_for_a,\n    array_to_slice_mut_7117(&matrix));\n  Eurydice_arr_060 message_representative = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(verification_key_hash,\n    &domain_separation_context,\n    message,\n    &message_representative);\n  Eurydice_arr_060 mask_seed = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake0 = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0, seed_for_signing);\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake0,\n    Eurydice_array_to_slice_shared_d8(&message_representative));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake0,\n    Eurydice_array_to_slice_mut_d8(&mask_seed));\n  uint16_t domain_separator_for_mask = 0U;\n  size_t attempt = (size_t)0U;\n  core_option_Option_d9 commitment_hash0 = { .tag = core_option_None };\n  Option_c4 signer_response0 = { .tag = core_option_None };\n  core_option_Option_b9 hint0 = { .tag = core_option_None };\n  while (attempt < LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN)\n  {\n    attempt++;\n    Eurydice_arr_39 mask;\n    Eurydice_arr_cd0 repeat_expression4[7U];\n    KRML_MAYBE_FOR7(i, (size_t)0U, (size_t)7U, (size_t)1U, repeat_expression4[i] = zero_ff_64(););\n    memcpy(mask.data, repeat_expression4, (size_t)7U * sizeof (Eurydice_arr_cd0));\n    Eurydice_arr_53 w0;\n    Eurydice_arr_cd0 repeat_expression5[8U];\n    KRML_MAYBE_FOR8(i, (size_t)0U, (size_t)8U, (size_t)1U, repeat_expression5[i] = zero_ff_64(););\n    memcpy(w0.data, repeat_expression5, (size_t)8U * sizeof (Eurydice_arr_cd0));\n    Eurydice_arr_53 commitment;\n    Eurydice_arr_cd0 repeat_expression6[8U];\n    KRML_MAYBE_FOR8(i, (size_t)0U, (size_t)8U, (size_t)1U, repeat_expression6[i] = zero_ff_64(););\n    memcpy(commitment.data, repeat_expression6, (size_t)8U * sizeof (Eurydice_arr_cd0));\n    sample_mask_vector_f4(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT,\n      &mask_seed,\n      &domain_separator_for_mask,\n      array_to_slice_mut_7118(&mask));\n    Eurydice_arr_53 a_x_mask;\n    Eurydice_arr_cd0 repeat_expression[8U];\n    KRML_MAYBE_FOR8(i, (size_t)0U, (size_t)8U, (size_t)1U, repeat_expression[i] = zero_ff_64(););\n    memcpy(a_x_mask.data, repeat_expression, (size_t)8U * sizeof (Eurydice_arr_cd0));\n    Eurydice_arr_39\n    mask_ntt =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)7U,\n        &mask,\n        Eurydice_arr_cd0,\n        Eurydice_arr_39);\n    KRML_MAYBE_FOR7(i,\n      (size_t)0U,\n      (size_t)7U,\n      (size_t)1U,\n      size_t i0 = i;\n      ntt_64(&mask_ntt.data[i0]););\n    compute_matrix_x_mask_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n      array_to_slice_shared_7118(&matrix),\n      array_to_slice_shared_7116(&mask_ntt),\n      array_to_slice_mut_719(&a_x_mask));\n    decompose_vector_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2,\n      array_to_slice_shared_7110(&a_x_mask),\n      array_to_slice_mut_719(&w0),\n      array_to_slice_mut_719(&commitment));\n    Eurydice_arr_060 commitment_hash_candidate = { .data = { 0U } };\n    Eurydice_arr_9e commitment_serialized = { .data = { 0U } };\n    serialize_vector_64(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_COMMITMENT_RING_ELEMENT_SIZE,\n      array_to_slice_shared_7110(&commitment),\n      Eurydice_array_to_slice_mut_fd(&commitment_serialized));\n    libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n    shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n    libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n      Eurydice_array_to_slice_shared_d8(&message_representative));\n    libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n      Eurydice_array_to_slice_shared_fd(&commitment_serialized));\n    libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n      Eurydice_array_to_slice_mut_d8(&commitment_hash_candidate));\n    Eurydice_arr_cd0 verifier_challenge = zero_ff_64();\n    sample_challenge_ring_element_18(Eurydice_array_to_slice_shared_d8(&commitment_hash_candidate),\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ONES_IN_VERIFIER_CHALLENGE,\n      &verifier_challenge);\n    ntt_64(&verifier_challenge);\n    Eurydice_arr_39\n    challenge_times_s1 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)7U,\n        &s1_as_ntt,\n        Eurydice_arr_cd0,\n        Eurydice_arr_39);\n    Eurydice_arr_53\n    challenge_times_s2 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)8U,\n        &s2_as_ntt,\n        Eurydice_arr_cd0,\n        Eurydice_arr_53);\n    vector_times_ring_element_64(array_to_slice_mut_7118(&challenge_times_s1),\n      &verifier_challenge);\n    vector_times_ring_element_64(array_to_slice_mut_719(&challenge_times_s2), &verifier_challenge);\n    add_vectors_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n      array_to_slice_mut_7118(&mask),\n      array_to_slice_shared_7116(&challenge_times_s1));\n    subtract_vectors_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n      array_to_slice_mut_719(&w0),\n      array_to_slice_shared_7110(&challenge_times_s2));\n    if\n    (\n      !vector_infinity_norm_exceeds_64(array_to_slice_shared_7116(&mask),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA)\n    )\n    {\n      if\n      (\n        !vector_infinity_norm_exceeds_64(array_to_slice_shared_7110(&w0),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2 - LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA)\n      )\n      {\n        Eurydice_arr_53\n        challenge_times_t0 =\n          core_array__core__clone__Clone_for__T__N___clone((size_t)8U,\n            &t0_as_ntt,\n            Eurydice_arr_cd0,\n            Eurydice_arr_53);\n        vector_times_ring_element_64(array_to_slice_mut_719(&challenge_times_t0),\n          &verifier_challenge);\n        if\n        (\n          !vector_infinity_norm_exceeds_64(array_to_slice_shared_7110(&challenge_times_t0),\n            LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2)\n        )\n        {\n          add_vectors_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n            array_to_slice_mut_719(&w0),\n            array_to_slice_shared_7110(&challenge_times_t0));\n          Eurydice_arr_fb\n          hint_candidate =\n            {\n              .data = {\n                { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n                { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }\n              }\n            };\n          size_t\n          ones_in_hint =\n            make_hint_64(array_to_slice_shared_7110(&w0),\n              array_to_slice_shared_7110(&commitment),\n              LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2,\n              Eurydice_array_to_slice_mut_6d1(&hint_candidate));\n          if (!(ones_in_hint > LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT))\n          {\n            attempt = LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN;\n            commitment_hash0 =\n              (\n                KRML_CLITERAL(core_option_Option_d9){\n                  .tag = core_option_Some,\n                  .f0 = commitment_hash_candidate\n                }\n              );\n            signer_response0 = (KRML_CLITERAL(Option_c4){ .tag = core_option_Some, .f0 = mask });\n            hint0 =\n              (\n                KRML_CLITERAL(core_option_Option_b9){\n                  .tag = core_option_Some,\n                  .f0 = hint_candidate\n                }\n              );\n          }\n        }\n      }\n    }\n  }\n  core_result_Result_53 uu____5;\n  if (commitment_hash0.tag == core_option_None)\n  {\n    uu____5 =\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n        }\n      );\n  }\n  else\n  {\n    Eurydice_arr_060 commitment_hash = commitment_hash0.f0;\n    Eurydice_arr_060 commitment_hash1 = commitment_hash;\n    if (signer_response0.tag == core_option_None)\n    {\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n    else\n    {\n      Eurydice_arr_39 signer_response = signer_response0.f0;\n      Eurydice_arr_39 signer_response1 = signer_response;\n      if (!(hint0.tag == core_option_None))\n      {\n        Eurydice_arr_fb hint = hint0.f0;\n        Eurydice_arr_fb hint1 = hint;\n        serialize_644(Eurydice_array_to_slice_shared_d8(&commitment_hash1),\n          array_to_slice_shared_7116(&signer_response1),\n          Eurydice_array_to_slice_shared_6d1(&hint1),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COMMITMENT_HASH_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT,\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_GAMMA1_RING_ELEMENT_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT,\n          Eurydice_array_to_slice_mut_24(signature));\n        return (KRML_CLITERAL(core_result_Result_53){ .tag = core_result_Ok });\n      }\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n  }\n  return uu____5;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_mut\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_mut_071(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    sign_internal_071(signing_key,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_8b\nsign_071(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_38 signature = libcrux_ml_dsa_types_zero_c5_c2();\n  core_result_Result_53\n  uu____0 = sign_mut_071(signing_key, message, context, randomness, &signature);\n  core_result_Result_8b uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_8b){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_8b){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign__inner(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return sign_071(Eurydice_array_to_slice_shared_e2(signing_key), message, context, randomness);\n}\n\n/**\n Sign.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign__inner(signing_key,\n      message,\n      context,\n      randomness);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_mut__inner(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  return\n    sign_mut_071(Eurydice_array_to_slice_shared_e2(signing_key),\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\n Sign.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_mut(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_mut__inner(signing_key,\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_pre_hashed_mut\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_pre_hashed_mut_371(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))\n  {\n    libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n    core_result_Result_a8\n    uu____0 =\n      libcrux_ml_dsa_pre_hash_new_88(context,\n        (\n          KRML_CLITERAL(core_option_Option_b5){\n            .tag = core_option_Some,\n            .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n          }\n        ));\n    if (!(uu____0.tag == core_result_Ok))\n    {\n      return\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n          }\n        );\n    }\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n    return\n      sign_internal_071(signing_key,\n        (\n          KRML_CLITERAL(Eurydice_borrow_slice_u8){\n            .ptr = pre_hash_buffer.ptr,\n            .meta = pre_hash_buffer.meta\n          }\n        ),\n        (\n          KRML_CLITERAL(core_option_Option_84){\n            .tag = core_option_Some,\n            .f0 = domain_separation_context\n          }\n        ),\n        randomness,\n        signature);\n  }\n  return\n    (\n      KRML_CLITERAL(core_result_Result_53){\n        .tag = core_result_Err,\n        .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_pre_hashed\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_simd256_Shake256x4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_8b\nsign_pre_hashed_371(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_38 signature = libcrux_ml_dsa_types_zero_c5_c2();\n  core_result_Result_53\n  uu____0 =\n    sign_pre_hashed_mut_371(signing_key,\n      message,\n      context,\n      pre_hash_buffer,\n      randomness,\n      &signature);\n  core_result_Result_8b uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_8b){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_8b){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_pre_hashed_shake128__inner(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    sign_pre_hashed_371(Eurydice_array_to_slice_shared_e2(signing_key),\n      message,\n      context,\n      pre_hash_buffer,\n      randomness);\n}\n\n/**\n Sign (pre-hashed).\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_pre_hashed_shake128(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_pre_hashed_shake128__inner(signing_key,\n      message,\n      context,\n      pre_hash_buffer,\n      randomness);\n}\n\n/**\n The internal verification API.\n\n If no `domain_separation_context` is supplied, it is assumed that\n `message` already contains the domain separation.\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.verify_internal\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_internal_071(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  const Eurydice_arr_38 *signature_serialized\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_f7(verification_key),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 t1_serialized = uu____0.snd;\n  Eurydice_arr_53 t1;\n  Eurydice_arr_cd0 repeat_expression0[8U];\n  KRML_MAYBE_FOR8(i, (size_t)0U, (size_t)8U, (size_t)1U, repeat_expression0[i] = zero_ff_64(););\n  memcpy(t1.data, repeat_expression0, (size_t)8U * sizeof (Eurydice_arr_cd0));\n  deserialize_643(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n    t1_serialized,\n    array_to_slice_mut_719(&t1));\n  Eurydice_arr_060 deserialized_commitment_hash = { .data = { 0U } };\n  Eurydice_arr_39 deserialized_signer_response;\n  Eurydice_arr_cd0 repeat_expression1[7U];\n  KRML_MAYBE_FOR7(i, (size_t)0U, (size_t)7U, (size_t)1U, repeat_expression1[i] = zero_ff_64(););\n  memcpy(deserialized_signer_response.data,\n    repeat_expression1,\n    (size_t)7U * sizeof (Eurydice_arr_cd0));\n  Eurydice_arr_fb\n  deserialized_hint =\n    {\n      .data = {\n        { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n        { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }\n      }\n    };\n  core_result_Result_41\n  uu____1 =\n    deserialize_644(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COMMITMENT_HASH_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_GAMMA1_RING_ELEMENT_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT,\n      Eurydice_array_to_slice_shared_24(signature_serialized),\n      Eurydice_array_to_slice_mut_d8(&deserialized_commitment_hash),\n      array_to_slice_mut_7118(&deserialized_signer_response),\n      Eurydice_array_to_slice_mut_6d1(&deserialized_hint));\n  core_result_Result_41 uu____2;\n  if (uu____1.tag == core_result_Ok)\n  {\n    if\n    (\n      vector_infinity_norm_exceeds_64(array_to_slice_shared_7116(&deserialized_signer_response),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA)\n    )\n    {\n      uu____2 =\n        (\n          KRML_CLITERAL(core_result_Result_41){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError\n          }\n        );\n    }\n    else\n    {\n      arr_ad0 matrix;\n      Eurydice_arr_cd0 repeat_expression[56U];\n      for (size_t i = (size_t)0U; i < (size_t)56U; i++)\n      {\n        repeat_expression[i] = zero_ff_64();\n      }\n      memcpy(matrix.data, repeat_expression, (size_t)56U * sizeof (Eurydice_arr_cd0));\n      libcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n        seed_for_a,\n        array_to_slice_mut_7117(&matrix));\n      Eurydice_arr_060 verification_key_hash = { .data = { 0U } };\n      libcrux_ml_dsa_hash_functions_simd256_shake256_8c_24(Eurydice_array_to_slice_shared_f7(verification_key),\n        &verification_key_hash);\n      Eurydice_arr_060 message_representative = { .data = { 0U } };\n      libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(Eurydice_array_to_slice_shared_d8(&verification_key_hash),\n        &domain_separation_context,\n        message,\n        &message_representative);\n      Eurydice_arr_cd0 verifier_challenge = zero_ff_64();\n      sample_challenge_ring_element_18(Eurydice_array_to_slice_shared_d8(&deserialized_commitment_hash),\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ONES_IN_VERIFIER_CHALLENGE,\n        &verifier_challenge);\n      ntt_64(&verifier_challenge);\n      KRML_MAYBE_FOR7(i,\n        (size_t)0U,\n        (size_t)7U,\n        (size_t)1U,\n        size_t i0 = i;\n        ntt_64(&deserialized_signer_response.data[i0]););\n      compute_w_approx_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n        array_to_slice_shared_7118(&matrix),\n        array_to_slice_shared_7116(&deserialized_signer_response),\n        &verifier_challenge,\n        array_to_slice_mut_719(&t1));\n      Eurydice_arr_060 recomputed_commitment_hash = { .data = { 0U } };\n      use_hint_64(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2,\n        Eurydice_array_to_slice_shared_6d1(&deserialized_hint),\n        array_to_slice_mut_719(&t1));\n      Eurydice_arr_9e commitment_serialized = { .data = { 0U } };\n      serialize_vector_64(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_COMMITMENT_RING_ELEMENT_SIZE,\n        array_to_slice_shared_7110(&t1),\n        Eurydice_array_to_slice_mut_fd(&commitment_serialized));\n      libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n      shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n      libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n        Eurydice_array_to_slice_shared_d8(&message_representative));\n      libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n        Eurydice_array_to_slice_shared_fd(&commitment_serialized));\n      libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n        Eurydice_array_to_slice_mut_d8(&recomputed_commitment_hash));\n      if\n      (\n        Eurydice_array_eq((size_t)64U,\n          &deserialized_commitment_hash,\n          &recomputed_commitment_hash,\n          uint8_t)\n      )\n      {\n        uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });\n      }\n      else\n      {\n        uu____2 =\n          (\n            KRML_CLITERAL(core_result_Result_41){\n              .tag = core_result_Err,\n              .f0 = libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError\n            }\n          );\n      }\n    }\n  }\n  else\n  {\n    libcrux_ml_dsa_types_VerificationError e = uu____1.f0;\n    uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Err, .f0 = e });\n  }\n  return uu____2;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.verify\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_071(\n  const Eurydice_arr_51 *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature_serialized\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_071(verification_key_serialized,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify__inner(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n)\n{\n  return verify_071(verification_key, message, context, signature);\n}\n\n/**\n Verify.\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify__inner(verification_key,\n      message,\n      context,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.verify_pre_hashed\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256, libcrux_ml_dsa_samplex4_avx2_AVX2Sampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_simd256_Shake128x4, libcrux_ml_dsa_hash_functions_simd256_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_pre_hashed_371(\n  const Eurydice_arr_51 *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_38 *signature_serialized\n)\n{\n  libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (\n        KRML_CLITERAL(core_option_Option_b5){\n          .tag = core_option_Some,\n          .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n        }\n      ));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_071(verification_key_serialized,\n      (\n        KRML_CLITERAL(Eurydice_borrow_slice_u8){\n          .ptr = pre_hash_buffer.ptr,\n          .meta = pre_hash_buffer.meta\n        }\n      ),\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify_pre_hashed_shake128__inner(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_38 *signature\n)\n{\n  return verify_pre_hashed_371(verification_key, message, context, pre_hash_buffer, signature);\n}\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify_pre_hashed_shake128(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_38 *signature\n)\n{\n  return\n    libcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify_pre_hashed_shake128__inner(verification_key,\n      message,\n      context,\n      pre_hash_buffer,\n      signature);\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nbool\nlibcrux_ml_dsa_simd_avx2_rejection_sample_shuffle_table_is_bit_set(\n  size_t number,\n  uint8_t bit_position\n)\n{\n  return (number & (size_t)1U << (uint32_t)bit_position) >> (uint32_t)bit_position == (size_t)1U;\n}\n\nKRML_ATTRIBUTE_TARGET(\"avx2\")\nEurydice_arr_0e\nlibcrux_ml_dsa_simd_avx2_rejection_sample_shuffle_table_generate_shuffle_table(void)\n{\n  Eurydice_arr_0e byte_shuffles;\n  Eurydice_arr_88 repeat_expression0[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    Eurydice_arr_88 lit;\n    uint8_t repeat_expression[16U];\n    memset(repeat_expression, 255U, (size_t)16U * sizeof (uint8_t));\n    memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (uint8_t));\n    repeat_expression0[i] = lit;);\n  memcpy(byte_shuffles.data, repeat_expression0, (size_t)16U * sizeof (Eurydice_arr_88));\n  for (size_t i0 = (size_t)0U; i0 < (size_t)1U << 4U; i0++)\n  {\n    size_t bit_pattern = i0;\n    size_t byte_shuffles_index = (size_t)0U;\n    for (uint8_t i = 0U; i < 4U; i = (uint32_t)i + 1U)\n    {\n      uint8_t bit_position = i;\n      if\n      (\n        libcrux_ml_dsa_simd_avx2_rejection_sample_shuffle_table_is_bit_set(bit_pattern,\n          bit_position)\n      )\n      {\n        byte_shuffles.data[bit_pattern].data[byte_shuffles_index] = (uint32_t)bit_position * 4U;\n        byte_shuffles_index++;\n        byte_shuffles.data[bit_pattern].data[byte_shuffles_index] = (uint32_t)bit_position * 4U + 1U;\n        byte_shuffles_index++;\n        byte_shuffles.data[bit_pattern].data[byte_shuffles_index] = (uint32_t)bit_position * 4U + 2U;\n        byte_shuffles_index++;\n        byte_shuffles.data[bit_pattern].data[byte_shuffles_index] = (uint32_t)bit_position * 4U + 3U;\n        byte_shuffles_index++;\n      }\n    }\n  }\n  return byte_shuffles;\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nKRML_ATTRIBUTE_TARGET(\"avx2\")\ninline __m256i\nlibcrux_ml_dsa_simd_avx2_vector_type_clone_be(const __m256i *self)\n{\n  return self[0U];\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mldsa_avx2_H\n#define libcrux_mldsa_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"intrinsics/libcrux_intrinsics_avx2.h\"\n\n#include \"libcrux_sha3_internal.h\"\n#include \"libcrux_sha3_avx2.h\"\n#include \"libcrux_mldsa_core.h\"\n\ntypedef libcrux_sha3_avx2_x4_incremental_KeccakState\nlibcrux_ml_dsa_hash_functions_simd256_Shake128x4;\n\ntypedef libcrux_sha3_portable_KeccakState libcrux_ml_dsa_hash_functions_simd256_Shake256;\n\ntypedef libcrux_sha3_avx2_x4_incremental_KeccakState\nlibcrux_ml_dsa_hash_functions_simd256_Shake256x4;\n\n/**\n Init the state and absorb 4 blocks in parallel.\n*/\nEurydice_arr_05\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n);\n\nEurydice_arr_26\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb_final_shake256(\n  Eurydice_borrow_slice_u8 input\n);\n\nEurydice_arr_05\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb_x4(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n);\n\nEurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_shake256(Eurydice_arr_26 *state);\n\nEurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_x4(Eurydice_arr_05 *state);\n\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_five_blocks(\n  Eurydice_arr_05 *state,\n  Eurydice_arr_12 *out0,\n  Eurydice_arr_12 *out1,\n  Eurydice_arr_12 *out2,\n  Eurydice_arr_12 *out3\n);\n\nEurydice_arr_27_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block(Eurydice_arr_05 *state);\n\nEurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_shake256(Eurydice_arr_26 *state);\n\nEurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_x4(Eurydice_arr_05 *state);\n\n/**\n Init the state and absorb 4 blocks in parallel.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake128x4}\n*/\nEurydice_arr_05\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb_3b(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake128x4}\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_five_blocks_3b(\n  Eurydice_arr_05 *self,\n  Eurydice_arr_12 *out0,\n  Eurydice_arr_12 *out1,\n  Eurydice_arr_12 *out2,\n  Eurydice_arr_12 *out3\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake128x4}\n*/\nEurydice_arr_27_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_3b(Eurydice_arr_05 *self);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\nEurydice_arr_26\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb_final_8c(Eurydice_borrow_slice_u8 input);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\nEurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_8c(Eurydice_arr_26 *self);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\nEurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_8c(Eurydice_arr_26 *self);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake256x4}\n*/\nEurydice_arr_05\nlibcrux_ml_dsa_hash_functions_simd256_init_absorb_x4_ad(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake256x4}\n*/\nEurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_first_block_x4_ad(Eurydice_arr_05 *self);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake256x4}\n*/\nEurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_simd256_squeeze_next_block_x4_ad(Eurydice_arr_05 *self);\n\ntypedef __m256i libcrux_ml_dsa_simd_avx2_vector_type_Vec256;\n\n/**\n Create an all-zero vector coefficient\n*/\n__m256i libcrux_ml_dsa_simd_avx2_vector_type_zero(void);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\n__m256i libcrux_ml_dsa_simd_avx2_zero_a2(void);\n\n/**\n Create a coefficient from an `i32` array\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_vector_type_from_coefficient_array(\n  Eurydice_dst_ref_shared_fc coefficient_array,\n  __m256i *out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_from_coefficient_array_a2(\n  Eurydice_dst_ref_shared_fc coefficient_array,\n  __m256i *out\n);\n\n/**\n Write out the coefficient to an `i32` array\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_vector_type_to_coefficient_array(\n  const __m256i *value,\n  Eurydice_dst_ref_mut_fc out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_to_coefficient_array_a2(\n  const __m256i *value,\n  Eurydice_dst_ref_mut_fc out\n);\n\nvoid libcrux_ml_dsa_simd_avx2_arithmetic_add(__m256i *lhs, const __m256i *rhs);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid libcrux_ml_dsa_simd_avx2_add_a2(__m256i *lhs, const __m256i *rhs);\n\nvoid libcrux_ml_dsa_simd_avx2_arithmetic_subtract(__m256i *lhs, const __m256i *rhs);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid libcrux_ml_dsa_simd_avx2_subtract_a2(__m256i *lhs, const __m256i *rhs);\n\nbool\nlibcrux_ml_dsa_simd_avx2_arithmetic_infinity_norm_exceeds(\n  const __m256i *simd_unit,\n  int32_t bound\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nbool\nlibcrux_ml_dsa_simd_avx2_infinity_norm_exceeds_a2(const __m256i *simd_unit, int32_t bound);\n\n__m256i libcrux_ml_dsa_simd_avx2_arithmetic_to_unsigned_representatives_ret(const __m256i *t);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_arithmetic_decompose(\n  int32_t gamma2,\n  const __m256i *r,\n  __m256i *r0,\n  __m256i *r1\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_decompose_a2(\n  int32_t gamma2,\n  const __m256i *simd_unit,\n  __m256i *low,\n  __m256i *high\n);\n\nsize_t\nlibcrux_ml_dsa_simd_avx2_arithmetic_compute_hint(\n  const __m256i *low,\n  const __m256i *high,\n  int32_t gamma2,\n  __m256i *hint\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nsize_t\nlibcrux_ml_dsa_simd_avx2_compute_hint_a2(\n  const __m256i *low,\n  const __m256i *high,\n  int32_t gamma2,\n  __m256i *hint\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_arithmetic_use_hint(int32_t gamma2, const __m256i *r, __m256i *hint);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_use_hint_a2(int32_t gamma2, const __m256i *simd_unit, __m256i *hint);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_aux(\n  __m256i field_modulus,\n  __m256i inverse_of_modulus_mod_montgomery_r,\n  __m256i *lhs,\n  const __m256i *rhs\n);\n\nvoid libcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply(__m256i *lhs, const __m256i *rhs);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid libcrux_ml_dsa_simd_avx2_montgomery_multiply_a2(__m256i *lhs, const __m256i *rhs);\n\nvoid libcrux_ml_dsa_simd_avx2_arithmetic_to_unsigned_representatives(__m256i *t);\n\nvoid libcrux_ml_dsa_simd_avx2_arithmetic_power2round(__m256i *r0, __m256i *r1);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid libcrux_ml_dsa_simd_avx2_power2round_a2(__m256i *t0, __m256i *t1);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_REJECTION_SAMPLE_LESS_THAN_FIELD_MODULUS_BYTESTREAM_TO_POTENTIAL_COEFFICIENTS_COEFFICIENT_MASK (((int32_t)1 << 23U) - (int32_t)1)\n\n__m256i\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_field_modulus_bytestream_to_potential_coefficients(\n  Eurydice_borrow_slice_u8 serialized\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_REJECTION_SAMPLE_SHUFFLE_TABLE_SHUFFLE_TABLE ((KRML_CLITERAL(Eurydice_arr_0e){ .data = { { .data = { 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U } }, { .data = { 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U } } } }))\n\nsize_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_field_modulus_sample(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_dst_ref_mut_fc output\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nsize_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_field_modulus_a2(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_ERROR_DESERIALIZE_TO_UNSIGNED_WHEN_ETA_IS_4_COEFFICIENT_MASK (((int32_t)1 << 4U) - (int32_t)1)\n\n__m256i\nlibcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned_when_eta_is_4(\n  Eurydice_borrow_slice_u8 bytes\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_ERROR_DESERIALIZE_TO_UNSIGNED_WHEN_ETA_IS_2_COEFFICIENT_MASK (((int32_t)1 << 3U) - (int32_t)1)\n\n__m256i\nlibcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned_when_eta_is_2(\n  Eurydice_borrow_slice_u8 bytes\n);\n\n__m256i\nlibcrux_ml_dsa_simd_avx2_encoding_error_deserialize_to_unsigned(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 serialized\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.rejection_sample.less_than_eta.shift_interval\nwith const generics\n- ETA= 2\n*/\n__m256i\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_shift_interval_fd(__m256i coefficients);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.rejection_sample.less_than_eta.sample\nwith const generics\n- ETA= 2\n*/\nsize_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_sample_fd(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_dst_ref_mut_fc output\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nsize_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_equals_2_a2(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.rejection_sample.less_than_eta.shift_interval\nwith const generics\n- ETA= 4\n*/\n__m256i\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_shift_interval_ac(__m256i coefficients);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.rejection_sample.less_than_eta.sample\nwith const generics\n- ETA= 4\n*/\nsize_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_sample_ac(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_dst_ref_mut_fc output\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nsize_t\nlibcrux_ml_dsa_simd_avx2_rejection_sample_less_than_eta_equals_4_a2(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_2_POW_19 ((int32_t)1 << 19U)\n\n__m256i\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_19_aux(\n  __m256i simd_unit_shifted\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_19(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_2_POW_17 ((int32_t)1 << 17U)\n\n__m256i\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_17_aux(\n  __m256i simd_unit_shifted\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize_when_gamma1_is_2_pow_17(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_serialize(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized,\n  size_t gamma1_exponent\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_gamma1_serialize_a2(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized,\n  size_t gamma1_exponent\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_17 ((int32_t)1 << 17U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_17_TIMES_2_MASK ((LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_17 << 1U) - (int32_t)1)\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_deserialize_when_gamma1_is_2_pow_17_unsigned(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_19 ((int32_t)1 << 19U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_19_TIMES_2_MASK ((LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_GAMMA1_GAMMA1_19 << 1U) - (int32_t)1)\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_deserialize_when_gamma1_is_2_pow_19_unsigned(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_gamma1_deserialize(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out,\n  size_t gamma1_exponent\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_gamma1_deserialize_a2(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out,\n  size_t gamma1_exponent\n);\n\n__m128i libcrux_ml_dsa_simd_avx2_encoding_commitment_serialize_4(const __m256i *simd_unit);\n\n__m256i libcrux_ml_dsa_simd_avx2_encoding_commitment_serialize_6(const __m256i *simd_unit);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_commitment_serialize(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_commitment_serialize_a2(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_ERROR_ETA_4 ((int32_t)4)\n\n__m128i\nlibcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_4_aux(__m256i simd_unit_shifted);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_4(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_ERROR_ETA_2 ((int32_t)2)\n\n__m128i\nlibcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_2_aux(__m256i simd_unit_shifted);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_error_serialize_when_eta_is_2(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_error_serialize(\n  libcrux_ml_dsa_constants_Eta eta,\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_error_serialize_a2(\n  libcrux_ml_dsa_constants_Eta eta,\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_error_deserialize(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_error_deserialize_a2(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_T0_POW_2_BITS_IN_LOWER_PART_OF_T_MINUS_ONE ((int32_t)1 << (uint32_t)(LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T - (size_t)1U))\n\n__m256i libcrux_ml_dsa_simd_avx2_encoding_t0_change_interval(const __m256i *simd_unit);\n\n__m128i libcrux_ml_dsa_simd_avx2_encoding_t0_serialize_aux(__m256i simd_unit);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_t0_serialize(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_t0_serialize_a2(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_T0_DESERIALIZE_UNSIGNED_COEFFICIENT_MASK (((int32_t)1 << 13U) - (int32_t)1)\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_t0_deserialize_unsigned(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_t0_deserialize(\n  Eurydice_borrow_slice_u8 serialized,\n  __m256i *out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_t0_deserialize_a2(Eurydice_borrow_slice_u8 serialized, __m256i *out);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_t1_serialize(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_t1_serialize_a2(\n  const __m256i *simd_unit,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_ENCODING_T1_DESERIALIZE_COEFFICIENT_MASK (((int32_t)1 << 10U) - (int32_t)1)\n\nvoid\nlibcrux_ml_dsa_simd_avx2_encoding_t1_deserialize(Eurydice_borrow_slice_u8 bytes, __m256i *out);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_t1_deserialize_a2(Eurydice_borrow_slice_u8 serialized, __m256i *out);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n- $32size_t\n*/\ntypedef struct Eurydice_arr_cd0_s { __m256i data[32U]; } Eurydice_arr_cd0;\n\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6_mul(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  __m256i zeta,\n  size_t step_by,\n  __m256i field_modulus,\n  __m256i inverse_of_modulus_mod_montgomery_r\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_7 ((size_t)16U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_7_AND_6_STEP_BY_6 ((size_t)8U)\n\n/**\n This is equivalent to the pqclean 0 and 1\n\n This does 32 Montgomery multiplications (192 multiplications).\n This is the same as in pqclean. The only difference is locality of registers.\n*/\nvoid libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_7_and_6(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.ntt.ntt_at_layer_5_to_3.round\nwith const generics\n- STEP= 32\n- STEP_BY= 4\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_f6(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.ntt.ntt_at_layer_5_to_3.round\nwith const generics\n- STEP= 16\n- STEP_BY= 2\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_90(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.ntt.ntt_at_layer_5_to_3.round\nwith const generics\n- STEP= 8\n- STEP_BY= 1\n*/\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3_round_7b(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta\n);\n\n/**\n Layer 5, 4, 3\n\n Each layer does 16 Montgomery multiplications -> 3*16 = 48 total\n pqclean does 4 * 4 on each layer -> 48 total | plus 4 * 4 shuffles every time (48)\n*/\nvoid libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_5_to_3(Eurydice_arr_cd0 *re);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_butterfly_8(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta0,\n  int32_t zeta1\n);\n\nvoid libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_2(Eurydice_arr_cd0 *re);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_butterfly_4(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta_a0,\n  int32_t zeta_a1,\n  int32_t zeta_b0,\n  int32_t zeta_b1\n);\n\nvoid libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_1(Eurydice_arr_cd0 *re);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_ntt_butterfly_2(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta_a0,\n  int32_t zeta_a1,\n  int32_t zeta_a2,\n  int32_t zeta_a3,\n  int32_t zeta_b0,\n  int32_t zeta_b1,\n  int32_t zeta_b2,\n  int32_t zeta_b3\n);\n\nvoid libcrux_ml_dsa_simd_avx2_ntt_ntt_at_layer_0(Eurydice_arr_cd0 *re);\n\nvoid libcrux_ml_dsa_simd_avx2_ntt_ntt_avx2_ntt(Eurydice_arr_cd0 *re);\n\nvoid libcrux_ml_dsa_simd_avx2_ntt_ntt(Eurydice_arr_cd0 *re);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid libcrux_ml_dsa_simd_avx2_ntt_a2(Eurydice_arr_cd0 *simd_units);\n\ntypedef struct libcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2_s\n{\n  __m256i fst;\n  __m256i snd;\n}\nlibcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2;\n\nlibcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2\nlibcrux_ml_dsa_simd_avx2_invntt_simd_unit_invert_ntt_at_layer_0(\n  __m256i simd_unit0,\n  __m256i simd_unit1,\n  int32_t zeta00,\n  int32_t zeta01,\n  int32_t zeta02,\n  int32_t zeta03,\n  int32_t zeta10,\n  int32_t zeta11,\n  int32_t zeta12,\n  int32_t zeta13\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0_round(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta00,\n  int32_t zeta01,\n  int32_t zeta02,\n  int32_t zeta03,\n  int32_t zeta10,\n  int32_t zeta11,\n  int32_t zeta12,\n  int32_t zeta13\n);\n\nvoid libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_0(Eurydice_arr_cd0 *re);\n\nlibcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2\nlibcrux_ml_dsa_simd_avx2_invntt_simd_unit_invert_ntt_at_layer_1(\n  __m256i simd_unit0,\n  __m256i simd_unit1,\n  int32_t zeta00,\n  int32_t zeta01,\n  int32_t zeta10,\n  int32_t zeta11\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1_round(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta_00,\n  int32_t zeta_01,\n  int32_t zeta_10,\n  int32_t zeta_11\n);\n\nvoid libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_1(Eurydice_arr_cd0 *re);\n\nlibcrux_ml_dsa_simd_avx2_vector_type_Vec256_x2\nlibcrux_ml_dsa_simd_avx2_invntt_simd_unit_invert_ntt_at_layer_2(\n  __m256i simd_unit0,\n  __m256i simd_unit1,\n  int32_t zeta0,\n  int32_t zeta1\n);\n\nvoid\nlibcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2_round(\n  Eurydice_arr_cd0 *re,\n  size_t index,\n  int32_t zeta1,\n  int32_t zeta2\n);\n\nvoid libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_2(Eurydice_arr_cd0 *re);\n\n__m256i\nlibcrux_ml_dsa_simd_avx2_arithmetic_montgomery_multiply_by_constant(\n  __m256i lhs,\n  int32_t constant\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 1\n- ZETA= 280005\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_99(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 2\n- STEP_BY= 1\n- ZETA= 4010497\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_1c(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 4\n- STEP_BY= 1\n- ZETA= -19422\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_6b(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 6\n- STEP_BY= 1\n- ZETA= 1757237\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_44(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 1\n- ZETA= -3277672\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a8(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 10\n- STEP_BY= 1\n- ZETA= -1399561\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_1f(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 12\n- STEP_BY= 1\n- ZETA= -3859737\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_95(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 14\n- STEP_BY= 1\n- ZETA= -2118186\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3b(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 1\n- ZETA= -2108549\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 18\n- STEP_BY= 1\n- ZETA= 2619752\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_e4(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 20\n- STEP_BY= 1\n- ZETA= -1119584\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_de(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 22\n- STEP_BY= 1\n- ZETA= -549488\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_05(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 1\n- ZETA= 3585928\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_d9(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 26\n- STEP_BY= 1\n- ZETA= -1079900\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3a(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 28\n- STEP_BY= 1\n- ZETA= 1024112\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3b0(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 30\n- STEP_BY= 1\n- ZETA= 2725464\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a0(Eurydice_arr_cd0 *re);\n\nvoid libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_3(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 2\n- ZETA= 2680103\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_990(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 4\n- STEP_BY= 2\n- ZETA= 3111497\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_6b0(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 2\n- ZETA= -2884855\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a80(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 12\n- STEP_BY= 2\n- ZETA= 3119733\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_950(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 2\n- ZETA= -2091905\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a0(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 20\n- STEP_BY= 2\n- ZETA= -359251\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_de0(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 2\n- ZETA= 2353451\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_d90(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 28\n- STEP_BY= 2\n- ZETA= 1826347\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_3b1(Eurydice_arr_cd0 *re);\n\nvoid libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_4(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 4\n- ZETA= 466468\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_991(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 4\n- ZETA= -876248\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_a81(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 4\n- ZETA= -777960\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a1(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 4\n- ZETA= 237124\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_d91(Eurydice_arr_cd0 *re);\n\nvoid libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_5(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 8\n- ZETA= -518909\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_992(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 8\n- ZETA= -2608894\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_7a2(Eurydice_arr_cd0 *re);\n\nvoid libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_6(Eurydice_arr_cd0 *re);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 16\n- ZETA= 25847\n*/\nvoid libcrux_ml_dsa_simd_avx2_invntt_outer_3_plus_993(Eurydice_arr_cd0 *re);\n\nvoid libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_at_layer_7(Eurydice_arr_cd0 *re);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_MONTGOMERY_INV_INNER_FACTOR ((int32_t)41978)\n\nvoid libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_montgomery_inv_inner(Eurydice_arr_cd0 *re);\n\nvoid libcrux_ml_dsa_simd_avx2_invntt_invert_ntt_montgomery(Eurydice_arr_cd0 *re);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid libcrux_ml_dsa_simd_avx2_invert_ntt_montgomery_a2(Eurydice_arr_cd0 *simd_units);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.arithmetic.shift_left_then_reduce\nwith const generics\n- SHIFT_BY= 0\n*/\nvoid libcrux_ml_dsa_simd_avx2_arithmetic_shift_left_then_reduce_c3(__m256i *simd_unit);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\nvoid libcrux_ml_dsa_simd_avx2_reduce_a2(Eurydice_arr_cd0 *simd_units);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_4b, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_2a_s\n{\n  Eurydice_arr_cd0 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_2a;\n\n/**\nThis function found in impl {libcrux_ml_dsa::samplex4::X4Sampler for libcrux_ml_dsa::samplex4::avx2::AVX2Sampler}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.samplex4.avx2.matrix_flat.inner_e8\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_samplex4_avx2_matrix_flat_inner_e8_64(\n  size_t columns,\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_mut_2a matrix\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::samplex4::X4Sampler for libcrux_ml_dsa::samplex4::avx2::AVX2Sampler}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.samplex4.avx2.matrix_flat_e8\nwith types libcrux_ml_dsa_simd_avx2_vector_type_Vec256\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_samplex4_avx2_matrix_flat_e8_64(\n  size_t columns,\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_mut_2a matrix\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256\nwith const generics\n- OUTPUT_LENGTH= 64\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_shake256_24(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_060 *out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_8c\nwith const generics\n- OUTPUT_LENGTH= 64\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_shake256_8c_24(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_060 *out\n);\n\n/**\n Key Generation.\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_generate_key_pair__inner(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n);\n\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_x4\nwith const generics\n- OUT_LEN= 576\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_shake256_x4_1b(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_5f0 *out0,\n  Eurydice_arr_5f0 *out1,\n  Eurydice_arr_5f0 *out2,\n  Eurydice_arr_5f0 *out3\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake256x4}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_x4_ad\nwith const generics\n- OUT_LEN= 576\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_shake256_x4_ad_1b(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_5f0 *out0,\n  Eurydice_arr_5f0 *out1,\n  Eurydice_arr_5f0 *out2,\n  Eurydice_arr_5f0 *out3\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_x4\nwith const generics\n- OUT_LEN= 640\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_shake256_x4_c8(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_c30 *out0,\n  Eurydice_arr_c30 *out1,\n  Eurydice_arr_c30 *out2,\n  Eurydice_arr_c30 *out3\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::simd256::Shake256x4}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_x4_ad\nwith const generics\n- OUT_LEN= 640\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_shake256_x4_ad_c8(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_c30 *out0,\n  Eurydice_arr_c30 *out1,\n  Eurydice_arr_c30 *out2,\n  Eurydice_arr_c30 *out3\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256\nwith const generics\n- OUTPUT_LENGTH= 640\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_shake256_c8(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_c30 *out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_8c\nwith const generics\n- OUTPUT_LENGTH= 640\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_shake256_8c_c8(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_c30 *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256\nwith const generics\n- OUTPUT_LENGTH= 576\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_shake256_1b(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_5f0 *out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::simd256::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.simd256.shake256_8c\nwith const generics\n- OUTPUT_LENGTH= 576\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_simd256_shake256_8c_1b(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_5f0 *out\n);\n\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign__inner(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Sign.\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_mut__inner(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n);\n\n/**\n Sign.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_mut(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n);\n\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_pre_hashed_shake128__inner(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Sign (pre-hashed).\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_sign_pre_hashed_shake128(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.arithmetic.shift_left_then_reduce\nwith const generics\n- SHIFT_BY= 13\n*/\nvoid libcrux_ml_dsa_simd_avx2_arithmetic_shift_left_then_reduce_84(__m256i *simd_unit);\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.avx2.shift_left_then_reduce_a2\nwith const generics\n- SHIFT_BY= 13\n*/\nvoid libcrux_ml_dsa_simd_avx2_shift_left_then_reduce_a2_84(__m256i *simd_unit);\n\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify__inner(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n);\n\n/**\n Verify.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n);\n\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify_pre_hashed_shake128__inner(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_400 *signature\n);\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_44_verify_pre_hashed_shake128(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_400 *signature\n);\n\n/**\n Key Generation.\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_generate_key_pair__inner(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n);\n\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n);\n\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign__inner(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Sign.\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_mut__inner(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n);\n\n/**\n Sign.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_mut(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n);\n\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_pre_hashed_shake128__inner(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Sign (pre-hashed).\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_sign_pre_hashed_shake128(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n);\n\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify__inner(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n);\n\n/**\n Verify.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n);\n\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify_pre_hashed_shake128__inner(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_96 *signature\n);\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_65_verify_pre_hashed_shake128(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_96 *signature\n);\n\n/**\n Key Generation.\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_generate_key_pair__inner(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n);\n\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n);\n\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign__inner(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Sign.\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_mut__inner(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n);\n\n/**\n Sign.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_mut(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n);\n\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_pre_hashed_shake128__inner(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Sign (pre-hashed).\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_sign_pre_hashed_shake128(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n);\n\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify__inner(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n);\n\n/**\n Verify.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n);\n\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify_pre_hashed_shake128__inner(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_38 *signature\n);\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_avx2_ml_dsa_87_verify_pre_hashed_shake128(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_38 *signature\n);\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_AT_LAYER_3_STEP ((size_t)8U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_AT_LAYER_3_STEP_BY ((size_t)1U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_AT_LAYER_4_STEP ((size_t)16U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_AT_LAYER_4_STEP_BY ((size_t)2U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_AT_LAYER_5_STEP ((size_t)32U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_AT_LAYER_5_STEP_BY ((size_t)4U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_AT_LAYER_6_STEP ((size_t)64U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_AT_LAYER_6_STEP_BY ((size_t)8U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_AT_LAYER_7_STEP ((size_t)128U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_INVERT_NTT_AT_LAYER_7_STEP_BY ((size_t)16U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_INVNTT_SIMD_UNIT_INVERT_NTT_AT_LAYER_0_SHUFFLE ((int32_t)216)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_NTT_BUTTERFLY_2_SHUFFLE ((int32_t)216)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_5_TO_3_STEP ((size_t)1U << 5U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_5_TO_3_STEP_1 ((size_t)1U << 4U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_5_TO_3_STEP_2 ((size_t)1U << 3U)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_5_TO_3_STEP_BY (LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_5_TO_3_STEP / LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_5_TO_3_STEP_BY_1 (LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_5_TO_3_STEP_1 / LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT)\n\n#define LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_5_TO_3_STEP_BY_2 (LIBCRUX_ML_DSA_SIMD_AVX2_NTT_NTT_AT_LAYER_5_TO_3_STEP_2 / LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT)\n\nbool\nlibcrux_ml_dsa_simd_avx2_rejection_sample_shuffle_table_is_bit_set(\n  size_t number,\n  uint8_t bit_position\n);\n\nEurydice_arr_0e\nlibcrux_ml_dsa_simd_avx2_rejection_sample_shuffle_table_generate_shuffle_table(void);\n\ntypedef Eurydice_arr_cd0 libcrux_ml_dsa_simd_avx2_vector_type_AVX2RingElement;\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_dsa::simd::avx2::vector_type::Vec256}\n*/\n__m256i libcrux_ml_dsa_simd_avx2_vector_type_clone_be(const __m256i *self);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mldsa_avx2_H_DEFINED\n#endif /* libcrux_mldsa_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa_core.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mldsa_core.h\"\n\nextern uint8_t\ncore_ops_bit__core__ops__bit__BitAnd_u8__u8__for__0__u8___bitand(const uint8_t *x0, uint8_t x1);\n\nextern uint8_t\ncore_ops_bit__core__ops__bit__Shr_i32__u8__for__0__u8___shr(const uint8_t *x0, int32_t x1);\n\nint32_t\nlibcrux_ml_dsa_constants_beta(\n  size_t ones_in_verifier_challenge,\n  libcrux_ml_dsa_constants_Eta eta\n)\n{\n  size_t eta_val;\n  switch (eta)\n  {\n    case libcrux_ml_dsa_constants_Eta_Two:\n      {\n        eta_val = (size_t)2U;\n        break;\n      }\n    case libcrux_ml_dsa_constants_Eta_Four:\n      {\n        eta_val = (size_t)4U;\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  return (int32_t)(ones_in_verifier_challenge * eta_val);\n}\n\nsize_t\nlibcrux_ml_dsa_constants_commitment_ring_element_size(size_t bits_per_commitment_coefficient)\n{\n  return\n    bits_per_commitment_coefficient * LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT /\n      (size_t)8U;\n}\n\nsize_t libcrux_ml_dsa_constants_error_ring_element_size(size_t bits_per_error_coefficient)\n{\n  return\n    bits_per_error_coefficient * LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)8U;\n}\n\nsize_t libcrux_ml_dsa_constants_gamma1_ring_element_size(size_t bits_per_gamma1_coefficient)\n{\n  return\n    bits_per_gamma1_coefficient * LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT /\n      (size_t)8U;\n}\n\nsize_t\nlibcrux_ml_dsa_constants_signature_size(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  size_t max_ones_in_hint,\n  size_t commitment_hash_size,\n  size_t bits_per_gamma1_coefficient\n)\n{\n  return\n    commitment_hash_size +\n      columns_in_a * libcrux_ml_dsa_constants_gamma1_ring_element_size(bits_per_gamma1_coefficient)\n    + max_ones_in_hint\n    + rows_in_a;\n}\n\nsize_t libcrux_ml_dsa_constants_verification_key_size(size_t rows_in_a)\n{\n  return\n    LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE +\n      LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * rows_in_a *\n        (LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS_MINUS_ONE_BIT_LENGTH -\n          LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T)\n      / (size_t)8U;\n}\n\nsize_t libcrux_ml_dsa_encoding_error_chunk_size(libcrux_ml_dsa_constants_Eta eta)\n{\n  switch (eta)\n  {\n    case libcrux_ml_dsa_constants_Eta_Two:\n      {\n        break;\n      }\n    case libcrux_ml_dsa_constants_Eta_Four:\n      {\n        return (size_t)4U;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  return (size_t)3U;\n}\n\nvoid\nlibcrux_ml_dsa_encoding_signature_set_hint(\n  Eurydice_dst_ref_mut_22 out_hint,\n  size_t i,\n  size_t j\n)\n{\n  out_hint.ptr[i].data[j] = (int32_t)1;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 66\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_mut_36(Eurydice_arr_a2 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\nEurydice_arr_a2\nlibcrux_ml_dsa_sample_add_error_domain_separator(\n  Eurydice_borrow_slice_u8 slice,\n  uint16_t domain_separator\n)\n{\n  Eurydice_arr_a2 out = { .data = { 0U } };\n  Eurydice_slice_copy(array_to_subslice_mut_36(&out,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  out.data[64U] = (uint8_t)domain_separator;\n  out.data[65U] = (uint8_t)((uint32_t)domain_separator >> 8U);\n  return out;\n}\n\nuint8_t_x2\nlibcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(size_t index, size_t width)\n{\n  return\n    (KRML_CLITERAL(uint8_t_x2){ .fst = (uint8_t)(index / width), .snd = (uint8_t)(index % width) });\n}\n\nstatic KRML_MUSTINLINE uint16_t generate_domain_separator(uint8_t_x2 _)\n{\n  uint8_t row = _.fst;\n  uint8_t column = _.snd;\n  return (uint32_t)(uint16_t)column | (uint32_t)(uint16_t)row << 8U;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 34\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_mut_360(Eurydice_arr_48 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\nEurydice_arr_48\nlibcrux_ml_dsa_sample_add_domain_separator(Eurydice_borrow_slice_u8 slice, uint8_t_x2 indices)\n{\n  Eurydice_arr_48 out = { .data = { 0U } };\n  Eurydice_slice_copy(array_to_subslice_mut_360(&out,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  uint16_t domain_separator = generate_domain_separator(indices);\n  out.data[32U] = (uint8_t)domain_separator;\n  out.data[33U] = (uint8_t)((uint32_t)domain_separator >> 8U);\n  return out;\n}\n\n/**\n `context` must be at most 255 bytes long.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::pre_hash::DomainSeparationContext<'a>}\n*/\ncore_result_Result_a8\nlibcrux_ml_dsa_pre_hash_new_88(\n  Eurydice_borrow_slice_u8 context,\n  core_option_Option_b5 pre_hash_oid\n)\n{\n  if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_a8){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = { .context = context, .pre_hash_oid = pre_hash_oid } }\n        }\n      );\n  }\n  return\n    (\n      KRML_CLITERAL(core_result_Result_a8){\n        .tag = core_result_Err,\n        .val = { .case_Err = libcrux_ml_dsa_pre_hash_DomainSeparationError_ContextTooLongError }\n      }\n    );\n}\n\n/**\n Returns the pre-hash OID, if any.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::pre_hash::DomainSeparationContext<'a>}\n*/\nconst\ncore_option_Option_b5\n*libcrux_ml_dsa_pre_hash_pre_hash_oid_88(\n  const libcrux_ml_dsa_pre_hash_DomainSeparationContext *self\n)\n{\n  return &self->pre_hash_oid;\n}\n\n/**\n Returns the context, guaranteed to be at most 255 bytes long.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::pre_hash::DomainSeparationContext<'a>}\n*/\nEurydice_borrow_slice_u8\nlibcrux_ml_dsa_pre_hash_context_88(const libcrux_ml_dsa_pre_hash_DomainSeparationContext *self)\n{\n  return self->context;\n}\n\nbool\nlibcrux_ml_dsa_sample_inside_out_shuffle(\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *out_index,\n  uint64_t *signs,\n  Eurydice_arr_c3 *result\n)\n{\n  bool done = false;\n  for (size_t i = (size_t)0U; i < randomness.meta; i++)\n  {\n    size_t _cloop_j = i;\n    const uint8_t *byte = &randomness.ptr[_cloop_j];\n    if (!done)\n    {\n      size_t sample_at = (size_t)byte[0U];\n      if (sample_at <= out_index[0U])\n      {\n        result->data[out_index[0U]] = result->data[sample_at];\n        out_index[0U] = out_index[0U] + (size_t)1U;\n        result->data[sample_at] = (int32_t)1 - (int32_t)2 * (int32_t)(signs[0U] & 1ULL);\n        signs[0U] = signs[0U] >> 1U;\n      }\n      done = out_index[0U] == (size_t)256U;\n    }\n  }\n  return done;\n}\n\n#define SHAKE128_OID ((KRML_CLITERAL(Eurydice_arr_cb){ .data = { 6U, 9U, 96U, 134U, 72U, 1U, 101U, 3U, 4U, 2U, 11U } }))\n\n/**\nThis function found in impl {libcrux_ml_dsa::pre_hash::PreHash for libcrux_ml_dsa::pre_hash::SHAKE128_PH}\n*/\nEurydice_arr_cb libcrux_ml_dsa_pre_hash_oid_30(void)\n{\n  return SHAKE128_OID;\n}\n\nstatic KRML_MUSTINLINE Eurydice_arr_d4 zero(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_d4){ .data = { 0U } });\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic Eurydice_arr_d4 zero_65(void)\n{\n  return zero();\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types int32_t\nwith const generics\n- N= 8\n*/\nstatic Eurydice_dst_ref_mut_fc array_to_slice_mut_a7(Eurydice_arr_d4 *a)\n{\n  Eurydice_dst_ref_mut_fc lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_shared\nwith types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t\n\n*/\nEurydice_dst_ref_shared_fc\nEurydice_slice_subslice_shared_46(Eurydice_dst_ref_shared_fc s, core_ops_range_Range_08 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_dst_ref_shared_fc){ .ptr = s.ptr + r.start, .meta = r.end - r.start });\n}\n\nstatic KRML_MUSTINLINE void\nfrom_coefficient_array(Eurydice_dst_ref_shared_fc array, Eurydice_arr_d4 *out)\n{\n  Eurydice_slice_copy(array_to_slice_mut_a7(out),\n    Eurydice_slice_subslice_shared_46(array,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT\n        }\n      )),\n    int32_t);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void from_coefficient_array_65(Eurydice_dst_ref_shared_fc array, Eurydice_arr_d4 *out)\n{\n  from_coefficient_array(array, out);\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types int32_t\nwith const generics\n- N= 8\n*/\nstatic Eurydice_dst_ref_shared_fc array_to_slice_shared_a7(const Eurydice_arr_d4 *a)\n{\n  Eurydice_dst_ref_shared_fc lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\nstatic KRML_MUSTINLINE void\nto_coefficient_array(const Eurydice_arr_d4 *value, Eurydice_dst_ref_mut_fc out)\n{\n  Eurydice_slice_copy(out, array_to_slice_shared_a7(value), int32_t);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void to_coefficient_array_65(const Eurydice_arr_d4 *value, Eurydice_dst_ref_mut_fc out)\n{\n  to_coefficient_array(value, out);\n}\n\nstatic KRML_MUSTINLINE void add(Eurydice_arr_d4 *lhs, const Eurydice_arr_d4 *rhs)\n{\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    size_t uu____0 = i0;\n    lhs->data[uu____0] = lhs->data[uu____0] + rhs->data[i0];);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void add_65(Eurydice_arr_d4 *lhs, const Eurydice_arr_d4 *rhs)\n{\n  add(lhs, rhs);\n}\n\nstatic KRML_MUSTINLINE void subtract(Eurydice_arr_d4 *lhs, const Eurydice_arr_d4 *rhs)\n{\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    size_t uu____0 = i0;\n    lhs->data[uu____0] = lhs->data[uu____0] - rhs->data[i0];);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void subtract_65(Eurydice_arr_d4 *lhs, const Eurydice_arr_d4 *rhs)\n{\n  subtract(lhs, rhs);\n}\n\nstatic KRML_MUSTINLINE bool\ninfinity_norm_exceeds(const Eurydice_arr_d4 *simd_unit, int32_t bound)\n{\n  bool result = false;\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    int32_t coefficient = simd_unit->data[i0];\n    int32_t sign = coefficient >> 31U;\n    int32_t normalized = coefficient - (sign & (int32_t)2 * coefficient);\n    bool uu____0;\n    if (result)\n    {\n      uu____0 = true;\n    }\n    else\n    {\n      uu____0 = normalized >= bound;\n    }\n    result = uu____0;);\n  return result;\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic bool infinity_norm_exceeds_65(const Eurydice_arr_d4 *simd_unit, int32_t bound)\n{\n  return infinity_norm_exceeds(simd_unit, bound);\n}\n\ntypedef struct int32_t_x2_s\n{\n  int32_t fst;\n  int32_t snd;\n}\nint32_t_x2;\n\nstatic KRML_MUSTINLINE int32_t_x2 decompose_element(int32_t gamma2, int32_t r)\n{\n  int32_t r0 = r + (r >> 31U & LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS);\n  int32_t ceil_of_r_by_128 = (r0 + (int32_t)127) >> 7U;\n  int32_t r1;\n  switch (gamma2)\n  {\n    case 95232:\n      {\n        int32_t result = (ceil_of_r_by_128 * (int32_t)11275 + ((int32_t)1 << 23U)) >> 24U;\n        int32_t result_0 = (result ^ ((int32_t)43 - result) >> 31U) & result;\n        r1 = result_0;\n        break;\n      }\n    case 261888:\n      {\n        int32_t result = (ceil_of_r_by_128 * (int32_t)1025 + ((int32_t)1 << 21U)) >> 22U;\n        int32_t result_0 = result & (int32_t)15;\n        r1 = result_0;\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  int32_t alpha = gamma2 * (int32_t)2;\n  int32_t r00 = r0 - r1 * alpha;\n  r00 =\n    r00 -\n      (((LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS - (int32_t)1) / (int32_t)2 - r00) >> 31U &\n        LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS);\n  return (KRML_CLITERAL(int32_t_x2){ .fst = r00, .snd = r1 });\n}\n\nstatic KRML_MUSTINLINE void\ndecompose(\n  int32_t gamma2,\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_arr_d4 *low,\n  Eurydice_arr_d4 *high\n)\n{\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    int32_t_x2 uu____0 = decompose_element(gamma2, simd_unit->data[i0]);\n    int32_t uu____1 = uu____0.snd;\n    low->data[i0] = uu____0.fst;\n    high->data[i0] = uu____1;);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void\ndecompose_65(\n  int32_t gamma2,\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_arr_d4 *low,\n  Eurydice_arr_d4 *high\n)\n{\n  decompose(gamma2, simd_unit, low, high);\n}\n\nstatic KRML_MUSTINLINE int32_t compute_one_hint(int32_t low, int32_t high, int32_t gamma2)\n{\n  int32_t uu____0;\n  if (low > gamma2)\n  {\n    uu____0 = (int32_t)1;\n  }\n  else if (low < -gamma2)\n  {\n    uu____0 = (int32_t)1;\n  }\n  else if (low == -gamma2)\n  {\n    if (high != (int32_t)0)\n    {\n      uu____0 = (int32_t)1;\n    }\n    else\n    {\n      uu____0 = (int32_t)0;\n    }\n  }\n  else\n  {\n    uu____0 = (int32_t)0;\n  }\n  return uu____0;\n}\n\nstatic KRML_MUSTINLINE size_t\ncompute_hint(\n  const Eurydice_arr_d4 *low,\n  const Eurydice_arr_d4 *high,\n  int32_t gamma2,\n  Eurydice_arr_d4 *hint\n)\n{\n  size_t one_hints_count = (size_t)0U;\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    hint->data[i0] = compute_one_hint(low->data[i0], high->data[i0], gamma2);\n    one_hints_count = one_hints_count + (size_t)hint->data[i0];);\n  return one_hints_count;\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic size_t\ncompute_hint_65(\n  const Eurydice_arr_d4 *low,\n  const Eurydice_arr_d4 *high,\n  int32_t gamma2,\n  Eurydice_arr_d4 *hint\n)\n{\n  return compute_hint(low, high, gamma2, hint);\n}\n\nstatic KRML_MUSTINLINE int32_t use_one_hint(int32_t gamma2, int32_t r, int32_t hint)\n{\n  int32_t_x2 uu____0 = decompose_element(gamma2, r);\n  int32_t r0 = uu____0.fst;\n  int32_t r1 = uu____0.snd;\n  int32_t uu____1;\n  if (!(hint == (int32_t)0))\n  {\n    switch (gamma2)\n    {\n      case 95232:\n        {\n          if (r0 > (int32_t)0)\n          {\n            if (r1 == (int32_t)43)\n            {\n              uu____1 = (int32_t)0;\n            }\n            else\n            {\n              uu____1 = r1 + hint;\n            }\n          }\n          else if (r1 == (int32_t)0)\n          {\n            uu____1 = (int32_t)43;\n          }\n          else\n          {\n            uu____1 = r1 - hint;\n          }\n          break;\n        }\n      case 261888:\n        {\n          if (r0 > (int32_t)0)\n          {\n            uu____1 = (r1 + hint) & (int32_t)15;\n          }\n          else\n          {\n            uu____1 = (r1 - hint) & (int32_t)15;\n          }\n          break;\n        }\n      default:\n        {\n          KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n          KRML_HOST_EXIT(255U);\n        }\n    }\n    return uu____1;\n  }\n  return r1;\n}\n\nstatic KRML_MUSTINLINE void\nuse_hint(int32_t gamma2, const Eurydice_arr_d4 *simd_unit, Eurydice_arr_d4 *hint)\n{\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    int32_t uu____0 = use_one_hint(gamma2, simd_unit->data[i0], hint->data[i0]);\n    hint->data[i0] = uu____0;);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void\nuse_hint_65(int32_t gamma2, const Eurydice_arr_d4 *simd_unit, Eurydice_arr_d4 *hint)\n{\n  use_hint(gamma2, simd_unit, hint);\n}\n\nstatic KRML_MUSTINLINE uint64_t get_n_least_significant_bits(uint8_t n, uint64_t value)\n{\n  return value & ((1ULL << (uint32_t)n) - 1ULL);\n}\n\n#define MONTGOMERY_SHIFT (32U)\n\nstatic KRML_MUSTINLINE int32_t montgomery_reduce_element(int64_t value)\n{\n  uint64_t\n  t =\n    get_n_least_significant_bits(MONTGOMERY_SHIFT, (uint64_t)value) *\n      LIBCRUX_ML_DSA_SIMD_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R;\n  int32_t k = (int32_t)get_n_least_significant_bits(MONTGOMERY_SHIFT, t);\n  int64_t k_times_modulus = (int64_t)k * (int64_t)LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS;\n  int32_t c = (int32_t)(k_times_modulus >> (uint32_t)MONTGOMERY_SHIFT);\n  int32_t value_high = (int32_t)(value >> (uint32_t)MONTGOMERY_SHIFT);\n  return value_high - c;\n}\n\nstatic KRML_MUSTINLINE void\nmontgomery_multiply(Eurydice_arr_d4 *lhs, const Eurydice_arr_d4 *rhs)\n{\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    lhs->data[i0] = montgomery_reduce_element((int64_t)lhs->data[i0] * (int64_t)rhs->data[i0]););\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void montgomery_multiply_65(Eurydice_arr_d4 *lhs, const Eurydice_arr_d4 *rhs)\n{\n  montgomery_multiply(lhs, rhs);\n}\n\nstatic KRML_MUSTINLINE int32_t reduce_element(int32_t fe)\n{\n  int32_t quotient = (fe + ((int32_t)1 << 22U)) >> 23U;\n  return fe - quotient * LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS;\n}\n\nstatic KRML_MUSTINLINE int32_t_x2 power2round_element(int32_t t)\n{\n  int32_t t2 = t + (t >> 31U & LIBCRUX_ML_DSA_SIMD_TRAITS_FIELD_MODULUS);\n  int32_t\n  t1 =\n    (t2 - (int32_t)1 +\n      ((int32_t)1 << (uint32_t)(LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T - (size_t)1U)))\n    >> (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T;\n  int32_t t0 = t2 - (t1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T);\n  return (KRML_CLITERAL(int32_t_x2){ .fst = t0, .snd = t1 });\n}\n\nstatic KRML_MUSTINLINE void power2round(Eurydice_arr_d4 *t0, Eurydice_arr_d4 *t1)\n{\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    int32_t_x2 uu____0 = power2round_element(t0->data[i0]);\n    int32_t uu____1 = uu____0.snd;\n    t0->data[i0] = uu____0.fst;\n    t1->data[i0] = uu____1;);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void power2round_65(Eurydice_arr_d4 *t0, Eurydice_arr_d4 *t1)\n{\n  power2round(t0, t1);\n}\n\nstatic KRML_MUSTINLINE size_t\nrejection_sample_less_than_field_modulus(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  size_t sampled = (size_t)0U;\n  for (size_t i = (size_t)0U; i < randomness.meta / (size_t)3U; i++)\n  {\n    size_t i0 = i;\n    int32_t b0 = (int32_t)randomness.ptr[i0 * (size_t)3U];\n    int32_t b1 = (int32_t)randomness.ptr[i0 * (size_t)3U + (size_t)1U];\n    int32_t b2 = (int32_t)randomness.ptr[i0 * (size_t)3U + (size_t)2U];\n    int32_t coefficient = ((b2 << 16U | b1 << 8U) | b0) & (int32_t)8388607;\n    if (coefficient < LIBCRUX_ML_DSA_CONSTANTS_FIELD_MODULUS)\n    {\n      out.ptr[sampled] = coefficient;\n      sampled++;\n    }\n  }\n  return sampled;\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic size_t\nrejection_sample_less_than_field_modulus_65(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  return rejection_sample_less_than_field_modulus(randomness, out);\n}\n\nstatic KRML_MUSTINLINE size_t\nrejection_sample_less_than_eta_equals_2(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  size_t sampled = (size_t)0U;\n  for (size_t i = (size_t)0U; i < randomness.meta; i++)\n  {\n    size_t i0 = i;\n    uint8_t byte = randomness.ptr[i0];\n    uint8_t try_0 = (uint32_t)byte & 15U;\n    uint8_t try_1 = (uint32_t)byte >> 4U;\n    if (try_0 < 15U)\n    {\n      int32_t try_00 = (int32_t)try_0;\n      int32_t try_0_mod_5 = try_00 - (try_00 * (int32_t)26 >> 7U) * (int32_t)5;\n      out.ptr[sampled] = (int32_t)2 - try_0_mod_5;\n      sampled++;\n    }\n    if (try_1 < 15U)\n    {\n      int32_t try_10 = (int32_t)try_1;\n      int32_t try_1_mod_5 = try_10 - (try_10 * (int32_t)26 >> 7U) * (int32_t)5;\n      out.ptr[sampled] = (int32_t)2 - try_1_mod_5;\n      sampled++;\n    }\n  }\n  return sampled;\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic size_t\nrejection_sample_less_than_eta_equals_2_65(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  return rejection_sample_less_than_eta_equals_2(randomness, out);\n}\n\nstatic KRML_MUSTINLINE size_t\nrejection_sample_less_than_eta_equals_4(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  size_t sampled = (size_t)0U;\n  for (size_t i = (size_t)0U; i < randomness.meta; i++)\n  {\n    size_t i0 = i;\n    uint8_t byte = randomness.ptr[i0];\n    uint8_t try_0 = (uint32_t)byte & 15U;\n    uint8_t try_1 = (uint32_t)byte >> 4U;\n    if (try_0 < 9U)\n    {\n      out.ptr[sampled] = (int32_t)4 - (int32_t)try_0;\n      sampled++;\n    }\n    if (try_1 < 9U)\n    {\n      out.ptr[sampled] = (int32_t)4 - (int32_t)try_1;\n      sampled++;\n    }\n  }\n  return sampled;\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic size_t\nrejection_sample_less_than_eta_equals_4_65(\n  Eurydice_borrow_slice_u8 randomness,\n  Eurydice_dst_ref_mut_fc out\n)\n{\n  return rejection_sample_less_than_eta_equals_4(randomness, out);\n}\n\n#define GAMMA1 ((int32_t)1 << 19U)\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t\nwith const generics\n- N= 8\n*/\nstatic Eurydice_dst_ref_shared_fc\narray_to_subslice_shared_7f(const Eurydice_arr_d4 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_shared_fc){ .ptr = a->data + r.start, .meta = r.end - r.start }\n    );\n}\n\nstatic KRML_MUSTINLINE void\nserialize_when_gamma1_is_2_pow_19(\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  for (size_t i = (size_t)0U; i < (size_t)8U / (size_t)2U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_dst_ref_shared_fc\n    coefficients =\n      array_to_subslice_shared_7f(simd_unit,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (size_t)2U,\n            .end = i0 * (size_t)2U + (size_t)2U\n          }\n        ));\n    int32_t coefficient0 = GAMMA1 - coefficients.ptr[0U];\n    int32_t coefficient1 = GAMMA1 - coefficients.ptr[1U];\n    serialized.ptr[(size_t)5U * i0] = (uint8_t)coefficient0;\n    serialized.ptr[(size_t)5U * i0 + (size_t)1U] = (uint8_t)(coefficient0 >> 8U);\n    serialized.ptr[(size_t)5U * i0 + (size_t)2U] = (uint8_t)(coefficient0 >> 16U);\n    size_t uu____0 = (size_t)5U * i0 + (size_t)2U;\n    serialized.ptr[uu____0] =\n      (uint32_t)serialized.ptr[uu____0] | (uint32_t)(uint8_t)(coefficient1 << 4U);\n    serialized.ptr[(size_t)5U * i0 + (size_t)3U] = (uint8_t)(coefficient1 >> 4U);\n    serialized.ptr[(size_t)5U * i0 + (size_t)4U] = (uint8_t)(coefficient1 >> 12U);\n  }\n}\n\n#define GAMMA10 ((int32_t)1 << 17U)\n\nstatic KRML_MUSTINLINE void\nserialize_when_gamma1_is_2_pow_17(\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  for (size_t i = (size_t)0U; i < (size_t)8U / (size_t)4U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_dst_ref_shared_fc\n    coefficients =\n      array_to_subslice_shared_7f(simd_unit,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (size_t)4U,\n            .end = i0 * (size_t)4U + (size_t)4U\n          }\n        ));\n    int32_t coefficient0 = GAMMA10 - coefficients.ptr[0U];\n    int32_t coefficient1 = GAMMA10 - coefficients.ptr[1U];\n    int32_t coefficient2 = GAMMA10 - coefficients.ptr[2U];\n    int32_t coefficient3 = GAMMA10 - coefficients.ptr[3U];\n    serialized.ptr[(size_t)9U * i0] = (uint8_t)coefficient0;\n    serialized.ptr[(size_t)9U * i0 + (size_t)1U] = (uint8_t)(coefficient0 >> 8U);\n    serialized.ptr[(size_t)9U * i0 + (size_t)2U] = (uint8_t)(coefficient0 >> 16U);\n    size_t uu____0 = (size_t)9U * i0 + (size_t)2U;\n    serialized.ptr[uu____0] =\n      (uint32_t)serialized.ptr[uu____0] | (uint32_t)(uint8_t)(coefficient1 << 2U);\n    serialized.ptr[(size_t)9U * i0 + (size_t)3U] = (uint8_t)(coefficient1 >> 6U);\n    serialized.ptr[(size_t)9U * i0 + (size_t)4U] = (uint8_t)(coefficient1 >> 14U);\n    size_t uu____1 = (size_t)9U * i0 + (size_t)4U;\n    serialized.ptr[uu____1] =\n      (uint32_t)serialized.ptr[uu____1] | (uint32_t)(uint8_t)(coefficient2 << 4U);\n    serialized.ptr[(size_t)9U * i0 + (size_t)5U] = (uint8_t)(coefficient2 >> 4U);\n    serialized.ptr[(size_t)9U * i0 + (size_t)6U] = (uint8_t)(coefficient2 >> 12U);\n    size_t uu____2 = (size_t)9U * i0 + (size_t)6U;\n    serialized.ptr[uu____2] =\n      (uint32_t)serialized.ptr[uu____2] | (uint32_t)(uint8_t)(coefficient3 << 6U);\n    serialized.ptr[(size_t)9U * i0 + (size_t)7U] = (uint8_t)(coefficient3 >> 2U);\n    serialized.ptr[(size_t)9U * i0 + (size_t)8U] = (uint8_t)(coefficient3 >> 10U);\n  }\n}\n\nstatic KRML_MUSTINLINE void\nserialize(\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized,\n  size_t gamma1_exponent\n)\n{\n  switch (gamma1_exponent)\n  {\n    case 17U:\n      {\n        break;\n      }\n    case 19U:\n      {\n        serialize_when_gamma1_is_2_pow_19(simd_unit, serialized);\n        return;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  serialize_when_gamma1_is_2_pow_17(simd_unit, serialized);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void\ngamma1_serialize_65(\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized,\n  size_t gamma1_exponent\n)\n{\n  serialize(simd_unit, serialized, gamma1_exponent);\n}\n\n#define GAMMA11 ((int32_t)1 << 19U)\n\n#define GAMMA1_TIMES_2_BITMASK ((GAMMA11 << 1U) - (int32_t)1)\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_borrow_slice_u8\nEurydice_slice_subslice_shared_7e(Eurydice_borrow_slice_u8 s, core_ops_range_Range_08 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = s.ptr + r.start, .meta = r.end - r.start });\n}\n\nstatic KRML_MUSTINLINE void\ndeserialize_when_gamma1_is_2_pow_19(\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_arr_d4 *simd_unit\n)\n{\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)5U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (size_t)5U,\n            .end = i0 * (size_t)5U + (size_t)5U\n          }\n        ));\n    int32_t coefficient0 = (int32_t)bytes.ptr[0U];\n    coefficient0 = coefficient0 | (int32_t)bytes.ptr[1U] << 8U;\n    coefficient0 = coefficient0 | (int32_t)bytes.ptr[2U] << 16U;\n    coefficient0 = coefficient0 & GAMMA1_TIMES_2_BITMASK;\n    int32_t coefficient1 = (int32_t)bytes.ptr[2U] >> 4U;\n    coefficient1 = coefficient1 | (int32_t)bytes.ptr[3U] << 4U;\n    coefficient1 = coefficient1 | (int32_t)bytes.ptr[4U] << 12U;\n    simd_unit->data[(size_t)2U * i0] = GAMMA11 - coefficient0;\n    simd_unit->data[(size_t)2U * i0 + (size_t)1U] = GAMMA11 - coefficient1;\n  }\n}\n\n#define GAMMA12 ((int32_t)1 << 17U)\n\n#define GAMMA1_TIMES_2_BITMASK0 ((GAMMA12 << 1U) - (int32_t)1)\n\nstatic KRML_MUSTINLINE void\ndeserialize_when_gamma1_is_2_pow_17(\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_arr_d4 *simd_unit\n)\n{\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)9U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (size_t)9U,\n            .end = i0 * (size_t)9U + (size_t)9U\n          }\n        ));\n    int32_t coefficient0 = (int32_t)bytes.ptr[0U];\n    coefficient0 = coefficient0 | (int32_t)bytes.ptr[1U] << 8U;\n    coefficient0 = coefficient0 | (int32_t)bytes.ptr[2U] << 16U;\n    coefficient0 = coefficient0 & GAMMA1_TIMES_2_BITMASK0;\n    int32_t coefficient1 = (int32_t)bytes.ptr[2U] >> 2U;\n    coefficient1 = coefficient1 | (int32_t)bytes.ptr[3U] << 6U;\n    coefficient1 = coefficient1 | (int32_t)bytes.ptr[4U] << 14U;\n    coefficient1 = coefficient1 & GAMMA1_TIMES_2_BITMASK0;\n    int32_t coefficient2 = (int32_t)bytes.ptr[4U] >> 4U;\n    coefficient2 = coefficient2 | (int32_t)bytes.ptr[5U] << 4U;\n    coefficient2 = coefficient2 | (int32_t)bytes.ptr[6U] << 12U;\n    coefficient2 = coefficient2 & GAMMA1_TIMES_2_BITMASK0;\n    int32_t coefficient3 = (int32_t)bytes.ptr[6U] >> 6U;\n    coefficient3 = coefficient3 | (int32_t)bytes.ptr[7U] << 2U;\n    coefficient3 = coefficient3 | (int32_t)bytes.ptr[8U] << 10U;\n    coefficient3 = coefficient3 & GAMMA1_TIMES_2_BITMASK0;\n    simd_unit->data[(size_t)4U * i0] = GAMMA12 - coefficient0;\n    simd_unit->data[(size_t)4U * i0 + (size_t)1U] = GAMMA12 - coefficient1;\n    simd_unit->data[(size_t)4U * i0 + (size_t)2U] = GAMMA12 - coefficient2;\n    simd_unit->data[(size_t)4U * i0 + (size_t)3U] = GAMMA12 - coefficient3;\n  }\n}\n\nstatic KRML_MUSTINLINE void\ndeserialize(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_d4 *out, size_t gamma1_exponent)\n{\n  switch (gamma1_exponent)\n  {\n    case 17U:\n      {\n        break;\n      }\n    case 19U:\n      {\n        deserialize_when_gamma1_is_2_pow_19(serialized, out);\n        return;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  deserialize_when_gamma1_is_2_pow_17(serialized, out);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void\ngamma1_deserialize_65(\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_arr_d4 *out,\n  size_t gamma1_exponent\n)\n{\n  deserialize(serialized, out, gamma1_exponent);\n}\n\nstatic KRML_MUSTINLINE void\nserialize_4(const Eurydice_arr_d4 *simd_unit, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  uint8_t coefficient0 = (uint8_t)simd_unit->data[0U];\n  uint8_t coefficient1 = (uint8_t)simd_unit->data[1U];\n  uint8_t coefficient2 = (uint8_t)simd_unit->data[2U];\n  uint8_t coefficient3 = (uint8_t)simd_unit->data[3U];\n  uint8_t coefficient4 = (uint8_t)simd_unit->data[4U];\n  uint8_t coefficient5 = (uint8_t)simd_unit->data[5U];\n  uint8_t coefficient6 = (uint8_t)simd_unit->data[6U];\n  uint8_t coefficient7 = (uint8_t)simd_unit->data[7U];\n  uint8_t byte0 = (uint32_t)coefficient1 << 4U | (uint32_t)coefficient0;\n  uint8_t byte1 = (uint32_t)coefficient3 << 4U | (uint32_t)coefficient2;\n  uint8_t byte2 = (uint32_t)coefficient5 << 4U | (uint32_t)coefficient4;\n  uint8_t byte3 = (uint32_t)coefficient7 << 4U | (uint32_t)coefficient6;\n  serialized.ptr[0U] = byte0;\n  serialized.ptr[1U] = byte1;\n  serialized.ptr[2U] = byte2;\n  serialized.ptr[3U] = byte3;\n}\n\nstatic KRML_MUSTINLINE void\nserialize_6(const Eurydice_arr_d4 *simd_unit, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  uint8_t coefficient0 = (uint8_t)simd_unit->data[0U];\n  uint8_t coefficient1 = (uint8_t)simd_unit->data[1U];\n  uint8_t coefficient2 = (uint8_t)simd_unit->data[2U];\n  uint8_t coefficient3 = (uint8_t)simd_unit->data[3U];\n  uint8_t coefficient4 = (uint8_t)simd_unit->data[4U];\n  uint8_t coefficient5 = (uint8_t)simd_unit->data[5U];\n  uint8_t coefficient6 = (uint8_t)simd_unit->data[6U];\n  uint8_t coefficient7 = (uint8_t)simd_unit->data[7U];\n  uint8_t byte0 = (uint32_t)coefficient1 << 6U | (uint32_t)coefficient0;\n  uint8_t byte1 = (uint32_t)coefficient2 << 4U | (uint32_t)coefficient1 >> 2U;\n  uint8_t byte2 = (uint32_t)coefficient3 << 2U | (uint32_t)coefficient2 >> 4U;\n  uint8_t byte3 = (uint32_t)coefficient5 << 6U | (uint32_t)coefficient4;\n  uint8_t byte4 = (uint32_t)coefficient6 << 4U | (uint32_t)coefficient5 >> 2U;\n  uint8_t byte5 = (uint32_t)coefficient7 << 2U | (uint32_t)coefficient6 >> 4U;\n  serialized.ptr[0U] = byte0;\n  serialized.ptr[1U] = byte1;\n  serialized.ptr[2U] = byte2;\n  serialized.ptr[3U] = byte3;\n  serialized.ptr[4U] = byte4;\n  serialized.ptr[5U] = byte5;\n}\n\nstatic KRML_MUSTINLINE void\nserialize0(const Eurydice_arr_d4 *simd_unit, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  switch ((uint8_t)serialized.meta)\n  {\n    case 4U:\n      {\n        serialize_4(simd_unit, serialized);\n        break;\n      }\n    case 6U:\n      {\n        serialize_6(simd_unit, serialized);\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void\ncommitment_serialize_65(\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  serialize0(simd_unit, serialized);\n}\n\n#define ETA ((int32_t)4)\n\nstatic KRML_MUSTINLINE void\nserialize_when_eta_is_4(\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  for (size_t i = (size_t)0U; i < (size_t)8U / (size_t)2U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_dst_ref_shared_fc\n    coefficients =\n      array_to_subslice_shared_7f(simd_unit,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (size_t)2U,\n            .end = i0 * (size_t)2U + (size_t)2U\n          }\n        ));\n    uint8_t coefficient0 = (uint8_t)(ETA - coefficients.ptr[0U]);\n    uint8_t coefficient1 = (uint8_t)(ETA - coefficients.ptr[1U]);\n    serialized.ptr[i0] = (uint32_t)coefficient1 << 4U | (uint32_t)coefficient0;\n  }\n}\n\n#define ETA0 ((int32_t)2)\n\nstatic KRML_MUSTINLINE void\nserialize_when_eta_is_2(\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  uint8_t coefficient0 = (uint8_t)(ETA0 - simd_unit->data[0U]);\n  uint8_t coefficient1 = (uint8_t)(ETA0 - simd_unit->data[1U]);\n  uint8_t coefficient2 = (uint8_t)(ETA0 - simd_unit->data[2U]);\n  uint8_t coefficient3 = (uint8_t)(ETA0 - simd_unit->data[3U]);\n  uint8_t coefficient4 = (uint8_t)(ETA0 - simd_unit->data[4U]);\n  uint8_t coefficient5 = (uint8_t)(ETA0 - simd_unit->data[5U]);\n  uint8_t coefficient6 = (uint8_t)(ETA0 - simd_unit->data[6U]);\n  uint8_t coefficient7 = (uint8_t)(ETA0 - simd_unit->data[7U]);\n  serialized.ptr[0U] =\n    ((uint32_t)coefficient2 << 6U | (uint32_t)coefficient1 << 3U) | (uint32_t)coefficient0;\n  serialized.ptr[1U] =\n    (((uint32_t)coefficient5 << 7U | (uint32_t)coefficient4 << 4U) | (uint32_t)coefficient3 << 1U)\n    | (uint32_t)coefficient2 >> 2U;\n  serialized.ptr[2U] =\n    ((uint32_t)coefficient7 << 5U | (uint32_t)coefficient6 << 2U) | (uint32_t)coefficient5 >> 1U;\n}\n\nstatic KRML_MUSTINLINE void\nserialize1(\n  libcrux_ml_dsa_constants_Eta eta,\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  switch (eta)\n  {\n    case libcrux_ml_dsa_constants_Eta_Two:\n      {\n        break;\n      }\n    case libcrux_ml_dsa_constants_Eta_Four:\n      {\n        serialize_when_eta_is_4(simd_unit, serialized);\n        return;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  serialize_when_eta_is_2(simd_unit, serialized);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void\nerror_serialize_65(\n  libcrux_ml_dsa_constants_Eta eta,\n  const Eurydice_arr_d4 *simd_unit,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  serialize1(eta, simd_unit, serialized);\n}\n\n#define ETA1 ((int32_t)4)\n\nstatic KRML_MUSTINLINE void\ndeserialize_when_eta_is_4(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_d4 *simd_units)\n{\n  for (size_t i = (size_t)0U; i < serialized.meta; i++)\n  {\n    size_t i0 = i;\n    const uint8_t *byte = &serialized.ptr[i0];\n    uint8_t uu____0 = core_ops_bit__core__ops__bit__BitAnd_u8__u8__for__0__u8___bitand(byte, 15U);\n    simd_units->data[(size_t)2U * i0] = ETA1 - (int32_t)uu____0;\n    uint8_t\n    uu____1 = core_ops_bit__core__ops__bit__Shr_i32__u8__for__0__u8___shr(byte, (int32_t)4);\n    simd_units->data[(size_t)2U * i0 + (size_t)1U] = ETA1 - (int32_t)uu____1;\n  }\n}\n\n#define ETA2 ((int32_t)2)\n\nstatic KRML_MUSTINLINE void\ndeserialize_when_eta_is_2(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_d4 *simd_unit)\n{\n  int32_t byte0 = (int32_t)serialized.ptr[0U];\n  int32_t byte1 = (int32_t)serialized.ptr[1U];\n  int32_t byte2 = (int32_t)serialized.ptr[2U];\n  simd_unit->data[0U] = ETA2 - (byte0 & (int32_t)7);\n  simd_unit->data[1U] = ETA2 - (byte0 >> 3U & (int32_t)7);\n  simd_unit->data[2U] = ETA2 - ((byte0 >> 6U | byte1 << 2U) & (int32_t)7);\n  simd_unit->data[3U] = ETA2 - (byte1 >> 1U & (int32_t)7);\n  simd_unit->data[4U] = ETA2 - (byte1 >> 4U & (int32_t)7);\n  simd_unit->data[5U] = ETA2 - ((byte1 >> 7U | byte2 << 1U) & (int32_t)7);\n  simd_unit->data[6U] = ETA2 - (byte2 >> 2U & (int32_t)7);\n  simd_unit->data[7U] = ETA2 - (byte2 >> 5U & (int32_t)7);\n}\n\nstatic KRML_MUSTINLINE void\ndeserialize0(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_arr_d4 *out\n)\n{\n  switch (eta)\n  {\n    case libcrux_ml_dsa_constants_Eta_Two:\n      {\n        break;\n      }\n    case libcrux_ml_dsa_constants_Eta_Four:\n      {\n        deserialize_when_eta_is_4(serialized, out);\n        return;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  deserialize_when_eta_is_2(serialized, out);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void\nerror_deserialize_65(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_arr_d4 *out\n)\n{\n  deserialize0(eta, serialized, out);\n}\n\nstatic KRML_MUSTINLINE int32_t change_t0_interval(int32_t t0)\n{\n  return\n    ((int32_t)1 << (uint32_t)(LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T - (size_t)1U)) - t0;\n}\n\nstatic KRML_MUSTINLINE void\nserialize2(const Eurydice_arr_d4 *simd_unit, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  int32_t coefficient0 = change_t0_interval(simd_unit->data[0U]);\n  int32_t coefficient1 = change_t0_interval(simd_unit->data[1U]);\n  int32_t coefficient2 = change_t0_interval(simd_unit->data[2U]);\n  int32_t coefficient3 = change_t0_interval(simd_unit->data[3U]);\n  int32_t coefficient4 = change_t0_interval(simd_unit->data[4U]);\n  int32_t coefficient5 = change_t0_interval(simd_unit->data[5U]);\n  int32_t coefficient6 = change_t0_interval(simd_unit->data[6U]);\n  int32_t coefficient7 = change_t0_interval(simd_unit->data[7U]);\n  serialized.ptr[0U] = (uint8_t)coefficient0;\n  serialized.ptr[1U] =\n    (uint32_t)(uint8_t)(coefficient0 >> 8U) | (uint32_t)(uint8_t)(coefficient1 << 5U);\n  serialized.ptr[2U] = (uint8_t)(coefficient1 >> 3U);\n  serialized.ptr[3U] =\n    (uint32_t)(uint8_t)(coefficient1 >> 11U) | (uint32_t)(uint8_t)(coefficient2 << 2U);\n  serialized.ptr[4U] =\n    (uint32_t)(uint8_t)(coefficient2 >> 6U) | (uint32_t)(uint8_t)(coefficient3 << 7U);\n  serialized.ptr[5U] = (uint8_t)(coefficient3 >> 1U);\n  serialized.ptr[6U] =\n    (uint32_t)(uint8_t)(coefficient3 >> 9U) | (uint32_t)(uint8_t)(coefficient4 << 4U);\n  serialized.ptr[7U] = (uint8_t)(coefficient4 >> 4U);\n  serialized.ptr[8U] =\n    (uint32_t)(uint8_t)(coefficient4 >> 12U) | (uint32_t)(uint8_t)(coefficient5 << 1U);\n  serialized.ptr[9U] =\n    (uint32_t)(uint8_t)(coefficient5 >> 7U) | (uint32_t)(uint8_t)(coefficient6 << 6U);\n  serialized.ptr[10U] = (uint8_t)(coefficient6 >> 2U);\n  serialized.ptr[11U] =\n    (uint32_t)(uint8_t)(coefficient6 >> 10U) | (uint32_t)(uint8_t)(coefficient7 << 3U);\n  serialized.ptr[12U] = (uint8_t)(coefficient7 >> 5U);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void t0_serialize_65(const Eurydice_arr_d4 *simd_unit, Eurydice_mut_borrow_slice_u8 out)\n{\n  serialize2(simd_unit, out);\n}\n\n#define BITS_IN_LOWER_PART_OF_T_MASK (((int32_t)1 << (uint32_t)(int32_t)LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T) - (int32_t)1)\n\nstatic KRML_MUSTINLINE void\ndeserialize1(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_d4 *simd_unit)\n{\n  int32_t byte0 = (int32_t)serialized.ptr[0U];\n  int32_t byte1 = (int32_t)serialized.ptr[1U];\n  int32_t byte2 = (int32_t)serialized.ptr[2U];\n  int32_t byte3 = (int32_t)serialized.ptr[3U];\n  int32_t byte4 = (int32_t)serialized.ptr[4U];\n  int32_t byte5 = (int32_t)serialized.ptr[5U];\n  int32_t byte6 = (int32_t)serialized.ptr[6U];\n  int32_t byte7 = (int32_t)serialized.ptr[7U];\n  int32_t byte8 = (int32_t)serialized.ptr[8U];\n  int32_t byte9 = (int32_t)serialized.ptr[9U];\n  int32_t byte10 = (int32_t)serialized.ptr[10U];\n  int32_t byte11 = (int32_t)serialized.ptr[11U];\n  int32_t byte12 = (int32_t)serialized.ptr[12U];\n  int32_t coefficient0 = byte0;\n  coefficient0 = coefficient0 | byte1 << 8U;\n  coefficient0 = coefficient0 & BITS_IN_LOWER_PART_OF_T_MASK;\n  int32_t coefficient1 = byte1 >> 5U;\n  coefficient1 = coefficient1 | byte2 << 3U;\n  coefficient1 = coefficient1 | byte3 << 11U;\n  coefficient1 = coefficient1 & BITS_IN_LOWER_PART_OF_T_MASK;\n  int32_t coefficient2 = byte3 >> 2U;\n  coefficient2 = coefficient2 | byte4 << 6U;\n  coefficient2 = coefficient2 & BITS_IN_LOWER_PART_OF_T_MASK;\n  int32_t coefficient3 = byte4 >> 7U;\n  coefficient3 = coefficient3 | byte5 << 1U;\n  coefficient3 = coefficient3 | byte6 << 9U;\n  coefficient3 = coefficient3 & BITS_IN_LOWER_PART_OF_T_MASK;\n  int32_t coefficient4 = byte6 >> 4U;\n  coefficient4 = coefficient4 | byte7 << 4U;\n  coefficient4 = coefficient4 | byte8 << 12U;\n  coefficient4 = coefficient4 & BITS_IN_LOWER_PART_OF_T_MASK;\n  int32_t coefficient5 = byte8 >> 1U;\n  coefficient5 = coefficient5 | byte9 << 7U;\n  coefficient5 = coefficient5 & BITS_IN_LOWER_PART_OF_T_MASK;\n  int32_t coefficient6 = byte9 >> 6U;\n  coefficient6 = coefficient6 | byte10 << 2U;\n  coefficient6 = coefficient6 | byte11 << 10U;\n  coefficient6 = coefficient6 & BITS_IN_LOWER_PART_OF_T_MASK;\n  int32_t coefficient7 = byte11 >> 3U;\n  coefficient7 = coefficient7 | byte12 << 5U;\n  coefficient7 = coefficient7 & BITS_IN_LOWER_PART_OF_T_MASK;\n  simd_unit->data[0U] = change_t0_interval(coefficient0);\n  simd_unit->data[1U] = change_t0_interval(coefficient1);\n  simd_unit->data[2U] = change_t0_interval(coefficient2);\n  simd_unit->data[3U] = change_t0_interval(coefficient3);\n  simd_unit->data[4U] = change_t0_interval(coefficient4);\n  simd_unit->data[5U] = change_t0_interval(coefficient5);\n  simd_unit->data[6U] = change_t0_interval(coefficient6);\n  simd_unit->data[7U] = change_t0_interval(coefficient7);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void t0_deserialize_65(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_d4 *out)\n{\n  deserialize1(serialized, out);\n}\n\nstatic KRML_MUSTINLINE void\nserialize3(const Eurydice_arr_d4 *simd_unit, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < (size_t)8U / (size_t)4U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_dst_ref_shared_fc\n    coefficients =\n      array_to_subslice_shared_7f(simd_unit,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (size_t)4U,\n            .end = i0 * (size_t)4U + (size_t)4U\n          }\n        ));\n    serialized.ptr[(size_t)5U * i0] = (uint8_t)(coefficients.ptr[0U] & (int32_t)255);\n    serialized.ptr[(size_t)5U * i0 + (size_t)1U] =\n      (uint32_t)(uint8_t)(coefficients.ptr[1U] & (int32_t)63) << 2U |\n        (uint32_t)(uint8_t)(coefficients.ptr[0U] >> 8U & (int32_t)3);\n    serialized.ptr[(size_t)5U * i0 + (size_t)2U] =\n      (uint32_t)(uint8_t)(coefficients.ptr[2U] & (int32_t)15) << 4U |\n        (uint32_t)(uint8_t)(coefficients.ptr[1U] >> 6U & (int32_t)15);\n    serialized.ptr[(size_t)5U * i0 + (size_t)3U] =\n      (uint32_t)(uint8_t)(coefficients.ptr[3U] & (int32_t)3) << 6U |\n        (uint32_t)(uint8_t)(coefficients.ptr[2U] >> 4U & (int32_t)63);\n    serialized.ptr[(size_t)5U * i0 + (size_t)4U] =\n      (uint8_t)(coefficients.ptr[3U] >> 2U & (int32_t)255);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void t1_serialize_65(const Eurydice_arr_d4 *simd_unit, Eurydice_mut_borrow_slice_u8 out)\n{\n  serialize3(simd_unit, out);\n}\n\nstatic KRML_MUSTINLINE void\ndeserialize2(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_d4 *simd_unit)\n{\n  int32_t\n  mask = ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_UPPER_PART_OF_T) - (int32_t)1;\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)5U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (size_t)5U,\n            .end = i0 * (size_t)5U + (size_t)5U\n          }\n        ));\n    int32_t byte0 = (int32_t)bytes.ptr[0U];\n    int32_t byte1 = (int32_t)bytes.ptr[1U];\n    int32_t byte2 = (int32_t)bytes.ptr[2U];\n    int32_t byte3 = (int32_t)bytes.ptr[3U];\n    int32_t byte4 = (int32_t)bytes.ptr[4U];\n    simd_unit->data[(size_t)4U * i0] = (byte0 | byte1 << 8U) & mask;\n    simd_unit->data[(size_t)4U * i0 + (size_t)1U] = (byte1 >> 2U | byte2 << 6U) & mask;\n    simd_unit->data[(size_t)4U * i0 + (size_t)2U] = (byte2 >> 4U | byte3 << 4U) & mask;\n    simd_unit->data[(size_t)4U * i0 + (size_t)3U] = (byte3 >> 6U | byte4 << 2U) & mask;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void t1_deserialize_65(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_d4 *out)\n{\n  deserialize2(serialized, out);\n}\n\nstatic KRML_MUSTINLINE void\nmontgomery_multiply_by_constant(Eurydice_arr_d4 *simd_unit, int32_t c)\n{\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    simd_unit->data[i0] = montgomery_reduce_element((int64_t)simd_unit->data[i0] * (int64_t)c););\n}\n\nstatic KRML_MUSTINLINE void\nround(Eurydice_arr_a4 *re, size_t index, size_t step_by, int32_t zeta)\n{\n  Eurydice_arr_d4 tmp = re->data[index + step_by];\n  montgomery_multiply_by_constant(&tmp, zeta);\n  re->data[index + step_by] = re->data[index];\n  subtract(&re->data[index + step_by], &tmp);\n  add(&re->data[index], &tmp);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 16\n- ZETA= 25847\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_99(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)16U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)16U, (int32_t)25847);\n  }\n}\n\nstatic KRML_MUSTINLINE void ntt_at_layer_7(Eurydice_arr_a4 *re)\n{\n  outer_3_plus_99(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 8\n- ZETA= -2608894\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_990(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)8U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)8U, (int32_t)-2608894);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 8\n- ZETA= -518909\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_7a(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)8U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)8U, (int32_t)-518909);\n  }\n}\n\nstatic KRML_MUSTINLINE void ntt_at_layer_6(Eurydice_arr_a4 *re)\n{\n  outer_3_plus_990(re);\n  outer_3_plus_7a(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 4\n- ZETA= 237124\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_991(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)4U, (int32_t)237124);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 4\n- ZETA= -777960\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_a8(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)4U, (int32_t)-777960);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 4\n- ZETA= -876248\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_7a0(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)4U, (int32_t)-876248);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 4\n- ZETA= 466468\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_d9(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)4U, (int32_t)466468);\n  }\n}\n\nstatic KRML_MUSTINLINE void ntt_at_layer_5(Eurydice_arr_a4 *re)\n{\n  outer_3_plus_991(re);\n  outer_3_plus_a8(re);\n  outer_3_plus_7a0(re);\n  outer_3_plus_d9(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 2\n- ZETA= 1826347\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_992(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)2U, (int32_t)1826347);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 4\n- STEP_BY= 2\n- ZETA= 2353451\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_6b(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)4U; i < (size_t)4U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)2U, (int32_t)2353451);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 2\n- ZETA= -359251\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_a80(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)2U, (int32_t)-359251);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 12\n- STEP_BY= 2\n- ZETA= -2091905\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_95(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)12U; i < (size_t)12U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)2U, (int32_t)-2091905);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 2\n- ZETA= 3119733\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_7a1(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)2U, (int32_t)3119733);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 20\n- STEP_BY= 2\n- ZETA= -2884855\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_de(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)20U; i < (size_t)20U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)2U, (int32_t)-2884855);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 2\n- ZETA= 3111497\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_d90(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)2U, (int32_t)3111497);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 28\n- STEP_BY= 2\n- ZETA= 2680103\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_3b(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)28U; i < (size_t)28U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)2U, (int32_t)2680103);\n  }\n}\n\nstatic KRML_MUSTINLINE void ntt_at_layer_4(Eurydice_arr_a4 *re)\n{\n  outer_3_plus_992(re);\n  outer_3_plus_6b(re);\n  outer_3_plus_a80(re);\n  outer_3_plus_95(re);\n  outer_3_plus_7a1(re);\n  outer_3_plus_de(re);\n  outer_3_plus_d90(re);\n  outer_3_plus_3b(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 1\n- ZETA= 2725464\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_993(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)2725464);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 2\n- STEP_BY= 1\n- ZETA= 1024112\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_1c(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)2U; i < (size_t)2U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)1024112);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 4\n- STEP_BY= 1\n- ZETA= -1079900\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_6b0(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)4U; i < (size_t)4U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)-1079900);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 6\n- STEP_BY= 1\n- ZETA= 3585928\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_44(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)6U; i < (size_t)6U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)3585928);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 1\n- ZETA= -549488\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_a81(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)-549488);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 10\n- STEP_BY= 1\n- ZETA= -1119584\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_1f(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)10U; i < (size_t)10U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)-1119584);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 12\n- STEP_BY= 1\n- ZETA= 2619752\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_950(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)12U; i < (size_t)12U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)2619752);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 14\n- STEP_BY= 1\n- ZETA= -2108549\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_3b0(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)14U; i < (size_t)14U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)-2108549);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 1\n- ZETA= -2118186\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_7a2(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)-2118186);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 18\n- STEP_BY= 1\n- ZETA= -3859737\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_e4(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)18U; i < (size_t)18U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)-3859737);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 20\n- STEP_BY= 1\n- ZETA= -1399561\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_de0(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)20U; i < (size_t)20U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)-1399561);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 22\n- STEP_BY= 1\n- ZETA= -3277672\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_05(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)22U; i < (size_t)22U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)-3277672);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 1\n- ZETA= 1757237\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_d91(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)1757237);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 26\n- STEP_BY= 1\n- ZETA= -19422\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_3a(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)26U; i < (size_t)26U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)-19422);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 28\n- STEP_BY= 1\n- ZETA= 4010497\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_3b1(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)28U; i < (size_t)28U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)4010497);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.ntt.outer_3_plus\nwith const generics\n- OFFSET= 30\n- STEP_BY= 1\n- ZETA= 280005\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_a0(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)30U; i < (size_t)30U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    round(re, j, (size_t)1U, (int32_t)280005);\n  }\n}\n\nstatic KRML_MUSTINLINE void ntt_at_layer_3(Eurydice_arr_a4 *re)\n{\n  outer_3_plus_993(re);\n  outer_3_plus_1c(re);\n  outer_3_plus_6b0(re);\n  outer_3_plus_44(re);\n  outer_3_plus_a81(re);\n  outer_3_plus_1f(re);\n  outer_3_plus_950(re);\n  outer_3_plus_3b0(re);\n  outer_3_plus_7a2(re);\n  outer_3_plus_e4(re);\n  outer_3_plus_de0(re);\n  outer_3_plus_05(re);\n  outer_3_plus_d91(re);\n  outer_3_plus_3a(re);\n  outer_3_plus_3b1(re);\n  outer_3_plus_a0(re);\n}\n\nstatic KRML_MUSTINLINE int32_t montgomery_multiply_fe_by_fer(int32_t fe, int32_t fer)\n{\n  return montgomery_reduce_element((int64_t)fe * (int64_t)fer);\n}\n\nstatic KRML_MUSTINLINE void\nsimd_unit_ntt_step(Eurydice_arr_d4 *simd_unit, int32_t zeta, size_t index, size_t step)\n{\n  int32_t t = montgomery_multiply_fe_by_fer(simd_unit->data[index + step], zeta);\n  simd_unit->data[index + step] = simd_unit->data[index] - t;\n  simd_unit->data[index] = simd_unit->data[index] + t;\n}\n\nstatic KRML_MUSTINLINE void simd_unit_ntt_at_layer_2(Eurydice_arr_d4 *simd_unit, int32_t zeta)\n{\n  simd_unit_ntt_step(simd_unit, zeta, (size_t)0U, (size_t)4U);\n  simd_unit_ntt_step(simd_unit, zeta, (size_t)1U, (size_t)4U);\n  simd_unit_ntt_step(simd_unit, zeta, (size_t)2U, (size_t)4U);\n  simd_unit_ntt_step(simd_unit, zeta, (size_t)3U, (size_t)4U);\n}\n\nstatic KRML_MUSTINLINE void round0(Eurydice_arr_a4 *re, size_t index, int32_t zeta)\n{\n  simd_unit_ntt_at_layer_2(&re->data[index], zeta);\n}\n\nstatic KRML_MUSTINLINE void ntt_at_layer_2(Eurydice_arr_a4 *re)\n{\n  round0(re, (size_t)0U, (int32_t)2706023);\n  round0(re, (size_t)1U, (int32_t)95776);\n  round0(re, (size_t)2U, (int32_t)3077325);\n  round0(re, (size_t)3U, (int32_t)3530437);\n  round0(re, (size_t)4U, (int32_t)-1661693);\n  round0(re, (size_t)5U, (int32_t)-3592148);\n  round0(re, (size_t)6U, (int32_t)-2537516);\n  round0(re, (size_t)7U, (int32_t)3915439);\n  round0(re, (size_t)8U, (int32_t)-3861115);\n  round0(re, (size_t)9U, (int32_t)-3043716);\n  round0(re, (size_t)10U, (int32_t)3574422);\n  round0(re, (size_t)11U, (int32_t)-2867647);\n  round0(re, (size_t)12U, (int32_t)3539968);\n  round0(re, (size_t)13U, (int32_t)-300467);\n  round0(re, (size_t)14U, (int32_t)2348700);\n  round0(re, (size_t)15U, (int32_t)-539299);\n  round0(re, (size_t)16U, (int32_t)-1699267);\n  round0(re, (size_t)17U, (int32_t)-1643818);\n  round0(re, (size_t)18U, (int32_t)3505694);\n  round0(re, (size_t)19U, (int32_t)-3821735);\n  round0(re, (size_t)20U, (int32_t)3507263);\n  round0(re, (size_t)21U, (int32_t)-2140649);\n  round0(re, (size_t)22U, (int32_t)-1600420);\n  round0(re, (size_t)23U, (int32_t)3699596);\n  round0(re, (size_t)24U, (int32_t)811944);\n  round0(re, (size_t)25U, (int32_t)531354);\n  round0(re, (size_t)26U, (int32_t)954230);\n  round0(re, (size_t)27U, (int32_t)3881043);\n  round0(re, (size_t)28U, (int32_t)3900724);\n  round0(re, (size_t)29U, (int32_t)-2556880);\n  round0(re, (size_t)30U, (int32_t)2071892);\n  round0(re, (size_t)31U, (int32_t)-2797779);\n}\n\nstatic KRML_MUSTINLINE void\nsimd_unit_ntt_at_layer_1(Eurydice_arr_d4 *simd_unit, int32_t zeta1, int32_t zeta2)\n{\n  simd_unit_ntt_step(simd_unit, zeta1, (size_t)0U, (size_t)2U);\n  simd_unit_ntt_step(simd_unit, zeta1, (size_t)1U, (size_t)2U);\n  simd_unit_ntt_step(simd_unit, zeta2, (size_t)4U, (size_t)2U);\n  simd_unit_ntt_step(simd_unit, zeta2, (size_t)5U, (size_t)2U);\n}\n\nstatic KRML_MUSTINLINE void\nround1(Eurydice_arr_a4 *re, size_t index, int32_t zeta_0, int32_t zeta_1)\n{\n  simd_unit_ntt_at_layer_1(&re->data[index], zeta_0, zeta_1);\n}\n\nstatic KRML_MUSTINLINE void ntt_at_layer_1(Eurydice_arr_a4 *re)\n{\n  round1(re, (size_t)0U, (int32_t)-3930395, (int32_t)-1528703);\n  round1(re, (size_t)1U, (int32_t)-3677745, (int32_t)-3041255);\n  round1(re, (size_t)2U, (int32_t)-1452451, (int32_t)3475950);\n  round1(re, (size_t)3U, (int32_t)2176455, (int32_t)-1585221);\n  round1(re, (size_t)4U, (int32_t)-1257611, (int32_t)1939314);\n  round1(re, (size_t)5U, (int32_t)-4083598, (int32_t)-1000202);\n  round1(re, (size_t)6U, (int32_t)-3190144, (int32_t)-3157330);\n  round1(re, (size_t)7U, (int32_t)-3632928, (int32_t)126922);\n  round1(re, (size_t)8U, (int32_t)3412210, (int32_t)-983419);\n  round1(re, (size_t)9U, (int32_t)2147896, (int32_t)2715295);\n  round1(re, (size_t)10U, (int32_t)-2967645, (int32_t)-3693493);\n  round1(re, (size_t)11U, (int32_t)-411027, (int32_t)-2477047);\n  round1(re, (size_t)12U, (int32_t)-671102, (int32_t)-1228525);\n  round1(re, (size_t)13U, (int32_t)-22981, (int32_t)-1308169);\n  round1(re, (size_t)14U, (int32_t)-381987, (int32_t)1349076);\n  round1(re, (size_t)15U, (int32_t)1852771, (int32_t)-1430430);\n  round1(re, (size_t)16U, (int32_t)-3343383, (int32_t)264944);\n  round1(re, (size_t)17U, (int32_t)508951, (int32_t)3097992);\n  round1(re, (size_t)18U, (int32_t)44288, (int32_t)-1100098);\n  round1(re, (size_t)19U, (int32_t)904516, (int32_t)3958618);\n  round1(re, (size_t)20U, (int32_t)-3724342, (int32_t)-8578);\n  round1(re, (size_t)21U, (int32_t)1653064, (int32_t)-3249728);\n  round1(re, (size_t)22U, (int32_t)2389356, (int32_t)-210977);\n  round1(re, (size_t)23U, (int32_t)759969, (int32_t)-1316856);\n  round1(re, (size_t)24U, (int32_t)189548, (int32_t)-3553272);\n  round1(re, (size_t)25U, (int32_t)3159746, (int32_t)-1851402);\n  round1(re, (size_t)26U, (int32_t)-2409325, (int32_t)-177440);\n  round1(re, (size_t)27U, (int32_t)1315589, (int32_t)1341330);\n  round1(re, (size_t)28U, (int32_t)1285669, (int32_t)-1584928);\n  round1(re, (size_t)29U, (int32_t)-812732, (int32_t)-1439742);\n  round1(re, (size_t)30U, (int32_t)-3019102, (int32_t)-3881060);\n  round1(re, (size_t)31U, (int32_t)-3628969, (int32_t)3839961);\n}\n\nstatic KRML_MUSTINLINE void\nsimd_unit_ntt_at_layer_0(\n  Eurydice_arr_d4 *simd_unit,\n  int32_t zeta0,\n  int32_t zeta1,\n  int32_t zeta2,\n  int32_t zeta3\n)\n{\n  simd_unit_ntt_step(simd_unit, zeta0, (size_t)0U, (size_t)1U);\n  simd_unit_ntt_step(simd_unit, zeta1, (size_t)2U, (size_t)1U);\n  simd_unit_ntt_step(simd_unit, zeta2, (size_t)4U, (size_t)1U);\n  simd_unit_ntt_step(simd_unit, zeta3, (size_t)6U, (size_t)1U);\n}\n\nstatic KRML_MUSTINLINE void\nround2(\n  Eurydice_arr_a4 *re,\n  size_t index,\n  int32_t zeta_0,\n  int32_t zeta_1,\n  int32_t zeta_2,\n  int32_t zeta_3\n)\n{\n  simd_unit_ntt_at_layer_0(&re->data[index], zeta_0, zeta_1, zeta_2, zeta_3);\n}\n\nstatic KRML_MUSTINLINE void ntt_at_layer_0(Eurydice_arr_a4 *re)\n{\n  round2(re, (size_t)0U, (int32_t)2091667, (int32_t)3407706, (int32_t)2316500, (int32_t)3817976);\n  round2(re,\n    (size_t)1U,\n    (int32_t)-3342478,\n    (int32_t)2244091,\n    (int32_t)-2446433,\n    (int32_t)-3562462);\n  round2(re, (size_t)2U, (int32_t)266997, (int32_t)2434439, (int32_t)-1235728, (int32_t)3513181);\n  round2(re,\n    (size_t)3U,\n    (int32_t)-3520352,\n    (int32_t)-3759364,\n    (int32_t)-1197226,\n    (int32_t)-3193378);\n  round2(re, (size_t)4U, (int32_t)900702, (int32_t)1859098, (int32_t)909542, (int32_t)819034);\n  round2(re, (size_t)5U, (int32_t)495491, (int32_t)-1613174, (int32_t)-43260, (int32_t)-522500);\n  round2(re,\n    (size_t)6U,\n    (int32_t)-655327,\n    (int32_t)-3122442,\n    (int32_t)2031748,\n    (int32_t)3207046);\n  round2(re,\n    (size_t)7U,\n    (int32_t)-3556995,\n    (int32_t)-525098,\n    (int32_t)-768622,\n    (int32_t)-3595838);\n  round2(re, (size_t)8U, (int32_t)342297, (int32_t)286988, (int32_t)-2437823, (int32_t)4108315);\n  round2(re, (size_t)9U, (int32_t)3437287, (int32_t)-3342277, (int32_t)1735879, (int32_t)203044);\n  round2(re,\n    (size_t)10U,\n    (int32_t)2842341,\n    (int32_t)2691481,\n    (int32_t)-2590150,\n    (int32_t)1265009);\n  round2(re,\n    (size_t)11U,\n    (int32_t)4055324,\n    (int32_t)1247620,\n    (int32_t)2486353,\n    (int32_t)1595974);\n  round2(re,\n    (size_t)12U,\n    (int32_t)-3767016,\n    (int32_t)1250494,\n    (int32_t)2635921,\n    (int32_t)-3548272);\n  round2(re,\n    (size_t)13U,\n    (int32_t)-2994039,\n    (int32_t)1869119,\n    (int32_t)1903435,\n    (int32_t)-1050970);\n  round2(re,\n    (size_t)14U,\n    (int32_t)-1333058,\n    (int32_t)1237275,\n    (int32_t)-3318210,\n    (int32_t)-1430225);\n  round2(re,\n    (size_t)15U,\n    (int32_t)-451100,\n    (int32_t)1312455,\n    (int32_t)3306115,\n    (int32_t)-1962642);\n  round2(re,\n    (size_t)16U,\n    (int32_t)-1279661,\n    (int32_t)1917081,\n    (int32_t)-2546312,\n    (int32_t)-1374803);\n  round2(re, (size_t)17U, (int32_t)1500165, (int32_t)777191, (int32_t)2235880, (int32_t)3406031);\n  round2(re,\n    (size_t)18U,\n    (int32_t)-542412,\n    (int32_t)-2831860,\n    (int32_t)-1671176,\n    (int32_t)-1846953);\n  round2(re,\n    (size_t)19U,\n    (int32_t)-2584293,\n    (int32_t)-3724270,\n    (int32_t)594136,\n    (int32_t)-3776993);\n  round2(re,\n    (size_t)20U,\n    (int32_t)-2013608,\n    (int32_t)2432395,\n    (int32_t)2454455,\n    (int32_t)-164721);\n  round2(re,\n    (size_t)21U,\n    (int32_t)1957272,\n    (int32_t)3369112,\n    (int32_t)185531,\n    (int32_t)-1207385);\n  round2(re,\n    (size_t)22U,\n    (int32_t)-3183426,\n    (int32_t)162844,\n    (int32_t)1616392,\n    (int32_t)3014001);\n  round2(re,\n    (size_t)23U,\n    (int32_t)810149,\n    (int32_t)1652634,\n    (int32_t)-3694233,\n    (int32_t)-1799107);\n  round2(re,\n    (size_t)24U,\n    (int32_t)-3038916,\n    (int32_t)3523897,\n    (int32_t)3866901,\n    (int32_t)269760);\n  round2(re, (size_t)25U, (int32_t)2213111, (int32_t)-975884, (int32_t)1717735, (int32_t)472078);\n  round2(re,\n    (size_t)26U,\n    (int32_t)-426683,\n    (int32_t)1723600,\n    (int32_t)-1803090,\n    (int32_t)1910376);\n  round2(re,\n    (size_t)27U,\n    (int32_t)-1667432,\n    (int32_t)-1104333,\n    (int32_t)-260646,\n    (int32_t)-3833893);\n  round2(re,\n    (size_t)28U,\n    (int32_t)-2939036,\n    (int32_t)-2235985,\n    (int32_t)-420899,\n    (int32_t)-2286327);\n  round2(re,\n    (size_t)29U,\n    (int32_t)183443,\n    (int32_t)-976891,\n    (int32_t)1612842,\n    (int32_t)-3545687);\n  round2(re,\n    (size_t)30U,\n    (int32_t)-554416,\n    (int32_t)3919660,\n    (int32_t)-48306,\n    (int32_t)-1362209);\n  round2(re,\n    (size_t)31U,\n    (int32_t)3937738,\n    (int32_t)1400424,\n    (int32_t)-846154,\n    (int32_t)1976782);\n}\n\nstatic KRML_MUSTINLINE void ntt(Eurydice_arr_a4 *re)\n{\n  ntt_at_layer_7(re);\n  ntt_at_layer_6(re);\n  ntt_at_layer_5(re);\n  ntt_at_layer_4(re);\n  ntt_at_layer_3(re);\n  ntt_at_layer_2(re);\n  ntt_at_layer_1(re);\n  ntt_at_layer_0(re);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void ntt_65(Eurydice_arr_a4 *simd_units)\n{\n  ntt(simd_units);\n}\n\nstatic KRML_MUSTINLINE void\nsimd_unit_inv_ntt_step(Eurydice_arr_d4 *simd_unit, int32_t zeta, size_t index, size_t step)\n{\n  int32_t a_minus_b = simd_unit->data[index + step] - simd_unit->data[index];\n  simd_unit->data[index] = simd_unit->data[index] + simd_unit->data[index + step];\n  simd_unit->data[index + step] = montgomery_multiply_fe_by_fer(a_minus_b, zeta);\n}\n\nstatic KRML_MUSTINLINE void\nsimd_unit_invert_ntt_at_layer_0(\n  Eurydice_arr_d4 *simd_unit,\n  int32_t zeta0,\n  int32_t zeta1,\n  int32_t zeta2,\n  int32_t zeta3\n)\n{\n  simd_unit_inv_ntt_step(simd_unit, zeta0, (size_t)0U, (size_t)1U);\n  simd_unit_inv_ntt_step(simd_unit, zeta1, (size_t)2U, (size_t)1U);\n  simd_unit_inv_ntt_step(simd_unit, zeta2, (size_t)4U, (size_t)1U);\n  simd_unit_inv_ntt_step(simd_unit, zeta3, (size_t)6U, (size_t)1U);\n}\n\nstatic KRML_MUSTINLINE void\nround3(\n  Eurydice_arr_a4 *re,\n  size_t index,\n  int32_t zeta0,\n  int32_t zeta1,\n  int32_t zeta2,\n  int32_t zeta3\n)\n{\n  simd_unit_invert_ntt_at_layer_0(&re->data[index], zeta0, zeta1, zeta2, zeta3);\n}\n\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_0(Eurydice_arr_a4 *re)\n{\n  round3(re, (size_t)0U, (int32_t)1976782, (int32_t)-846154, (int32_t)1400424, (int32_t)3937738);\n  round3(re, (size_t)1U, (int32_t)-1362209, (int32_t)-48306, (int32_t)3919660, (int32_t)-554416);\n  round3(re, (size_t)2U, (int32_t)-3545687, (int32_t)1612842, (int32_t)-976891, (int32_t)183443);\n  round3(re,\n    (size_t)3U,\n    (int32_t)-2286327,\n    (int32_t)-420899,\n    (int32_t)-2235985,\n    (int32_t)-2939036);\n  round3(re,\n    (size_t)4U,\n    (int32_t)-3833893,\n    (int32_t)-260646,\n    (int32_t)-1104333,\n    (int32_t)-1667432);\n  round3(re,\n    (size_t)5U,\n    (int32_t)1910376,\n    (int32_t)-1803090,\n    (int32_t)1723600,\n    (int32_t)-426683);\n  round3(re, (size_t)6U, (int32_t)472078, (int32_t)1717735, (int32_t)-975884, (int32_t)2213111);\n  round3(re, (size_t)7U, (int32_t)269760, (int32_t)3866901, (int32_t)3523897, (int32_t)-3038916);\n  round3(re,\n    (size_t)8U,\n    (int32_t)-1799107,\n    (int32_t)-3694233,\n    (int32_t)1652634,\n    (int32_t)810149);\n  round3(re, (size_t)9U, (int32_t)3014001, (int32_t)1616392, (int32_t)162844, (int32_t)-3183426);\n  round3(re,\n    (size_t)10U,\n    (int32_t)-1207385,\n    (int32_t)185531,\n    (int32_t)3369112,\n    (int32_t)1957272);\n  round3(re,\n    (size_t)11U,\n    (int32_t)-164721,\n    (int32_t)2454455,\n    (int32_t)2432395,\n    (int32_t)-2013608);\n  round3(re,\n    (size_t)12U,\n    (int32_t)-3776993,\n    (int32_t)594136,\n    (int32_t)-3724270,\n    (int32_t)-2584293);\n  round3(re,\n    (size_t)13U,\n    (int32_t)-1846953,\n    (int32_t)-1671176,\n    (int32_t)-2831860,\n    (int32_t)-542412);\n  round3(re, (size_t)14U, (int32_t)3406031, (int32_t)2235880, (int32_t)777191, (int32_t)1500165);\n  round3(re,\n    (size_t)15U,\n    (int32_t)-1374803,\n    (int32_t)-2546312,\n    (int32_t)1917081,\n    (int32_t)-1279661);\n  round3(re,\n    (size_t)16U,\n    (int32_t)-1962642,\n    (int32_t)3306115,\n    (int32_t)1312455,\n    (int32_t)-451100);\n  round3(re,\n    (size_t)17U,\n    (int32_t)-1430225,\n    (int32_t)-3318210,\n    (int32_t)1237275,\n    (int32_t)-1333058);\n  round3(re,\n    (size_t)18U,\n    (int32_t)-1050970,\n    (int32_t)1903435,\n    (int32_t)1869119,\n    (int32_t)-2994039);\n  round3(re,\n    (size_t)19U,\n    (int32_t)-3548272,\n    (int32_t)2635921,\n    (int32_t)1250494,\n    (int32_t)-3767016);\n  round3(re,\n    (size_t)20U,\n    (int32_t)1595974,\n    (int32_t)2486353,\n    (int32_t)1247620,\n    (int32_t)4055324);\n  round3(re,\n    (size_t)21U,\n    (int32_t)1265009,\n    (int32_t)-2590150,\n    (int32_t)2691481,\n    (int32_t)2842341);\n  round3(re,\n    (size_t)22U,\n    (int32_t)203044,\n    (int32_t)1735879,\n    (int32_t)-3342277,\n    (int32_t)3437287);\n  round3(re, (size_t)23U, (int32_t)4108315, (int32_t)-2437823, (int32_t)286988, (int32_t)342297);\n  round3(re,\n    (size_t)24U,\n    (int32_t)-3595838,\n    (int32_t)-768622,\n    (int32_t)-525098,\n    (int32_t)-3556995);\n  round3(re,\n    (size_t)25U,\n    (int32_t)3207046,\n    (int32_t)2031748,\n    (int32_t)-3122442,\n    (int32_t)-655327);\n  round3(re, (size_t)26U, (int32_t)-522500, (int32_t)-43260, (int32_t)-1613174, (int32_t)495491);\n  round3(re, (size_t)27U, (int32_t)819034, (int32_t)909542, (int32_t)1859098, (int32_t)900702);\n  round3(re,\n    (size_t)28U,\n    (int32_t)-3193378,\n    (int32_t)-1197226,\n    (int32_t)-3759364,\n    (int32_t)-3520352);\n  round3(re,\n    (size_t)29U,\n    (int32_t)3513181,\n    (int32_t)-1235728,\n    (int32_t)2434439,\n    (int32_t)266997);\n  round3(re,\n    (size_t)30U,\n    (int32_t)-3562462,\n    (int32_t)-2446433,\n    (int32_t)2244091,\n    (int32_t)-3342478);\n  round3(re,\n    (size_t)31U,\n    (int32_t)3817976,\n    (int32_t)2316500,\n    (int32_t)3407706,\n    (int32_t)2091667);\n}\n\nstatic KRML_MUSTINLINE void\nsimd_unit_invert_ntt_at_layer_1(Eurydice_arr_d4 *simd_unit, int32_t zeta0, int32_t zeta1)\n{\n  simd_unit_inv_ntt_step(simd_unit, zeta0, (size_t)0U, (size_t)2U);\n  simd_unit_inv_ntt_step(simd_unit, zeta0, (size_t)1U, (size_t)2U);\n  simd_unit_inv_ntt_step(simd_unit, zeta1, (size_t)4U, (size_t)2U);\n  simd_unit_inv_ntt_step(simd_unit, zeta1, (size_t)5U, (size_t)2U);\n}\n\nstatic KRML_MUSTINLINE void\nround4(Eurydice_arr_a4 *re, size_t index, int32_t zeta_00, int32_t zeta_01)\n{\n  simd_unit_invert_ntt_at_layer_1(&re->data[index], zeta_00, zeta_01);\n}\n\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_1(Eurydice_arr_a4 *re)\n{\n  round4(re, (size_t)0U, (int32_t)3839961, (int32_t)-3628969);\n  round4(re, (size_t)1U, (int32_t)-3881060, (int32_t)-3019102);\n  round4(re, (size_t)2U, (int32_t)-1439742, (int32_t)-812732);\n  round4(re, (size_t)3U, (int32_t)-1584928, (int32_t)1285669);\n  round4(re, (size_t)4U, (int32_t)1341330, (int32_t)1315589);\n  round4(re, (size_t)5U, (int32_t)-177440, (int32_t)-2409325);\n  round4(re, (size_t)6U, (int32_t)-1851402, (int32_t)3159746);\n  round4(re, (size_t)7U, (int32_t)-3553272, (int32_t)189548);\n  round4(re, (size_t)8U, (int32_t)-1316856, (int32_t)759969);\n  round4(re, (size_t)9U, (int32_t)-210977, (int32_t)2389356);\n  round4(re, (size_t)10U, (int32_t)-3249728, (int32_t)1653064);\n  round4(re, (size_t)11U, (int32_t)-8578, (int32_t)-3724342);\n  round4(re, (size_t)12U, (int32_t)3958618, (int32_t)904516);\n  round4(re, (size_t)13U, (int32_t)-1100098, (int32_t)44288);\n  round4(re, (size_t)14U, (int32_t)3097992, (int32_t)508951);\n  round4(re, (size_t)15U, (int32_t)264944, (int32_t)-3343383);\n  round4(re, (size_t)16U, (int32_t)-1430430, (int32_t)1852771);\n  round4(re, (size_t)17U, (int32_t)1349076, (int32_t)-381987);\n  round4(re, (size_t)18U, (int32_t)-1308169, (int32_t)-22981);\n  round4(re, (size_t)19U, (int32_t)-1228525, (int32_t)-671102);\n  round4(re, (size_t)20U, (int32_t)-2477047, (int32_t)-411027);\n  round4(re, (size_t)21U, (int32_t)-3693493, (int32_t)-2967645);\n  round4(re, (size_t)22U, (int32_t)2715295, (int32_t)2147896);\n  round4(re, (size_t)23U, (int32_t)-983419, (int32_t)3412210);\n  round4(re, (size_t)24U, (int32_t)126922, (int32_t)-3632928);\n  round4(re, (size_t)25U, (int32_t)-3157330, (int32_t)-3190144);\n  round4(re, (size_t)26U, (int32_t)-1000202, (int32_t)-4083598);\n  round4(re, (size_t)27U, (int32_t)1939314, (int32_t)-1257611);\n  round4(re, (size_t)28U, (int32_t)-1585221, (int32_t)2176455);\n  round4(re, (size_t)29U, (int32_t)3475950, (int32_t)-1452451);\n  round4(re, (size_t)30U, (int32_t)-3041255, (int32_t)-3677745);\n  round4(re, (size_t)31U, (int32_t)-1528703, (int32_t)-3930395);\n}\n\nstatic KRML_MUSTINLINE void\nsimd_unit_invert_ntt_at_layer_2(Eurydice_arr_d4 *simd_unit, int32_t zeta)\n{\n  simd_unit_inv_ntt_step(simd_unit, zeta, (size_t)0U, (size_t)4U);\n  simd_unit_inv_ntt_step(simd_unit, zeta, (size_t)1U, (size_t)4U);\n  simd_unit_inv_ntt_step(simd_unit, zeta, (size_t)2U, (size_t)4U);\n  simd_unit_inv_ntt_step(simd_unit, zeta, (size_t)3U, (size_t)4U);\n}\n\nstatic KRML_MUSTINLINE void round5(Eurydice_arr_a4 *re, size_t index, int32_t zeta1)\n{\n  simd_unit_invert_ntt_at_layer_2(&re->data[index], zeta1);\n}\n\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_2(Eurydice_arr_a4 *re)\n{\n  round5(re, (size_t)0U, (int32_t)-2797779);\n  round5(re, (size_t)1U, (int32_t)2071892);\n  round5(re, (size_t)2U, (int32_t)-2556880);\n  round5(re, (size_t)3U, (int32_t)3900724);\n  round5(re, (size_t)4U, (int32_t)3881043);\n  round5(re, (size_t)5U, (int32_t)954230);\n  round5(re, (size_t)6U, (int32_t)531354);\n  round5(re, (size_t)7U, (int32_t)811944);\n  round5(re, (size_t)8U, (int32_t)3699596);\n  round5(re, (size_t)9U, (int32_t)-1600420);\n  round5(re, (size_t)10U, (int32_t)-2140649);\n  round5(re, (size_t)11U, (int32_t)3507263);\n  round5(re, (size_t)12U, (int32_t)-3821735);\n  round5(re, (size_t)13U, (int32_t)3505694);\n  round5(re, (size_t)14U, (int32_t)-1643818);\n  round5(re, (size_t)15U, (int32_t)-1699267);\n  round5(re, (size_t)16U, (int32_t)-539299);\n  round5(re, (size_t)17U, (int32_t)2348700);\n  round5(re, (size_t)18U, (int32_t)-300467);\n  round5(re, (size_t)19U, (int32_t)3539968);\n  round5(re, (size_t)20U, (int32_t)-2867647);\n  round5(re, (size_t)21U, (int32_t)3574422);\n  round5(re, (size_t)22U, (int32_t)-3043716);\n  round5(re, (size_t)23U, (int32_t)-3861115);\n  round5(re, (size_t)24U, (int32_t)3915439);\n  round5(re, (size_t)25U, (int32_t)-2537516);\n  round5(re, (size_t)26U, (int32_t)-3592148);\n  round5(re, (size_t)27U, (int32_t)-1661693);\n  round5(re, (size_t)28U, (int32_t)3530437);\n  round5(re, (size_t)29U, (int32_t)3077325);\n  round5(re, (size_t)30U, (int32_t)95776);\n  round5(re, (size_t)31U, (int32_t)2706023);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 1\n- ZETA= 280005\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_994(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)280005);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 2\n- STEP_BY= 1\n- ZETA= 4010497\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_1c0(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)2U; i < (size_t)2U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)4010497);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 4\n- STEP_BY= 1\n- ZETA= -19422\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_6b1(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)4U; i < (size_t)4U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)-19422);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 6\n- STEP_BY= 1\n- ZETA= 1757237\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_440(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)6U; i < (size_t)6U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)1757237);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 1\n- ZETA= -3277672\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_a82(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)-3277672);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 10\n- STEP_BY= 1\n- ZETA= -1399561\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_1f0(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)10U; i < (size_t)10U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)-1399561);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 12\n- STEP_BY= 1\n- ZETA= -3859737\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_951(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)12U; i < (size_t)12U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)-3859737);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 14\n- STEP_BY= 1\n- ZETA= -2118186\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_3b2(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)14U; i < (size_t)14U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)-2118186);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 1\n- ZETA= -2108549\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_7a3(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)-2108549);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 18\n- STEP_BY= 1\n- ZETA= 2619752\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_e40(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)18U; i < (size_t)18U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)2619752);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 20\n- STEP_BY= 1\n- ZETA= -1119584\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_de1(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)20U; i < (size_t)20U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)-1119584);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 22\n- STEP_BY= 1\n- ZETA= -549488\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_050(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)22U; i < (size_t)22U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)-549488);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 1\n- ZETA= 3585928\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_d92(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)3585928);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 26\n- STEP_BY= 1\n- ZETA= -1079900\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_3a0(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)26U; i < (size_t)26U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)-1079900);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 28\n- STEP_BY= 1\n- ZETA= 1024112\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_3b00(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)28U; i < (size_t)28U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)1024112);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 30\n- STEP_BY= 1\n- ZETA= 2725464\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_a00(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)30U; i < (size_t)30U + (size_t)1U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)1U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)1U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)1U], (int32_t)2725464);\n  }\n}\n\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_3(Eurydice_arr_a4 *re)\n{\n  outer_3_plus_994(re);\n  outer_3_plus_1c0(re);\n  outer_3_plus_6b1(re);\n  outer_3_plus_440(re);\n  outer_3_plus_a82(re);\n  outer_3_plus_1f0(re);\n  outer_3_plus_951(re);\n  outer_3_plus_3b2(re);\n  outer_3_plus_7a3(re);\n  outer_3_plus_e40(re);\n  outer_3_plus_de1(re);\n  outer_3_plus_050(re);\n  outer_3_plus_d92(re);\n  outer_3_plus_3a0(re);\n  outer_3_plus_3b00(re);\n  outer_3_plus_a00(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 2\n- ZETA= 2680103\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_9900(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)2U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)2U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)2U], (int32_t)2680103);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 4\n- STEP_BY= 2\n- ZETA= 3111497\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_6b00(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)4U; i < (size_t)4U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)2U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)2U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)2U], (int32_t)3111497);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 2\n- ZETA= -2884855\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_a800(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)2U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)2U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)2U], (int32_t)-2884855);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 12\n- STEP_BY= 2\n- ZETA= 3119733\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_9500(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)12U; i < (size_t)12U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)2U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)2U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)2U], (int32_t)3119733);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 2\n- ZETA= -2091905\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_7a00(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)2U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)2U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)2U], (int32_t)-2091905);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 20\n- STEP_BY= 2\n- ZETA= -359251\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_de00(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)20U; i < (size_t)20U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)2U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)2U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)2U], (int32_t)-359251);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 2\n- ZETA= 2353451\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_d900(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)2U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)2U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)2U], (int32_t)2353451);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 28\n- STEP_BY= 2\n- ZETA= 1826347\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_3b10(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)28U; i < (size_t)28U + (size_t)2U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)2U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)2U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)2U], (int32_t)1826347);\n  }\n}\n\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_4(Eurydice_arr_a4 *re)\n{\n  outer_3_plus_9900(re);\n  outer_3_plus_6b00(re);\n  outer_3_plus_a800(re);\n  outer_3_plus_9500(re);\n  outer_3_plus_7a00(re);\n  outer_3_plus_de00(re);\n  outer_3_plus_d900(re);\n  outer_3_plus_3b10(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 4\n- ZETA= 466468\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_9910(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)4U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)4U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)4U], (int32_t)466468);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 8\n- STEP_BY= 4\n- ZETA= -876248\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_a810(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)8U; i < (size_t)8U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)4U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)4U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)4U], (int32_t)-876248);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 4\n- ZETA= -777960\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_7a10(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)4U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)4U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)4U], (int32_t)-777960);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 24\n- STEP_BY= 4\n- ZETA= 237124\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_d910(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)24U; i < (size_t)24U + (size_t)4U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)4U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)4U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)4U], (int32_t)237124);\n  }\n}\n\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_5(Eurydice_arr_a4 *re)\n{\n  outer_3_plus_9910(re);\n  outer_3_plus_a810(re);\n  outer_3_plus_7a10(re);\n  outer_3_plus_d910(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 8\n- ZETA= -518909\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_9920(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)8U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)8U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)8U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)8U], (int32_t)-518909);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 16\n- STEP_BY= 8\n- ZETA= -2608894\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_7a20(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)16U; i < (size_t)16U + (size_t)8U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)8U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)8U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)8U], (int32_t)-2608894);\n  }\n}\n\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_6(Eurydice_arr_a4 *re)\n{\n  outer_3_plus_9920(re);\n  outer_3_plus_7a20(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.invntt.outer_3_plus\nwith const generics\n- OFFSET= 0\n- STEP_BY= 16\n- ZETA= 25847\n*/\nstatic KRML_MUSTINLINE void outer_3_plus_9930(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)0U + (size_t)16U; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d4 rej = re->data[j];\n    Eurydice_arr_d4 rejs = re->data[j + (size_t)16U];\n    add(&re->data[j], &rejs);\n    subtract(&re->data[j + (size_t)16U], &rej);\n    montgomery_multiply_by_constant(&re->data[j + (size_t)16U], (int32_t)25847);\n  }\n}\n\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_7(Eurydice_arr_a4 *re)\n{\n  outer_3_plus_9930(re);\n}\n\nstatic KRML_MUSTINLINE void invert_ntt_montgomery(Eurydice_arr_a4 *re)\n{\n  invert_ntt_at_layer_0(re);\n  invert_ntt_at_layer_1(re);\n  invert_ntt_at_layer_2(re);\n  invert_ntt_at_layer_3(re);\n  invert_ntt_at_layer_4(re);\n  invert_ntt_at_layer_5(re);\n  invert_ntt_at_layer_6(re);\n  invert_ntt_at_layer_7(re);\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    montgomery_multiply_by_constant(&re->data[i0], (int32_t)41978);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void invert_ntt_montgomery_65(Eurydice_arr_a4 *simd_units)\n{\n  invert_ntt_montgomery(simd_units);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.arithmetic.shift_left_then_reduce\nwith const generics\n- SHIFT_BY= 0\n*/\nstatic KRML_MUSTINLINE void shift_left_then_reduce_c3(Eurydice_arr_d4 *simd_unit)\n{\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    simd_unit->data[i0] = reduce_element(simd_unit->data[i0] << (uint32_t)(int32_t)0););\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\nstatic void reduce_65(Eurydice_arr_a4 *simd_units)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    shift_left_then_reduce_c3(&simd_units->data[i0]);\n  }\n}\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_c5\nwith const generics\n- SIZE= 4627\n*/\nconst Eurydice_arr_38 *libcrux_ml_dsa_types_as_ref_c5_c2(const Eurydice_arr_38 *self)\n{\n  return self;\n}\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_7f\nwith const generics\n- SIZE= 2592\n*/\nconst Eurydice_arr_51 *libcrux_ml_dsa_types_as_ref_7f_d8(const Eurydice_arr_51 *self)\n{\n  return self;\n}\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_9b\nwith const generics\n- SIZE= 4896\n*/\nconst Eurydice_arr_180 *libcrux_ml_dsa_types_as_ref_9b_32(const Eurydice_arr_180 *self)\n{\n  return self;\n}\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_7f\nwith const generics\n- SIZE= 2592\n*/\nEurydice_arr_51 libcrux_ml_dsa_types_new_7f_d8(Eurydice_arr_51 value)\n{\n  return value;\n}\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_9b\nwith const generics\n- SIZE= 4896\n*/\nEurydice_arr_180 libcrux_ml_dsa_types_new_9b_32(Eurydice_arr_180 value)\n{\n  return value;\n}\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_c5\nwith const generics\n- SIZE= 2420\n*/\nconst Eurydice_arr_400 *libcrux_ml_dsa_types_as_ref_c5_1a(const Eurydice_arr_400 *self)\n{\n  return self;\n}\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_7f\nwith const generics\n- SIZE= 1312\n*/\nconst Eurydice_arr_40 *libcrux_ml_dsa_types_as_ref_7f_db(const Eurydice_arr_40 *self)\n{\n  return self;\n}\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_9b\nwith const generics\n- SIZE= 2560\n*/\nconst Eurydice_arr_18 *libcrux_ml_dsa_types_as_ref_9b_ff(const Eurydice_arr_18 *self)\n{\n  return self;\n}\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_7f\nwith const generics\n- SIZE= 1312\n*/\nEurydice_arr_40 libcrux_ml_dsa_types_new_7f_db(Eurydice_arr_40 value)\n{\n  return value;\n}\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_9b\nwith const generics\n- SIZE= 2560\n*/\nEurydice_arr_18 libcrux_ml_dsa_types_new_9b_ff(Eurydice_arr_18 value)\n{\n  return value;\n}\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_c5\nwith const generics\n- SIZE= 3309\n*/\nconst Eurydice_arr_96 *libcrux_ml_dsa_types_as_ref_c5_fa(const Eurydice_arr_96 *self)\n{\n  return self;\n}\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_7f\nwith const generics\n- SIZE= 1952\n*/\nconst Eurydice_arr_4a *libcrux_ml_dsa_types_as_ref_7f_97(const Eurydice_arr_4a *self)\n{\n  return self;\n}\n\n/**\n A reference to the raw byte array.\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.as_ref_9b\nwith const generics\n- SIZE= 4032\n*/\nconst Eurydice_arr_d1 *libcrux_ml_dsa_types_as_ref_9b_09(const Eurydice_arr_d1 *self)\n{\n  return self;\n}\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSAVerificationKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_7f\nwith const generics\n- SIZE= 1952\n*/\nEurydice_arr_4a libcrux_ml_dsa_types_new_7f_97(Eurydice_arr_4a value)\n{\n  return value;\n}\n\n/**\n Build\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASigningKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.new_9b\nwith const generics\n- SIZE= 4032\n*/\nEurydice_arr_d1 libcrux_ml_dsa_types_new_9b_09(Eurydice_arr_d1 value)\n{\n  return value;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 24\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_363(const Eurydice_arr_6d *a, core_ops_range_Range_08 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 24\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_369(Eurydice_arr_6d *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_46(Eurydice_arr_88 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_362(const Eurydice_arr_88 *a, core_ops_range_Range_08 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_368(Eurydice_arr_88 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 19\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_361(const Eurydice_arr_91 *a, core_ops_range_Range_08 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 19\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_367(Eurydice_arr_91 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t\n\n*/\nEurydice_dst_ref_mut_fc\nEurydice_slice_subslice_mut_46(Eurydice_dst_ref_mut_fc s, core_ops_range_Range_08 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_dst_ref_mut_fc){ .ptr = s.ptr + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_46(const Eurydice_arr_88 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_subslice_to_mut_6e(Eurydice_arr_60 *a, size_t r)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 4627\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_24(const Eurydice_arr_38 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4627U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2592\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_f7(const Eurydice_arr_51 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2592U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 4896\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_e2(const Eurydice_arr_180 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4896U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 4627\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_24(Eurydice_arr_38 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4627U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 8\n*/\nEurydice_dst_ref_shared_22 Eurydice_array_to_slice_shared_6d1(const Eurydice_arr_fb *a)\n{\n  Eurydice_dst_ref_shared_22 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 8\n*/\nEurydice_dst_ref_mut_22 Eurydice_array_to_slice_mut_6d1(Eurydice_arr_fb *a)\n{\n  Eurydice_dst_ref_mut_22 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1024\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_fd(const Eurydice_arr_9e *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1024U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1024\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_fd(Eurydice_arr_9e *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1024U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 56\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_718(const Eurydice_arr_46 *a)\n{\n  Eurydice_dst_ref_shared_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)56U;\n  return lit;\n}\n\n/**\n Init with zero\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.zero_c5\nwith const generics\n- SIZE= 4627\n*/\nEurydice_arr_38 libcrux_ml_dsa_types_zero_c5_c2(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_38){ .data = { 0U } });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 2592\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_f7(Eurydice_arr_51 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2592U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 4896\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_e2(Eurydice_arr_180 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4896U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 15\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_717(const Eurydice_arr_f8 *a)\n{\n  Eurydice_dst_ref_shared_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)15U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 7\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_716(const Eurydice_arr_25 *a)\n{\n  Eurydice_dst_ref_shared_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)7U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 15\n*/\nEurydice_dst_ref_shared_e7\nEurydice_array_to_subslice_shared_c31(const Eurydice_arr_f8 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_shared_e7){ .ptr = a->data + r.start, .meta = r.end - r.start }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 7\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_718(Eurydice_arr_25 *a)\n{\n  Eurydice_dst_ref_mut_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)7U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 56\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_717(Eurydice_arr_46 *a)\n{\n  Eurydice_dst_ref_mut_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)56U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 15\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_716(Eurydice_arr_f8 *a)\n{\n  Eurydice_dst_ref_mut_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)15U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 3309\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_ee0(const Eurydice_arr_96 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)3309U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1952\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_5b(const Eurydice_arr_4a *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1952U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 4032\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_ef(const Eurydice_arr_d1 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4032U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 3309\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_ee0(Eurydice_arr_96 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)3309U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 6\n*/\nEurydice_dst_ref_shared_22 Eurydice_array_to_slice_shared_6d0(const Eurydice_arr_b5 *a)\n{\n  Eurydice_dst_ref_shared_22 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)6U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 6\n*/\nEurydice_dst_ref_mut_22 Eurydice_array_to_slice_mut_6d0(Eurydice_arr_b5 *a)\n{\n  Eurydice_dst_ref_mut_22 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)6U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 48\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_95(const Eurydice_arr_5f *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)48U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 30\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_715(const Eurydice_arr_a1 *a)\n{\n  Eurydice_dst_ref_shared_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)30U;\n  return lit;\n}\n\n/**\n Init with zero\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.zero_c5\nwith const generics\n- SIZE= 3309\n*/\nEurydice_arr_96 libcrux_ml_dsa_types_zero_c5_fa(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_96){ .data = { 0U } });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1952\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_5b(Eurydice_arr_4a *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1952U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 4032\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_ef(Eurydice_arr_d1 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4032U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 6\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_714(const Eurydice_arr_a3 *a)\n{\n  Eurydice_dst_ref_shared_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)6U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 6\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_715(Eurydice_arr_a3 *a)\n{\n  Eurydice_dst_ref_mut_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)6U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 11\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_713(const Eurydice_arr_58 *a)\n{\n  Eurydice_dst_ref_shared_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)11U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 5\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_712(const Eurydice_arr_b0 *a)\n{\n  Eurydice_dst_ref_shared_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)5U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 11\n*/\nEurydice_dst_ref_shared_e7\nEurydice_array_to_subslice_shared_c30(const Eurydice_arr_58 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_shared_e7){ .ptr = a->data + r.start, .meta = r.end - r.start }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 5\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_714(Eurydice_arr_b0 *a)\n{\n  Eurydice_dst_ref_mut_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)5U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 30\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_713(Eurydice_arr_a1 *a)\n{\n  Eurydice_dst_ref_mut_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)30U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 11\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_712(Eurydice_arr_58 *a)\n{\n  Eurydice_dst_ref_mut_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)11U;\n  return lit;\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.zero_ff\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nEurydice_arr_a4 libcrux_ml_dsa_polynomial_zero_ff_37(void)\n{\n  Eurydice_arr_a4 lit;\n  Eurydice_arr_d4 repeat_expression[32U];\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    repeat_expression[i] = zero_65();\n  }\n  memcpy(lit.data, repeat_expression, (size_t)32U * sizeof (Eurydice_arr_d4));\n  return lit;\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.from_i32_array_ff\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_polynomial_from_i32_array_ff_37(\n  Eurydice_dst_ref_shared_fc array,\n  Eurydice_arr_a4 *result\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_DSA_SIMD_TRAITS_SIMD_UNITS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    from_coefficient_array_65(Eurydice_slice_subslice_shared_46(array,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT\n          }\n        )),\n      &result->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types int32_t\nwith const generics\n- N= 256\n*/\nEurydice_dst_ref_shared_fc Eurydice_array_to_slice_shared_200(const Eurydice_arr_c3 *a)\n{\n  Eurydice_dst_ref_shared_fc lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)256U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.use_hint\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_arithmetic_use_hint_37(\n  int32_t gamma2,\n  Eurydice_dst_ref_shared_22 hint,\n  Eurydice_dst_ref_mut_e7 re_vector\n)\n{\n  for (size_t i0 = (size_t)0U; i0 < re_vector.meta; i0++)\n  {\n    size_t i1 = i0;\n    Eurydice_arr_a4 tmp = libcrux_ml_dsa_polynomial_zero_ff_37();\n    libcrux_ml_dsa_polynomial_from_i32_array_ff_37(Eurydice_array_to_slice_shared_200(&hint.ptr[i1]),\n      &tmp);\n    for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n    {\n      size_t j = i;\n      use_hint_65(gamma2, &re_vector.ptr[i1].data[j], &tmp.data[j]);\n    }\n    re_vector.ptr[i1] = tmp;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ntt.ntt_multiply_montgomery\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nntt_multiply_montgomery_37(Eurydice_arr_a4 *lhs, const Eurydice_arr_a4 *rhs)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    montgomery_multiply_65(&lhs->data[i0], &rhs->data[i0]);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.add_ff\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void add_ff_37(Eurydice_arr_a4 *self, const Eurydice_arr_a4 *rhs)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    add_65(&self->data[i0], &rhs->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.arithmetic.shift_left_then_reduce\nwith const generics\n- SHIFT_BY= 13\n*/\nstatic KRML_MUSTINLINE void shift_left_then_reduce_84(Eurydice_arr_d4 *simd_unit)\n{\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    size_t i0 = i;\n    simd_unit->data[i0] = reduce_element(simd_unit->data[i0] << (uint32_t)(int32_t)13););\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::simd::traits::Operations for libcrux_ml_dsa::simd::portable::vector_type::Coefficients}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.simd.portable.shift_left_then_reduce_65\nwith const generics\n- SHIFT_BY= 13\n*/\nstatic void shift_left_then_reduce_65_84(Eurydice_arr_d4 *simd_unit)\n{\n  shift_left_then_reduce_84(simd_unit);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.shift_left_then_reduce\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- SHIFT_BY= 13\n*/\nstatic KRML_MUSTINLINE void shift_left_then_reduce_68(Eurydice_arr_a4 *re)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    shift_left_then_reduce_65_84(&re->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ntt.ntt\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid libcrux_ml_dsa_ntt_ntt_37(Eurydice_arr_a4 *re)\n{\n  ntt_65(re);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.subtract_ff\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void subtract_ff_37(Eurydice_arr_a4 *self, const Eurydice_arr_a4 *rhs)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    subtract_65(&self->data[i0], &rhs->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ntt.reduce\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void reduce_37(Eurydice_arr_a4 *re)\n{\n  reduce_65(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ntt.invert_ntt_montgomery\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_37(Eurydice_arr_a4 *re)\n{\n  invert_ntt_montgomery_65(re);\n}\n\n/**\n Compute InvertNTT(Â ◦ ẑ - ĉ ◦ NTT(t₁2ᵈ))\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.compute_w_approx\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_compute_w_approx_37(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  Eurydice_dst_ref_shared_e7 matrix,\n  Eurydice_dst_ref_shared_e7 signer_response,\n  const Eurydice_arr_a4 *verifier_challenge_as_ntt,\n  Eurydice_dst_ref_mut_e7 t1\n)\n{\n  for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)\n  {\n    size_t i1 = i0;\n    Eurydice_arr_a4 inner_result = libcrux_ml_dsa_polynomial_zero_ff_37();\n    for (size_t i = (size_t)0U; i < columns_in_a; i++)\n    {\n      size_t j = i;\n      Eurydice_arr_a4 product = matrix.ptr[i1 * columns_in_a + j];\n      ntt_multiply_montgomery_37(&product, &signer_response.ptr[j]);\n      add_ff_37(&inner_result, &product);\n    }\n    shift_left_then_reduce_68(&t1.ptr[i1]);\n    libcrux_ml_dsa_ntt_ntt_37(&t1.ptr[i1]);\n    ntt_multiply_montgomery_37(&t1.ptr[i1], verifier_challenge_as_ntt);\n    subtract_ff_37(&inner_result, &t1.ptr[i1]);\n    t1.ptr[i1] = inner_result;\n    reduce_37(&t1.ptr[i1]);\n    invert_ntt_montgomery_37(&t1.ptr[i1]);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2420\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_180(const Eurydice_arr_400 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2420U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_slice_subslice_mut_7e(Eurydice_mut_borrow_slice_u8 s, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = s.ptr + r.start, .meta = r.end - r.start }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.gamma1.deserialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_gamma1_deserialize_37(\n  size_t gamma1_exponent,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_arr_a4 *result\n)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    gamma1_deserialize_65(Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (gamma1_exponent + (size_t)1U),\n            .end = (i0 + (size_t)1U) * (gamma1_exponent + (size_t)1U)\n          }\n        )),\n      &result->data[i0],\n      gamma1_exponent);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.signature.deserialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_encoding_signature_deserialize_37(\n  size_t columns_in_a,\n  size_t rows_in_a,\n  size_t commitment_hash_size,\n  size_t gamma1_exponent,\n  size_t gamma1_ring_element_size,\n  size_t max_ones_in_hint,\n  size_t signature_size,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_mut_borrow_slice_u8 out_commitment_hash,\n  Eurydice_dst_ref_mut_e7 out_signer_response,\n  Eurydice_dst_ref_mut_22 out_hint\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(serialized,\n      commitment_hash_size,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 commitment_hash = uu____0.fst;\n  Eurydice_borrow_slice_u8 rest_of_serialized = uu____0.snd;\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out_commitment_hash,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = commitment_hash_size })),\n    commitment_hash,\n    uint8_t);\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(rest_of_serialized,\n      gamma1_ring_element_size * columns_in_a,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 signer_response_serialized = uu____1.fst;\n  Eurydice_borrow_slice_u8 hint_serialized = uu____1.snd;\n  for (size_t i = (size_t)0U; i < columns_in_a; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n      Eurydice_slice_subslice_shared_7e(signer_response_serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * gamma1_ring_element_size,\n            .end = (i0 + (size_t)1U) * gamma1_ring_element_size\n          }\n        )),\n      &out_signer_response.ptr[i0]);\n  }\n  size_t previous_true_hints_seen = (size_t)0U;\n  bool malformed_hint = false;\n  for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)\n  {\n    size_t i1 = i0;\n    size_t current_true_hints_seen = (size_t)hint_serialized.ptr[max_ones_in_hint + i1];\n    if (current_true_hints_seen < previous_true_hints_seen)\n    {\n      malformed_hint = true;\n      break;\n    }\n    if (current_true_hints_seen > max_ones_in_hint)\n    {\n      malformed_hint = true;\n      break;\n    }\n    for (size_t i = previous_true_hints_seen; i < current_true_hints_seen; i++)\n    {\n      size_t j = i;\n      if (j > previous_true_hints_seen)\n      {\n        if (hint_serialized.ptr[j] <= hint_serialized.ptr[j - (size_t)1U])\n        {\n          malformed_hint = true;\n          break;\n        }\n      }\n      libcrux_ml_dsa_encoding_signature_set_hint(out_hint, i1, (size_t)hint_serialized.ptr[j]);\n    }\n    if (malformed_hint)\n    {\n      break;\n    }\n    previous_true_hints_seen = current_true_hints_seen;\n  }\n  for (size_t i = previous_true_hints_seen; i < max_ones_in_hint; i++)\n  {\n    size_t j = i;\n    if (hint_serialized.ptr[j] != 0U)\n    {\n      malformed_hint = true;\n      break;\n    }\n  }\n  core_result_Result_41 uu____2;\n  if (malformed_hint)\n  {\n    uu____2 =\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_MalformedHintError\n        }\n      );\n  }\n  else\n  {\n    uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });\n  }\n  return uu____2;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t1.deserialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic void deserialize_37(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_a4 *result)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    t1_deserialize_65(Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_ENCODING_T1_DESERIALIZE_WINDOW,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_ENCODING_T1_DESERIALIZE_WINDOW\n          }\n        )),\n      &result->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.verification_key.deserialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_verification_key_deserialize_37(\n  size_t rows_in_a,\n  size_t verification_key_size,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_dst_ref_mut_e7 t1\n)\n{\n  for (size_t i = (size_t)0U; i < rows_in_a; i++)\n  {\n    size_t i0 = i;\n    deserialize_37(Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE\n          }\n        )),\n      &t1.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1312\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_bb(const Eurydice_arr_40 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1312U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2560\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_59(const Eurydice_arr_18 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2560U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 2420\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_180(Eurydice_arr_400 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2420U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 4\n*/\nEurydice_dst_ref_shared_22 Eurydice_array_to_slice_shared_6d(const Eurydice_arr_83 *a)\n{\n  Eurydice_dst_ref_shared_22 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.gamma1.serialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nserialize_37(\n  const Eurydice_arr_a4 *re,\n  Eurydice_mut_borrow_slice_u8 serialized,\n  size_t gamma1_exponent\n)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    const Eurydice_arr_d4 *simd_unit = &re->data[i0];\n    gamma1_serialize_65(simd_unit,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * (gamma1_exponent + (size_t)1U),\n            .end = (i0 + (size_t)1U) * (gamma1_exponent + (size_t)1U)\n          }\n        )),\n      gamma1_exponent);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.signature.serialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_signature_serialize_37(\n  Eurydice_borrow_slice_u8 commitment_hash,\n  Eurydice_dst_ref_shared_e7 signer_response,\n  Eurydice_dst_ref_shared_22 hint,\n  size_t commitment_hash_size,\n  size_t columns_in_a,\n  size_t rows_in_a,\n  size_t gamma1_exponent,\n  size_t gamma1_ring_element_size,\n  size_t max_ones_in_hint,\n  Eurydice_mut_borrow_slice_u8 signature\n)\n{\n  size_t offset = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(signature,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = offset,\n          .end = offset + commitment_hash_size\n        }\n      )),\n    commitment_hash,\n    uint8_t);\n  offset = offset + commitment_hash_size;\n  for (size_t i = (size_t)0U; i < columns_in_a; i++)\n  {\n    size_t i0 = i;\n    serialize_37(&signer_response.ptr[i0],\n      Eurydice_slice_subslice_mut_7e(signature,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = offset,\n            .end = offset + gamma1_ring_element_size\n          }\n        )),\n      gamma1_exponent);\n    offset = offset + gamma1_ring_element_size;\n  }\n  size_t true_hints_seen = (size_t)0U;\n  for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)256U; i++)\n    {\n      size_t j = i;\n      if (hint.ptr[i1].data[j] == (int32_t)1)\n      {\n        signature.ptr[offset + true_hints_seen] = (uint8_t)j;\n        true_hints_seen++;\n      }\n    }\n    signature.ptr[offset + max_ones_in_hint + i1] = (uint8_t)true_hints_seen;\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types Eurydice_arr int32_t[[$256size_t]]\nwith const generics\n- N= 4\n*/\nEurydice_dst_ref_mut_22 Eurydice_array_to_slice_mut_6d(Eurydice_arr_83 *a)\n{\n  Eurydice_dst_ref_mut_22 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types int32_t, core_ops_range_Range size_t, Eurydice_derefed_slice int32_t\nwith const generics\n- N= 256\n*/\nEurydice_dst_ref_mut_fc\nEurydice_array_to_subslice_mut_7f(Eurydice_arr_c3 *a, core_ops_range_Range_08 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_dst_ref_mut_fc){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.to_i32_array_ff\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic Eurydice_arr_c3 to_i32_array_ff_37(const Eurydice_arr_a4 *self)\n{\n  Eurydice_arr_c3 result = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    to_coefficient_array_65(&self->data[i0],\n      Eurydice_array_to_subslice_mut_7f(&result,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT\n          }\n        )));\n  }\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.make_hint\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nsize_t\nlibcrux_ml_dsa_arithmetic_make_hint_37(\n  Eurydice_dst_ref_shared_e7 low,\n  Eurydice_dst_ref_shared_e7 high,\n  int32_t gamma2,\n  Eurydice_dst_ref_mut_22 hint\n)\n{\n  size_t true_hints = (size_t)0U;\n  Eurydice_arr_a4 hint_simd = libcrux_ml_dsa_polynomial_zero_ff_37();\n  for (size_t i0 = (size_t)0U; i0 < low.meta; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n    {\n      size_t j = i;\n      size_t\n      one_hints_count =\n        compute_hint_65(&low.ptr[i1].data[j],\n          &high.ptr[i1].data[j],\n          gamma2,\n          &hint_simd.data[j]);\n      true_hints = true_hints + one_hints_count;\n    }\n    Eurydice_arr_c3 uu____0 = to_i32_array_ff_37(&hint_simd);\n    hint.ptr[i1] = uu____0;\n  }\n  return true_hints;\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::polynomial::PolynomialRingElement<SIMDUnit>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.polynomial.infinity_norm_exceeds_ff\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE bool\ninfinity_norm_exceeds_ff_37(const Eurydice_arr_a4 *self, int32_t bound)\n{\n  bool result = false;\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    bool uu____0;\n    if (result)\n    {\n      uu____0 = true;\n    }\n    else\n    {\n      uu____0 = infinity_norm_exceeds_65(&self->data[i0], bound);\n    }\n    result = uu____0;\n  }\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.vector_infinity_norm_exceeds\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nbool\nlibcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(\n  Eurydice_dst_ref_shared_e7 vector,\n  int32_t bound\n)\n{\n  bool result = false;\n  for (size_t i = (size_t)0U; i < vector.meta; i++)\n  {\n    size_t i0 = i;\n    bool uu____0;\n    if (result)\n    {\n      uu____0 = true;\n    }\n    else\n    {\n      uu____0 = infinity_norm_exceeds_ff_37(&vector.ptr[i0], bound);\n    }\n    result = uu____0;\n  }\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.subtract_vectors\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_subtract_vectors_37(\n  size_t dimension,\n  Eurydice_dst_ref_mut_e7 lhs,\n  Eurydice_dst_ref_shared_e7 rhs\n)\n{\n  for (size_t i = (size_t)0U; i < dimension; i++)\n  {\n    size_t i0 = i;\n    subtract_ff_37(&lhs.ptr[i0], &rhs.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.add_vectors\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_add_vectors_37(\n  size_t dimension,\n  Eurydice_dst_ref_mut_e7 lhs,\n  Eurydice_dst_ref_shared_e7 rhs\n)\n{\n  for (size_t i = (size_t)0U; i < dimension; i++)\n  {\n    size_t i0 = i;\n    add_ff_37(&lhs.ptr[i0], &rhs.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.vector_times_ring_element\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_vector_times_ring_element_37(\n  Eurydice_dst_ref_mut_e7 vector,\n  const Eurydice_arr_a4 *ring_element\n)\n{\n  for (size_t i = (size_t)0U; i < vector.meta; i++)\n  {\n    size_t i0 = i;\n    ntt_multiply_montgomery_37(&vector.ptr[i0], ring_element);\n    invert_ntt_montgomery_37(&vector.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_8c(const Eurydice_arr_3d *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)136U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_360(const Eurydice_arr_3d *a, core_ops_range_Range_08 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_ee(const Eurydice_arr_56 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)768U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_ee(Eurydice_arr_56 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)768U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.commitment.serialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nserialize_370(const Eurydice_arr_a4 *re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  size_t output_bytes_per_simd_unit = serialized.meta / ((size_t)8U * (size_t)4U);\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    const Eurydice_arr_d4 *simd_unit = &re->data[i0];\n    commitment_serialize_65(simd_unit,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * output_bytes_per_simd_unit,\n            .end = (i0 + (size_t)1U) * output_bytes_per_simd_unit\n          }\n        )));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.commitment.serialize_vector\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_commitment_serialize_vector_37(\n  size_t ring_element_size,\n  Eurydice_dst_ref_shared_e7 vector,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  size_t offset = (size_t)0U;\n  for (size_t i = (size_t)0U; i < vector.meta; i++)\n  {\n    size_t _cloop_j = i;\n    const Eurydice_arr_a4 *ring_element = &vector.ptr[_cloop_j];\n    serialize_370(ring_element,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = offset,\n            .end = offset + ring_element_size\n          }\n        )));\n    offset = offset + ring_element_size;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.decompose_vector\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_arithmetic_decompose_vector_37(\n  size_t dimension,\n  int32_t gamma2,\n  Eurydice_dst_ref_shared_e7 t,\n  Eurydice_dst_ref_mut_e7 low,\n  Eurydice_dst_ref_mut_e7 high\n)\n{\n  for (size_t i0 = (size_t)0U; i0 < dimension; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n    {\n      size_t j = i;\n      decompose_65(gamma2, &t.ptr[i1].data[j], &low.ptr[i1].data[j], &high.ptr[i1].data[j]);\n    }\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 16\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_711(const Eurydice_arr_66 *a)\n{\n  Eurydice_dst_ref_shared_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\n Compute InvertNTT(Â ◦ ŷ)\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.compute_matrix_x_mask\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_compute_matrix_x_mask_37(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  Eurydice_dst_ref_shared_e7 matrix,\n  Eurydice_dst_ref_shared_e7 mask,\n  Eurydice_dst_ref_mut_e7 result\n)\n{\n  for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < columns_in_a; i++)\n    {\n      size_t j = i;\n      Eurydice_arr_a4 product = mask.ptr[j];\n      ntt_multiply_montgomery_37(&product, &matrix.ptr[i1 * columns_in_a + j]);\n      add_ff_37(&result.ptr[i1], &product);\n    }\n    reduce_37(&result.ptr[i1]);\n    invert_ntt_montgomery_37(&result.ptr[i1]);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 640\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_7d0(const Eurydice_arr_c30 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)640U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 640\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_7d(Eurydice_arr_c30 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)640U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 576\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_fa(const Eurydice_arr_5f0 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)576U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 576\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_fa(Eurydice_arr_5f0 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)576U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 11\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_da(const Eurydice_arr_cb *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)11U;\n  return lit;\n}\n\n/**\n Returns `true` if the option is a [`Some`] value.\n\n # Examples\n\n ```\n let x: Option<u32> = Some(2);\n assert_eq!(x.is_some(), true);\n\n let x: Option<u32> = None;\n assert_eq!(x.is_some(), false);\n ```\n*/\n/**\nThis function found in impl {core::option::Option<T>[TraitClause@0]}\n*/\n/**\nA monomorphic instance of core.option.is_some_cd\nwith types Eurydice_arr uint8_t[[$11size_t]]\n\n*/\nbool core_option_is_some_cd_4e(const core_option_Option_b5 *self)\n{\n  return (ptrdiff_t)self->tag == (ptrdiff_t)1;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_07(const Eurydice_arr_f10 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t0.deserialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_370(Eurydice_borrow_slice_u8 serialized, Eurydice_arr_a4 *result)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    t0_deserialize_65(Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT\n          }\n        )),\n      &result->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t0.deserialize_to_vector_then_ntt\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_t0_deserialize_to_vector_then_ntt_37(\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_dst_ref_mut_e7 ring_elements\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < serialized.meta / LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE,\n            .end = i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE +\n              LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE\n          }\n        ));\n    deserialize_370(bytes, &ring_elements.ptr[i0]);\n    libcrux_ml_dsa_ntt_ntt_37(&ring_elements.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.error.deserialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_371(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_arr_a4 *result\n)\n{\n  size_t chunk_size = libcrux_ml_dsa_encoding_error_chunk_size(eta);\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    error_deserialize_65(eta,\n      Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * chunk_size,\n            .end = (i0 + (size_t)1U) * chunk_size\n          }\n        )),\n      &result->data[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.error.deserialize_to_vector_then_ntt\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(\n  libcrux_ml_dsa_constants_Eta eta,\n  size_t ring_element_size,\n  Eurydice_borrow_slice_u8 serialized,\n  Eurydice_dst_ref_mut_e7 ring_elements\n)\n{\n  for (size_t i = (size_t)0U; i < serialized.meta / ring_element_size; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * ring_element_size,\n            .end = i0 * ring_element_size + ring_element_size\n          }\n        ));\n    deserialize_371(eta, bytes, &ring_elements.ptr[i0]);\n    libcrux_ml_dsa_ntt_ntt_37(&ring_elements.ptr[i0]);\n  }\n}\n\n/**\n Init with zero\n*/\n/**\nThis function found in impl {libcrux_ml_dsa::types::MLDSASignature<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.types.zero_c5\nwith const generics\n- SIZE= 2420\n*/\nEurydice_arr_400 libcrux_ml_dsa_types_zero_c5_1a(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_400){ .data = { 0U } });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1312\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_bb(Eurydice_arr_40 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1312U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 2560\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_59(Eurydice_arr_18 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2560U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t0.serialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_t0_serialize_37(\n  const Eurydice_arr_a4 *re,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    const Eurydice_arr_d4 *simd_unit = &re->data[i0];\n    t0_serialize_65(simd_unit,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_DSA_ENCODING_T0_OUTPUT_BYTES_PER_SIMD_UNIT\n          }\n        )));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.error.serialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_error_serialize_37(\n  libcrux_ml_dsa_constants_Eta eta,\n  const Eurydice_arr_a4 *re,\n  Eurydice_mut_borrow_slice_u8 serialized\n)\n{\n  size_t output_bytes_per_simd_unit = libcrux_ml_dsa_encoding_error_chunk_size(eta);\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    const Eurydice_arr_d4 *simd_unit = &re->data[i0];\n    error_serialize_65(eta,\n      simd_unit,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * output_bytes_per_simd_unit,\n            .end = (i0 + (size_t)1U) * output_bytes_per_simd_unit\n          }\n        )));\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_d8(const Eurydice_arr_060 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)64U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.t1.serialize\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nserialize_371(const Eurydice_arr_a4 *re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n  {\n    size_t i0 = i;\n    const Eurydice_arr_d4 *simd_unit = &re->data[i0];\n    t1_serialize_65(simd_unit,\n      Eurydice_slice_subslice_mut_7e(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = i0 * LIBCRUX_ML_DSA_ENCODING_T1_SERIALIZE_OUTPUT_BYTES_PER_SIMD_UNIT,\n            .end = (i0 + (size_t)1U) *\n              LIBCRUX_ML_DSA_ENCODING_T1_SERIALIZE_OUTPUT_BYTES_PER_SIMD_UNIT\n          }\n        )));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.verification_key.generate_serialized\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_encoding_verification_key_generate_serialized_37(\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_shared_e7 t1,\n  Eurydice_mut_borrow_slice_u8 verification_key_serialized\n)\n{\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(verification_key_serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE\n        }\n      )),\n    seed,\n    uint8_t);\n  for (size_t i = (size_t)0U; i < t1.meta; i++)\n  {\n    size_t i0 = i;\n    const Eurydice_arr_a4 *ring_element = &t1.ptr[i0];\n    size_t\n    offset =\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE +\n        i0 * LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE;\n    serialize_371(ring_element,\n      Eurydice_slice_subslice_mut_7e(verification_key_serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = offset,\n            .end = offset + LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T1S_SIZE\n          }\n        )));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.arithmetic.power2round_vector\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_arithmetic_power2round_vector_37(\n  Eurydice_dst_ref_mut_e7 t,\n  Eurydice_dst_ref_mut_e7 t1\n)\n{\n  for (size_t i0 = (size_t)0U; i0 < t.meta; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)32U; i++)\n    {\n      size_t j = i;\n      power2round_65(&t.ptr[i1].data[j], &t1.ptr[i1].data[j]);\n    }\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 8\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_710(const Eurydice_arr_db *a)\n{\n  Eurydice_dst_ref_shared_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 4\n*/\nEurydice_dst_ref_shared_e7 Eurydice_array_to_slice_shared_71(const Eurydice_arr_a80 *a)\n{\n  Eurydice_dst_ref_shared_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\n/**\n Compute InvertNTT(Â ◦ ŝ₁) + s₂\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.matrix.compute_as1_plus_s2\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_matrix_compute_as1_plus_s2_37(\n  size_t rows_in_a,\n  size_t columns_in_a,\n  Eurydice_dst_ref_mut_e7 a_as_ntt,\n  Eurydice_dst_ref_shared_e7 s1_ntt,\n  Eurydice_dst_ref_shared_e7 s1_s2,\n  Eurydice_dst_ref_mut_e7 result\n)\n{\n  for (size_t i0 = (size_t)0U; i0 < rows_in_a; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < columns_in_a; i++)\n    {\n      size_t j = i;\n      ntt_multiply_montgomery_37(&a_as_ntt.ptr[i1 * columns_in_a + j], &s1_ntt.ptr[j]);\n      add_ff_37(&result.ptr[i1], &a_as_ntt.ptr[i1 * columns_in_a + j]);\n    }\n  }\n  for (size_t i = (size_t)0U; i < result.meta; i++)\n  {\n    size_t i0 = i;\n    reduce_37(&result.ptr[i0]);\n    invert_ntt_montgomery_37(&result.ptr[i0]);\n    add_ff_37(&result.ptr[i0], &s1_s2.ptr[columns_in_a + i0]);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients, core_ops_range_Range size_t, Eurydice_derefed_slice libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 8\n*/\nEurydice_dst_ref_shared_e7\nEurydice_array_to_subslice_shared_c3(const Eurydice_arr_db *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_shared_e7){ .ptr = a->data + r.start, .meta = r.end - r.start }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 4\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_711(Eurydice_arr_a80 *a)\n{\n  Eurydice_dst_ref_mut_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 16\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_710(Eurydice_arr_66 *a)\n{\n  Eurydice_dst_ref_mut_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types Eurydice_arr int32_t[[$263size_t]]\nwith const generics\n- N= 4\n*/\nEurydice_dst_ref_mut_4c Eurydice_array_to_slice_mut_f6(Eurydice_arr_380 *a)\n{\n  Eurydice_dst_ref_mut_4c lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 840\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_a8(const Eurydice_arr_12 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)840U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types int32_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice int32_t\nwith const generics\n- N= 263\n*/\nEurydice_dst_ref_mut_fc Eurydice_array_to_subslice_from_mut_96(Eurydice_arr_13 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_dst_ref_mut_fc){ .ptr = a->data + r, .meta = (size_t)263U - r });\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_field_modulus\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nbool\nlibcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *sampled_coefficients,\n  Eurydice_arr_13 *out\n)\n{\n  bool done = false;\n  for (size_t i = (size_t)0U; i < randomness.meta / (size_t)24U; i++)\n  {\n    size_t _cloop_i = i;\n    Eurydice_borrow_slice_u8\n    random_bytes =\n      Eurydice_slice_subslice_shared_7e(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = _cloop_i * (size_t)24U,\n            .end = _cloop_i * (size_t)24U + (size_t)24U\n          }\n        ));\n    if (!done)\n    {\n      size_t\n      sampled =\n        rejection_sample_less_than_field_modulus_65(random_bytes,\n          Eurydice_array_to_subslice_from_mut_96(out, sampled_coefficients[0U]));\n      sampled_coefficients[0U] = sampled_coefficients[0U] + sampled;\n      if (sampled_coefficients[0U] >= LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        done = true;\n      }\n    }\n  }\n  return done;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 34\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_8d(const Eurydice_arr_48 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)34U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- N= 8\n*/\nEurydice_dst_ref_mut_e7 Eurydice_array_to_slice_mut_71(Eurydice_arr_db *a)\n{\n  Eurydice_dst_ref_mut_e7 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types int32_t\nwith const generics\n- N= 263\n*/\nEurydice_dst_ref_shared_fc Eurydice_array_to_slice_shared_20(const Eurydice_arr_13 *a)\n{\n  Eurydice_dst_ref_shared_fc lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)263U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_eta_equals_4\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE bool\nrejection_sample_less_than_eta_equals_4_37(\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *sampled_coefficients,\n  Eurydice_arr_13 *out\n)\n{\n  bool done = false;\n  for (size_t i = (size_t)0U; i < randomness.meta / (size_t)4U; i++)\n  {\n    size_t _cloop_i = i;\n    Eurydice_borrow_slice_u8\n    random_bytes =\n      Eurydice_slice_subslice_shared_7e(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = _cloop_i * (size_t)4U,\n            .end = _cloop_i * (size_t)4U + (size_t)4U\n          }\n        ));\n    if (!done)\n    {\n      size_t\n      sampled =\n        rejection_sample_less_than_eta_equals_4_65(random_bytes,\n          Eurydice_array_to_subslice_from_mut_96(out, sampled_coefficients[0U]));\n      sampled_coefficients[0U] = sampled_coefficients[0U] + sampled;\n      if (sampled_coefficients[0U] >= LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        done = true;\n      }\n    }\n  }\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_eta_equals_2\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE bool\nrejection_sample_less_than_eta_equals_2_37(\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *sampled_coefficients,\n  Eurydice_arr_13 *out\n)\n{\n  bool done = false;\n  for (size_t i = (size_t)0U; i < randomness.meta / (size_t)4U; i++)\n  {\n    size_t _cloop_i = i;\n    Eurydice_borrow_slice_u8\n    random_bytes =\n      Eurydice_slice_subslice_shared_7e(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = _cloop_i * (size_t)4U,\n            .end = _cloop_i * (size_t)4U + (size_t)4U\n          }\n        ));\n    if (!done)\n    {\n      size_t\n      sampled =\n        rejection_sample_less_than_eta_equals_2_65(random_bytes,\n          Eurydice_array_to_subslice_from_mut_96(out, sampled_coefficients[0U]));\n      sampled_coefficients[0U] = sampled_coefficients[0U] + sampled;\n      if (sampled_coefficients[0U] >= LIBCRUX_ML_DSA_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        done = true;\n      }\n    }\n  }\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.rejection_sample_less_than_eta\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nbool\nlibcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 randomness,\n  size_t *sampled,\n  Eurydice_arr_13 *out\n)\n{\n  switch (eta)\n  {\n    case libcrux_ml_dsa_constants_Eta_Two:\n      {\n        break;\n      }\n    case libcrux_ml_dsa_constants_Eta_Four:\n      {\n        return rejection_sample_less_than_eta_equals_4_37(randomness, sampled, out);\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  return rejection_sample_less_than_eta_equals_2_37(randomness, sampled, out);\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 66\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_39(const Eurydice_arr_a2 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)66U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 128\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_18(const Eurydice_arr_d10 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)128U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 128\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_18(Eurydice_arr_d10 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)128U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_26(const Eurydice_array_u8x2 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_6e(const Eurydice_arr_60 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)32U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_7b(Eurydice_arr_27 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)168U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 840\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_a8(Eurydice_arr_12 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)840U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_d4(Eurydice_arr_3d *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)136U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 48\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_95(Eurydice_arr_5f *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)48U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 28\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_c0(Eurydice_arr_f1 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)28U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_9c(const Eurydice_arr_181 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)104U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_366(Eurydice_arr_181 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_d1(const Eurydice_arr_a8 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)144U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_365(Eurydice_arr_a8 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_36(const Eurydice_arr_60 *a, core_ops_range_Range_08 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_6e(Eurydice_arr_60 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)32U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_364(Eurydice_arr_60 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_d8(Eurydice_arr_060 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)64U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_7d(const Eurydice_arr_a0 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)72U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_363(Eurydice_arr_a0 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_borrow_slice_u8\nEurydice_slice_subslice_to_shared_c6(Eurydice_borrow_slice_u8 s, size_t r)\n{\n  return (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = s.ptr, .meta = r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_8c(Eurydice_arr_3d *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)136U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_to_shared_6e(const Eurydice_array_u8x8 *a, size_t r)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_41(const Eurydice_array_u8x8 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_d4(const Eurydice_arr_3d *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)136U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_362(Eurydice_arr_3d *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_7b(const Eurydice_arr_27 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)168U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$8size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_array_u8x8 core_result_unwrap_26_ab(core_result_Result_8e self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_361(Eurydice_arr_27 *a, core_ops_range_Range_08 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa_core.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mldsa_core_H\n#define libcrux_mldsa_core_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_option_None 0\n#define core_option_Some 1\n\ntypedef uint8_t core_option_Option_08_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types size_t\n\n*/\ntypedef struct core_option_Option_08_s\n{\n  core_option_Option_08_tags tag;\n  size_t f0;\n}\ncore_option_Option_08;\n\nstatic inline uint64_t core_num__u64__from_le_bytes(Eurydice_array_u8x8 x0);\n\nstatic inline uint64_t core_num__u64__rotate_left(uint64_t x0, uint32_t x1);\n\nstatic inline Eurydice_array_u8x8 core_num__u64__to_le_bytes(uint64_t x0);\n\n/**\nA monomorphic instance of core.ops.range.Range\nwith types size_t\n\n*/\ntypedef struct core_ops_range_Range_08_s\n{\n  size_t start;\n  size_t end;\n}\ncore_ops_range_Range_08;\n\n#define libcrux_ml_dsa_constants_Eta_Two 2\n#define libcrux_ml_dsa_constants_Eta_Four 4\n\ntypedef uint8_t libcrux_ml_dsa_constants_Eta;\n\n#define LIBCRUX_ML_DSA_SIMD_TRAITS_COEFFICIENTS_IN_SIMD_UNIT ((size_t)8U)\n\n#define LIBCRUX_ML_DSA_CONSTANTS_BITS_IN_LOWER_PART_OF_T ((size_t)13U)\n\n#define libcrux_ml_dsa_types_VerificationError_MalformedHintError 0\n#define libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError 1\n#define libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError 2\n#define libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError 3\n\ntypedef uint8_t libcrux_ml_dsa_types_VerificationError;\n\n#define libcrux_ml_dsa_types_SigningError_RejectionSamplingError 0\n#define libcrux_ml_dsa_types_SigningError_ContextTooLongError 1\n\ntypedef uint8_t libcrux_ml_dsa_types_SigningError;\n\n#define core_result_Ok 0\n#define core_result_Err 1\n\ntypedef uint8_t core_result_Result_a8_tags;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int32_t\nwith const generics\n- $8size_t\n*/\ntypedef struct Eurydice_arr_d4_s { int32_t data[8U]; } Eurydice_arr_d4;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types int32_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_fc_s\n{\n  const int32_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_fc;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types int32_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_fc_s\n{\n  int32_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_fc;\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_borrow_slice_u8\nEurydice_slice_subslice_shared_7e(Eurydice_borrow_slice_u8 s, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n- $32size_t\n*/\ntypedef struct Eurydice_arr_a4_s { Eurydice_arr_d4 data[32U]; } Eurydice_arr_a4;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $2560size_t\n*/\ntypedef struct Eurydice_arr_18_s { uint8_t data[2560U]; } Eurydice_arr_18;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1312size_t\n*/\ntypedef struct Eurydice_arr_40_s { uint8_t data[1312U]; } Eurydice_arr_40;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $4032size_t\n*/\ntypedef struct Eurydice_arr_d1_s { uint8_t data[4032U]; } Eurydice_arr_d1;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1952size_t\n*/\ntypedef struct Eurydice_arr_4a_s { uint8_t data[1952U]; } Eurydice_arr_4a;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $4896size_t\n*/\ntypedef struct Eurydice_arr_180_s { uint8_t data[4896U]; } Eurydice_arr_180;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $2592size_t\n*/\ntypedef struct Eurydice_arr_51_s { uint8_t data[2592U]; } Eurydice_arr_51;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $4627size_t\n*/\ntypedef struct Eurydice_arr_38_s { uint8_t data[4627U]; } Eurydice_arr_38;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $2420size_t\n*/\ntypedef struct Eurydice_arr_400_s { uint8_t data[2420U]; } Eurydice_arr_400;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $3309size_t\n*/\ntypedef struct Eurydice_arr_96_s { uint8_t data[3309U]; } Eurydice_arr_96;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_88_s { uint8_t data[16U]; } Eurydice_arr_88;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_88\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_0e_s { Eurydice_arr_88 data[16U]; } Eurydice_arr_0e;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $32size_t\n*/\ntypedef struct Eurydice_arr_60_s { uint8_t data[32U]; } Eurydice_arr_60;\n\n/**\nA monomorphic instance of core.result.Result\nwith types libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87Signature, libcrux_ml_dsa_types_SigningError\n\n*/\ntypedef struct core_result_Result_8b_s\n{\n  core_result_Result_a8_tags tag;\n  union {\n    Eurydice_arr_38 case_Ok;\n    libcrux_ml_dsa_types_SigningError case_Err;\n  }\n  val;\n}\ncore_result_Result_8b;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $64size_t\n*/\ntypedef struct Eurydice_arr_060_s { uint8_t data[64U]; } Eurydice_arr_060;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types libcrux_ml_dsa_polynomial_PolynomialRingElement_e8, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_e7_s\n{\n  Eurydice_arr_a4 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_e7;\n\n/**\nA monomorphic instance of core.result.Result\nwith types libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65Signature, libcrux_ml_dsa_types_SigningError\n\n*/\ntypedef struct core_result_Result_8c_s\n{\n  core_result_Result_a8_tags tag;\n  union {\n    Eurydice_arr_96 case_Ok;\n    libcrux_ml_dsa_types_SigningError case_Err;\n  }\n  val;\n}\ncore_result_Result_8c;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $48size_t\n*/\ntypedef struct Eurydice_arr_5f_s { uint8_t data[48U]; } Eurydice_arr_5f;\n\n/**\nA monomorphic instance of core.result.Result\nwith types (), libcrux_ml_dsa_types_VerificationError\n\n*/\ntypedef struct core_result_Result_41_s\n{\n  core_result_Result_a8_tags tag;\n  libcrux_ml_dsa_types_VerificationError f0;\n}\ncore_result_Result_41;\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_slice_subslice_mut_7e(Eurydice_mut_borrow_slice_u8 s, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of core.result.Result\nwith types libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44Signature, libcrux_ml_dsa_types_SigningError\n\n*/\ntypedef struct core_result_Result_48_s\n{\n  core_result_Result_a8_tags tag;\n  union {\n    Eurydice_arr_400 case_Ok;\n    libcrux_ml_dsa_types_SigningError case_Err;\n  }\n  val;\n}\ncore_result_Result_48;\n\n/**\nA monomorphic instance of core.result.Result\nwith types (), libcrux_ml_dsa_types_SigningError\n\n*/\ntypedef struct core_result_Result_53_s\n{\n  core_result_Result_a8_tags tag;\n  libcrux_ml_dsa_types_SigningError f0;\n}\ncore_result_Result_53;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $136size_t\n*/\ntypedef struct Eurydice_arr_3d_s { uint8_t data[136U]; } Eurydice_arr_3d;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $640size_t\n*/\ntypedef struct Eurydice_arr_c30_s { uint8_t data[640U]; } Eurydice_arr_c30;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $576size_t\n*/\ntypedef struct Eurydice_arr_5f0_s { uint8_t data[576U]; } Eurydice_arr_5f0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $840size_t\n*/\ntypedef struct Eurydice_arr_12_s { uint8_t data[840U]; } Eurydice_arr_12;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $168size_t\n*/\ntypedef struct Eurydice_arr_27_s { uint8_t data[168U]; } Eurydice_arr_27;\n\ntypedef struct Eurydice_arr_27_x4_s\n{\n  Eurydice_arr_27 fst;\n  Eurydice_arr_27 snd;\n  Eurydice_arr_27 thd;\n  Eurydice_arr_27 f3;\n}\nEurydice_arr_27_x4;\n\ntypedef struct Eurydice_arr_3d_x4_s\n{\n  Eurydice_arr_3d fst;\n  Eurydice_arr_3d snd;\n  Eurydice_arr_3d thd;\n  Eurydice_arr_3d f3;\n}\nEurydice_arr_3d_x4;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 48\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_95(Eurydice_arr_5f *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $28size_t\n*/\ntypedef struct Eurydice_arr_f1_s { uint8_t data[28U]; } Eurydice_arr_f1;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 28\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_c0(Eurydice_arr_f1 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $104size_t\n*/\ntypedef struct Eurydice_arr_181_s { uint8_t data[104U]; } Eurydice_arr_181;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_9c(const Eurydice_arr_181 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_366(Eurydice_arr_181 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $144size_t\n*/\ntypedef struct Eurydice_arr_a8_s { uint8_t data[144U]; } Eurydice_arr_a8;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_d1(const Eurydice_arr_a8 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_365(Eurydice_arr_a8 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_6e(Eurydice_arr_60 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_to_shared_6e(const Eurydice_array_u8x8 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_41(const Eurydice_array_u8x8 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_d4(const Eurydice_arr_3d *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_362(Eurydice_arr_3d *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint64_t\nwith const generics\n- $5size_t\n*/\ntypedef struct Eurydice_arr_a5_s { uint64_t data[5U]; } Eurydice_arr_a5;\n\ntypedef struct size_t_x2_s\n{\n  size_t fst;\n  size_t snd;\n}\nsize_t_x2;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_borrow_slice_u8\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_06_s { Eurydice_borrow_slice_u8 data[1U]; } Eurydice_arr_06;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_7b(const Eurydice_arr_27 *a);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_array_u8x8, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_8e_s\n{\n  core_result_Result_a8_tags tag;\n  union {\n    Eurydice_array_u8x8 case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_8e;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$8size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_array_u8x8 core_result_unwrap_26_ab(core_result_Result_8e self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_361(Eurydice_arr_27 *a, core_ops_range_Range_08 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint64_t\nwith const generics\n- $24size_t\n*/\ntypedef struct Eurydice_arr_a7_s { uint64_t data[24U]; } Eurydice_arr_a7;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_3d\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_3e_s { Eurydice_arr_3d data[1U]; } Eurydice_arr_3e;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint64_t\nwith const generics\n- $25size_t\n*/\ntypedef struct Eurydice_arr_26_s { uint64_t data[25U]; } Eurydice_arr_26;\n\ntypedef struct libcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair_s\n{\n  Eurydice_arr_180 signing_key;\n  Eurydice_arr_51 verification_key;\n}\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_87_MLDSA87KeyPair;\n\ntypedef struct libcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair_s\n{\n  Eurydice_arr_d1 signing_key;\n  Eurydice_arr_4a verification_key;\n}\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_65_MLDSA65KeyPair;\n\ntypedef struct libcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair_s\n{\n  Eurydice_arr_18 signing_key;\n  Eurydice_arr_40 verification_key;\n}\nlibcrux_ml_dsa_ml_dsa_generic_ml_dsa_44_MLDSA44KeyPair;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mldsa_core_H_DEFINED\n#endif /* libcrux_mldsa_core_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mldsa_portable.h\"\n\n#include \"libcrux_sha3_internal.h\"\n#include \"libcrux_sha3.h\"\n#include \"libcrux_mldsa_core.h\"\n#include \"internal/libcrux_sha3_internal.h\"\n#include \"internal/libcrux_mldsa_core.h\"\n\nKRML_MUSTINLINE libcrux_ml_dsa_hash_functions_portable_Shake128X4\nlibcrux_ml_dsa_hash_functions_portable_init_absorb(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n)\n{\n  Eurydice_arr_26 state0 = libcrux_sha3_portable_incremental_shake128_init();\n  libcrux_sha3_portable_incremental_shake128_absorb_final(&state0, input0);\n  Eurydice_arr_26 state1 = libcrux_sha3_portable_incremental_shake128_init();\n  libcrux_sha3_portable_incremental_shake128_absorb_final(&state1, input1);\n  Eurydice_arr_26 state2 = libcrux_sha3_portable_incremental_shake128_init();\n  libcrux_sha3_portable_incremental_shake128_absorb_final(&state2, input2);\n  Eurydice_arr_26 state3 = libcrux_sha3_portable_incremental_shake128_init();\n  libcrux_sha3_portable_incremental_shake128_absorb_final(&state3, input3);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_dsa_hash_functions_portable_Shake128X4){\n        .state0 = state0,\n        .state1 = state1,\n        .state2 = state2,\n        .state3 = state3\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_26\nlibcrux_ml_dsa_hash_functions_portable_init_absorb_final_shake256(\n  Eurydice_borrow_slice_u8 input\n)\n{\n  Eurydice_arr_26 state = libcrux_sha3_portable_incremental_shake256_init();\n  libcrux_sha3_portable_incremental_shake256_absorb_final(&state, input);\n  return state;\n}\n\nKRML_MUSTINLINE libcrux_ml_dsa_hash_functions_portable_Shake256X4\nlibcrux_ml_dsa_hash_functions_portable_init_absorb_x4(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n)\n{\n  Eurydice_arr_26 state0 = libcrux_sha3_portable_incremental_shake256_init();\n  libcrux_sha3_portable_incremental_shake256_absorb_final(&state0, input0);\n  Eurydice_arr_26 state1 = libcrux_sha3_portable_incremental_shake256_init();\n  libcrux_sha3_portable_incremental_shake256_absorb_final(&state1, input1);\n  Eurydice_arr_26 state2 = libcrux_sha3_portable_incremental_shake256_init();\n  libcrux_sha3_portable_incremental_shake256_absorb_final(&state2, input2);\n  Eurydice_arr_26 state3 = libcrux_sha3_portable_incremental_shake256_init();\n  libcrux_sha3_portable_incremental_shake256_absorb_final(&state3, input3);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_dsa_hash_functions_portable_Shake256X4){\n        .state0 = state0,\n        .state1 = state1,\n        .state2 = state2,\n        .state3 = state3\n      }\n    );\n}\n\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_shake128(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_portable_shake128(out, input);\n}\n\nKRML_MUSTINLINE Eurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_block_shake256(Eurydice_arr_26 *state)\n{\n  Eurydice_arr_3d out = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_first_block(state,\n    Eurydice_array_to_slice_mut_d4(&out));\n  return out;\n}\n\nKRML_MUSTINLINE Eurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_block_x4(\n  libcrux_ml_dsa_hash_functions_portable_Shake256X4 *state\n)\n{\n  Eurydice_arr_3d out0 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_first_block(&state->state0,\n    Eurydice_array_to_slice_mut_d4(&out0));\n  Eurydice_arr_3d out1 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_first_block(&state->state1,\n    Eurydice_array_to_slice_mut_d4(&out1));\n  Eurydice_arr_3d out2 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_first_block(&state->state2,\n    Eurydice_array_to_slice_mut_d4(&out2));\n  Eurydice_arr_3d out3 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_first_block(&state->state3,\n    Eurydice_array_to_slice_mut_d4(&out3));\n  return\n    (KRML_CLITERAL(Eurydice_arr_3d_x4){ .fst = out0, .snd = out1, .thd = out2, .f3 = out3 });\n}\n\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_five_blocks(\n  libcrux_ml_dsa_hash_functions_portable_Shake128X4 *state,\n  Eurydice_arr_12 *out0,\n  Eurydice_arr_12 *out1,\n  Eurydice_arr_12 *out2,\n  Eurydice_arr_12 *out3\n)\n{\n  libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(&state->state0,\n    Eurydice_array_to_slice_mut_a8(out0));\n  libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(&state->state1,\n    Eurydice_array_to_slice_mut_a8(out1));\n  libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(&state->state2,\n    Eurydice_array_to_slice_mut_a8(out2));\n  libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(&state->state3,\n    Eurydice_array_to_slice_mut_a8(out3));\n}\n\nKRML_MUSTINLINE Eurydice_arr_27_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block(\n  libcrux_ml_dsa_hash_functions_portable_Shake128X4 *state\n)\n{\n  Eurydice_arr_27 out0 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&state->state0,\n    Eurydice_array_to_slice_mut_7b(&out0));\n  Eurydice_arr_27 out1 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&state->state1,\n    Eurydice_array_to_slice_mut_7b(&out1));\n  Eurydice_arr_27 out2 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&state->state2,\n    Eurydice_array_to_slice_mut_7b(&out2));\n  Eurydice_arr_27 out3 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&state->state3,\n    Eurydice_array_to_slice_mut_7b(&out3));\n  return\n    (KRML_CLITERAL(Eurydice_arr_27_x4){ .fst = out0, .snd = out1, .thd = out2, .f3 = out3 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block_shake256(Eurydice_arr_26 *state)\n{\n  Eurydice_arr_3d out = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_next_block(state,\n    Eurydice_array_to_slice_mut_d4(&out));\n  return out;\n}\n\nKRML_MUSTINLINE Eurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4(\n  libcrux_ml_dsa_hash_functions_portable_Shake256X4 *state\n)\n{\n  Eurydice_arr_3d out0 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_next_block(&state->state0,\n    Eurydice_array_to_slice_mut_d4(&out0));\n  Eurydice_arr_3d out1 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_next_block(&state->state1,\n    Eurydice_array_to_slice_mut_d4(&out1));\n  Eurydice_arr_3d out2 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_next_block(&state->state2,\n    Eurydice_array_to_slice_mut_d4(&out2));\n  Eurydice_arr_3d out3 = { .data = { 0U } };\n  libcrux_sha3_portable_incremental_shake256_squeeze_next_block(&state->state3,\n    Eurydice_array_to_slice_mut_d4(&out3));\n  return\n    (KRML_CLITERAL(Eurydice_arr_3d_x4){ .fst = out0, .snd = out1, .thd = out2, .f3 = out3 });\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::Xof for libcrux_ml_dsa::hash_functions::portable::Shake128}\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_shake128_7b(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_ml_dsa_hash_functions_portable_shake128(input, out);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake128X4}\n*/\nKRML_MUSTINLINE libcrux_ml_dsa_hash_functions_portable_Shake128X4\nlibcrux_ml_dsa_hash_functions_portable_init_absorb_11(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n)\n{\n  return libcrux_ml_dsa_hash_functions_portable_init_absorb(input0, input1, input2, input3);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake128X4}\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_five_blocks_11(\n  libcrux_ml_dsa_hash_functions_portable_Shake128X4 *self,\n  Eurydice_arr_12 *out0,\n  Eurydice_arr_12 *out1,\n  Eurydice_arr_12 *out2,\n  Eurydice_arr_12 *out3\n)\n{\n  libcrux_ml_dsa_hash_functions_portable_squeeze_first_five_blocks(self, out0, out1, out2, out3);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake128X4}\n*/\nKRML_MUSTINLINE Eurydice_arr_27_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(\n  libcrux_ml_dsa_hash_functions_portable_Shake128X4 *self\n)\n{\n  return libcrux_ml_dsa_hash_functions_portable_squeeze_next_block(self);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\nKRML_MUSTINLINE Eurydice_arr_26\nlibcrux_ml_dsa_hash_functions_portable_init_absorb_final_61(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_dsa_hash_functions_portable_init_absorb_final_shake256(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\nKRML_MUSTINLINE Eurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_block_61(Eurydice_arr_26 *self)\n{\n  return libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_shake256(self);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\nKRML_MUSTINLINE Eurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block_61(Eurydice_arr_26 *self)\n{\n  return libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_shake256(self);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_absorb_26(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  Eurydice_borrow_slice_u8 input\n)\n{\n  libcrux_sha3_portable_incremental_absorb_42(self, input);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_absorb_final_26(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  Eurydice_borrow_slice_u8 input\n)\n{\n  libcrux_sha3_portable_incremental_absorb_final_42(self, input);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}\n*/\nlibcrux_sha3_generic_keccak_xof_KeccakXofState_e2\nlibcrux_ml_dsa_hash_functions_portable_init_26(void)\n{\n  return libcrux_sha3_portable_incremental_new_42();\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_squeeze_26(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_portable_incremental_squeeze_42(self, out);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}\n*/\nKRML_MUSTINLINE libcrux_ml_dsa_hash_functions_portable_Shake256X4\nlibcrux_ml_dsa_hash_functions_portable_init_absorb_x4_9b(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n)\n{\n  return libcrux_ml_dsa_hash_functions_portable_init_absorb_x4(input0, input1, input2, input3);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}\n*/\nKRML_MUSTINLINE Eurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_block_x4_9b(\n  libcrux_ml_dsa_hash_functions_portable_Shake256X4 *self\n)\n{\n  return libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_x4(self);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}\n*/\nKRML_MUSTINLINE Eurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(\n  libcrux_ml_dsa_hash_functions_portable_Shake256X4 *self\n)\n{\n  return libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4(self);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.sample_four_error_ring_elements\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nsample_four_error_ring_elements_29(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 seed,\n  uint16_t start_index,\n  Eurydice_dst_ref_mut_e7 re\n)\n{\n  Eurydice_arr_a2 seed0 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, start_index);\n  Eurydice_arr_a2\n  seed1 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, (uint32_t)start_index + 1U);\n  Eurydice_arr_a2\n  seed2 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, (uint32_t)start_index + 2U);\n  Eurydice_arr_a2\n  seed3 = libcrux_ml_dsa_sample_add_error_domain_separator(seed, (uint32_t)start_index + 3U);\n  libcrux_ml_dsa_hash_functions_portable_Shake256X4\n  state =\n    libcrux_ml_dsa_hash_functions_portable_init_absorb_x4_9b(Eurydice_array_to_slice_shared_39(&seed0),\n      Eurydice_array_to_slice_shared_39(&seed1),\n      Eurydice_array_to_slice_shared_39(&seed2),\n      Eurydice_array_to_slice_shared_39(&seed3));\n  Eurydice_arr_3d_x4\n  randomnesses0 = libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_x4_9b(&state);\n  Eurydice_arr_380\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  size_t sampled0 = (size_t)0U;\n  size_t sampled1 = (size_t)0U;\n  size_t sampled2 = (size_t)0U;\n  size_t sampled3 = (size_t)0U;\n  libcrux_ml_dsa_constants_Eta uu____0 = eta;\n  bool\n  done0 =\n    libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____0,\n      Eurydice_array_to_slice_shared_d4(&randomnesses0.fst),\n      &sampled0,\n      out.data);\n  libcrux_ml_dsa_constants_Eta uu____1 = eta;\n  bool\n  done1 =\n    libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____1,\n      Eurydice_array_to_slice_shared_d4(&randomnesses0.snd),\n      &sampled1,\n      &out.data[1U]);\n  libcrux_ml_dsa_constants_Eta uu____2 = eta;\n  bool\n  done2 =\n    libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____2,\n      Eurydice_array_to_slice_shared_d4(&randomnesses0.thd),\n      &sampled2,\n      &out.data[2U]);\n  libcrux_ml_dsa_constants_Eta uu____3 = eta;\n  bool\n  done3 =\n    libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____3,\n      Eurydice_array_to_slice_shared_d4(&randomnesses0.f3),\n      &sampled3,\n      &out.data[3U]);\n  while (true)\n  {\n    if (done0)\n    {\n      if (done1)\n      {\n        if (done2)\n        {\n          if (done3)\n          {\n            break;\n          }\n          else\n          {\n            Eurydice_arr_3d_x4\n            randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(&state);\n            if (!done0)\n            {\n              libcrux_ml_dsa_constants_Eta uu____4 = eta;\n              done0 =\n                libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____4,\n                  Eurydice_array_to_slice_shared_d4(&randomnesses.fst),\n                  &sampled0,\n                  out.data);\n            }\n            if (!done1)\n            {\n              libcrux_ml_dsa_constants_Eta uu____5 = eta;\n              done1 =\n                libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____5,\n                  Eurydice_array_to_slice_shared_d4(&randomnesses.snd),\n                  &sampled1,\n                  &out.data[1U]);\n            }\n            if (!done2)\n            {\n              libcrux_ml_dsa_constants_Eta uu____6 = eta;\n              done2 =\n                libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____6,\n                  Eurydice_array_to_slice_shared_d4(&randomnesses.thd),\n                  &sampled2,\n                  &out.data[2U]);\n            }\n            if (!done3)\n            {\n              libcrux_ml_dsa_constants_Eta uu____7 = eta;\n              done3 =\n                libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____7,\n                  Eurydice_array_to_slice_shared_d4(&randomnesses.f3),\n                  &sampled3,\n                  &out.data[3U]);\n            }\n          }\n        }\n        else\n        {\n          Eurydice_arr_3d_x4\n          randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(&state);\n          if (!done0)\n          {\n            libcrux_ml_dsa_constants_Eta uu____8 = eta;\n            done0 =\n              libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____8,\n                Eurydice_array_to_slice_shared_d4(&randomnesses.fst),\n                &sampled0,\n                out.data);\n          }\n          if (!done1)\n          {\n            libcrux_ml_dsa_constants_Eta uu____9 = eta;\n            done1 =\n              libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____9,\n                Eurydice_array_to_slice_shared_d4(&randomnesses.snd),\n                &sampled1,\n                &out.data[1U]);\n          }\n          if (!done2)\n          {\n            libcrux_ml_dsa_constants_Eta uu____10 = eta;\n            done2 =\n              libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____10,\n                Eurydice_array_to_slice_shared_d4(&randomnesses.thd),\n                &sampled2,\n                &out.data[2U]);\n          }\n          if (!done3)\n          {\n            libcrux_ml_dsa_constants_Eta uu____11 = eta;\n            done3 =\n              libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____11,\n                Eurydice_array_to_slice_shared_d4(&randomnesses.f3),\n                &sampled3,\n                &out.data[3U]);\n          }\n        }\n      }\n      else\n      {\n        Eurydice_arr_3d_x4\n        randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(&state);\n        if (!done0)\n        {\n          libcrux_ml_dsa_constants_Eta uu____12 = eta;\n          done0 =\n            libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____12,\n              Eurydice_array_to_slice_shared_d4(&randomnesses.fst),\n              &sampled0,\n              out.data);\n        }\n        if (!done1)\n        {\n          libcrux_ml_dsa_constants_Eta uu____13 = eta;\n          done1 =\n            libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____13,\n              Eurydice_array_to_slice_shared_d4(&randomnesses.snd),\n              &sampled1,\n              &out.data[1U]);\n        }\n        if (!done2)\n        {\n          libcrux_ml_dsa_constants_Eta uu____14 = eta;\n          done2 =\n            libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____14,\n              Eurydice_array_to_slice_shared_d4(&randomnesses.thd),\n              &sampled2,\n              &out.data[2U]);\n        }\n        if (!done3)\n        {\n          libcrux_ml_dsa_constants_Eta uu____15 = eta;\n          done3 =\n            libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____15,\n              Eurydice_array_to_slice_shared_d4(&randomnesses.f3),\n              &sampled3,\n              &out.data[3U]);\n        }\n      }\n    }\n    else\n    {\n      Eurydice_arr_3d_x4\n      randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(&state);\n      if (!done0)\n      {\n        libcrux_ml_dsa_constants_Eta uu____16 = eta;\n        done0 =\n          libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____16,\n            Eurydice_array_to_slice_shared_d4(&randomnesses.fst),\n            &sampled0,\n            out.data);\n      }\n      if (!done1)\n      {\n        libcrux_ml_dsa_constants_Eta uu____17 = eta;\n        done1 =\n          libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____17,\n            Eurydice_array_to_slice_shared_d4(&randomnesses.snd),\n            &sampled1,\n            &out.data[1U]);\n      }\n      if (!done2)\n      {\n        libcrux_ml_dsa_constants_Eta uu____18 = eta;\n        done2 =\n          libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____18,\n            Eurydice_array_to_slice_shared_d4(&randomnesses.thd),\n            &sampled2,\n            &out.data[2U]);\n      }\n      if (!done3)\n      {\n        libcrux_ml_dsa_constants_Eta uu____19 = eta;\n        done3 =\n          libcrux_ml_dsa_sample_rejection_sample_less_than_eta_37(uu____19,\n            Eurydice_array_to_slice_shared_d4(&randomnesses.f3),\n            &sampled3,\n            &out.data[3U]);\n      }\n    }\n  }\n  size_t max0 = (size_t)start_index + (size_t)4U;\n  size_t max;\n  if (re.meta < max0)\n  {\n    max = re.meta;\n  }\n  else\n  {\n    max = max0;\n  }\n  for (size_t i = (size_t)start_index; i < max; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_polynomial_from_i32_array_ff_37(Eurydice_array_to_slice_shared_20(&out.data[i0 %\n          (size_t)4U]),\n      &re.ptr[i0]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.samplex4.sample_s1_and_s2\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nsample_s1_and_s2_29(\n  libcrux_ml_dsa_constants_Eta eta,\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_mut_e7 s1_s2\n)\n{\n  size_t len = s1_s2.meta;\n  for (size_t i = (size_t)0U; i < len / (size_t)4U; i++)\n  {\n    size_t i0 = i;\n    sample_four_error_ring_elements_29(eta, seed, 4U * (uint32_t)(uint16_t)i0, s1_s2);\n  }\n  size_t remainder = len % (size_t)4U;\n  if (remainder != (size_t)0U)\n  {\n    sample_four_error_ring_elements_29(eta, seed, (uint16_t)(len - remainder), s1_s2);\n  }\n}\n\n/**\n Sample and write out up to four ring elements.\n\n If i <= `elements_requested`, a field element with domain separated\n seed according to the provided index is generated in\n `tmp_stack[i]`. After successful rejection sampling in\n `tmp_stack[i]`, the ring element is written to `matrix` at the\n provided index in `indices[i]`.\n `rand_stack` is a working buffer that holds initial Shake output.\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.sample_up_to_four_ring_elements_flat\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake128X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nsample_up_to_four_ring_elements_flat_63(\n  size_t columns,\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_mut_e7 matrix,\n  Eurydice_arr_12 *rand_stack0,\n  Eurydice_arr_12 *rand_stack1,\n  Eurydice_arr_12 *rand_stack2,\n  Eurydice_arr_12 *rand_stack3,\n  Eurydice_dst_ref_mut_4c tmp_stack,\n  size_t start_index,\n  size_t elements_requested\n)\n{\n  Eurydice_arr_48\n  seed0 =\n    libcrux_ml_dsa_sample_add_domain_separator(seed,\n      libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index, columns));\n  Eurydice_arr_48\n  seed1 =\n    libcrux_ml_dsa_sample_add_domain_separator(seed,\n      libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index + (size_t)1U,\n        columns));\n  Eurydice_arr_48\n  seed2 =\n    libcrux_ml_dsa_sample_add_domain_separator(seed,\n      libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index + (size_t)2U,\n        columns));\n  Eurydice_arr_48\n  seed3 =\n    libcrux_ml_dsa_sample_add_domain_separator(seed,\n      libcrux_ml_dsa_sample_sample_up_to_four_ring_elements_flat_xy(start_index + (size_t)3U,\n        columns));\n  libcrux_ml_dsa_hash_functions_portable_Shake128X4\n  state =\n    libcrux_ml_dsa_hash_functions_portable_init_absorb_11(Eurydice_array_to_slice_shared_8d(&seed0),\n      Eurydice_array_to_slice_shared_8d(&seed1),\n      Eurydice_array_to_slice_shared_8d(&seed2),\n      Eurydice_array_to_slice_shared_8d(&seed3));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_first_five_blocks_11(&state,\n    rand_stack0,\n    rand_stack1,\n    rand_stack2,\n    rand_stack3);\n  size_t sampled0 = (size_t)0U;\n  size_t sampled1 = (size_t)0U;\n  size_t sampled2 = (size_t)0U;\n  size_t sampled3 = (size_t)0U;\n  bool\n  done0 =\n    libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_a8(rand_stack0),\n      &sampled0,\n      tmp_stack.ptr);\n  bool\n  done1 =\n    libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_a8(rand_stack1),\n      &sampled1,\n      &tmp_stack.ptr[1U]);\n  bool\n  done2 =\n    libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_a8(rand_stack2),\n      &sampled2,\n      &tmp_stack.ptr[2U]);\n  bool\n  done3 =\n    libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_a8(rand_stack3),\n      &sampled3,\n      &tmp_stack.ptr[3U]);\n  while (true)\n  {\n    if (done0)\n    {\n      if (done1)\n      {\n        if (done2)\n        {\n          if (done3)\n          {\n            break;\n          }\n          else\n          {\n            Eurydice_arr_27_x4\n            randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(&state);\n            if (!done0)\n            {\n              done0 =\n                libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.fst),\n                  &sampled0,\n                  tmp_stack.ptr);\n            }\n            if (!done1)\n            {\n              done1 =\n                libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.snd),\n                  &sampled1,\n                  &tmp_stack.ptr[1U]);\n            }\n            if (!done2)\n            {\n              done2 =\n                libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.thd),\n                  &sampled2,\n                  &tmp_stack.ptr[2U]);\n            }\n            if (!done3)\n            {\n              done3 =\n                libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.f3),\n                  &sampled3,\n                  &tmp_stack.ptr[3U]);\n            }\n          }\n        }\n        else\n        {\n          Eurydice_arr_27_x4\n          randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(&state);\n          if (!done0)\n          {\n            done0 =\n              libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.fst),\n                &sampled0,\n                tmp_stack.ptr);\n          }\n          if (!done1)\n          {\n            done1 =\n              libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.snd),\n                &sampled1,\n                &tmp_stack.ptr[1U]);\n          }\n          if (!done2)\n          {\n            done2 =\n              libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.thd),\n                &sampled2,\n                &tmp_stack.ptr[2U]);\n          }\n          if (!done3)\n          {\n            done3 =\n              libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.f3),\n                &sampled3,\n                &tmp_stack.ptr[3U]);\n          }\n        }\n      }\n      else\n      {\n        Eurydice_arr_27_x4\n        randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(&state);\n        if (!done0)\n        {\n          done0 =\n            libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.fst),\n              &sampled0,\n              tmp_stack.ptr);\n        }\n        if (!done1)\n        {\n          done1 =\n            libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.snd),\n              &sampled1,\n              &tmp_stack.ptr[1U]);\n        }\n        if (!done2)\n        {\n          done2 =\n            libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.thd),\n              &sampled2,\n              &tmp_stack.ptr[2U]);\n        }\n        if (!done3)\n        {\n          done3 =\n            libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.f3),\n              &sampled3,\n              &tmp_stack.ptr[3U]);\n        }\n      }\n    }\n    else\n    {\n      Eurydice_arr_27_x4\n      randomnesses = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(&state);\n      if (!done0)\n      {\n        done0 =\n          libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.fst),\n            &sampled0,\n            tmp_stack.ptr);\n      }\n      if (!done1)\n      {\n        done1 =\n          libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.snd),\n            &sampled1,\n            &tmp_stack.ptr[1U]);\n      }\n      if (!done2)\n      {\n        done2 =\n          libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.thd),\n            &sampled2,\n            &tmp_stack.ptr[2U]);\n      }\n      if (!done3)\n      {\n        done3 =\n          libcrux_ml_dsa_sample_rejection_sample_less_than_field_modulus_37(Eurydice_array_to_slice_shared_7b(&randomnesses.f3),\n            &sampled3,\n            &tmp_stack.ptr[3U]);\n      }\n    }\n  }\n  for (size_t i = (size_t)0U; i < elements_requested; i++)\n  {\n    size_t k = i;\n    libcrux_ml_dsa_polynomial_from_i32_array_ff_37(Eurydice_array_to_slice_shared_20(&tmp_stack.ptr[k]),\n      &matrix.ptr[start_index + k]);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.samplex4.matrix_flat\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake128X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nmatrix_flat_63(size_t columns, Eurydice_borrow_slice_u8 seed, Eurydice_dst_ref_mut_e7 matrix)\n{\n  Eurydice_arr_12 rand_stack0 = { .data = { 0U } };\n  Eurydice_arr_12 rand_stack1 = { .data = { 0U } };\n  Eurydice_arr_12 rand_stack2 = { .data = { 0U } };\n  Eurydice_arr_12 rand_stack3 = { .data = { 0U } };\n  Eurydice_arr_380\n  tmp_stack =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  for (size_t i = (size_t)0U; i < matrix.meta / (size_t)4U + (size_t)1U; i++)\n  {\n    size_t start_index = i;\n    size_t start_index0 = start_index * (size_t)4U;\n    if (start_index0 >= matrix.meta)\n    {\n      break;\n    }\n    size_t elements_requested;\n    if (start_index0 + (size_t)4U <= matrix.meta)\n    {\n      elements_requested = (size_t)4U;\n    }\n    else\n    {\n      elements_requested = matrix.meta - start_index0;\n    }\n    sample_up_to_four_ring_elements_flat_63(columns,\n      seed,\n      matrix,\n      &rand_stack0,\n      &rand_stack1,\n      &rand_stack2,\n      &rand_stack3,\n      Eurydice_array_to_slice_mut_f6(&tmp_stack),\n      start_index0,\n      elements_requested);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::samplex4::X4Sampler for libcrux_ml_dsa::samplex4::portable::PortableSampler}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.samplex4.portable.matrix_flat_a8\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(\n  size_t columns,\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_mut_e7 matrix\n)\n{\n  matrix_flat_63(columns, seed, matrix);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256\nwith const generics\n- OUTPUT_LENGTH= 64\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_shake256_24(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_060 *out\n)\n{\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_d8(out), input);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_61\nwith const generics\n- OUTPUT_LENGTH= 64\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_shake256_61_24(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_060 *out\n)\n{\n  libcrux_ml_dsa_hash_functions_portable_shake256_24(input, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.encoding.signing_key.generate_serialized\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ngenerate_serialized_2e(\n  libcrux_ml_dsa_constants_Eta eta,\n  size_t error_ring_element_size,\n  Eurydice_borrow_slice_u8 seed_matrix,\n  Eurydice_borrow_slice_u8 seed_signing,\n  Eurydice_borrow_slice_u8 verification_key,\n  Eurydice_dst_ref_shared_e7 s1_2,\n  Eurydice_dst_ref_shared_e7 t0,\n  Eurydice_mut_borrow_slice_u8 signing_key_serialized\n)\n{\n  size_t offset = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(signing_key_serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = offset,\n          .end = offset + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE\n        }\n      )),\n    seed_matrix,\n    uint8_t);\n  offset = offset + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE;\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(signing_key_serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = offset,\n          .end = offset + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE\n        }\n      )),\n    seed_signing,\n    uint8_t);\n  offset = offset + LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE;\n  Eurydice_arr_060 verification_key_hash = { .data = { 0U } };\n  libcrux_ml_dsa_hash_functions_portable_shake256_61_24(verification_key,\n    &verification_key_hash);\n  Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(signing_key_serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = offset,\n          .end = offset + LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH\n        }\n      )),\n    Eurydice_array_to_slice_shared_d8(&verification_key_hash),\n    uint8_t);\n  offset = offset + LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH;\n  for (size_t i = (size_t)0U; i < s1_2.meta; i++)\n  {\n    size_t i0 = i;\n    libcrux_ml_dsa_encoding_error_serialize_37(eta,\n      &s1_2.ptr[i0],\n      Eurydice_slice_subslice_mut_7e(signing_key_serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = offset,\n            .end = offset + error_ring_element_size\n          }\n        )));\n    offset = offset + error_ring_element_size;\n  }\n  for (size_t i = (size_t)0U; i < t0.meta; i++)\n  {\n    size_t _cloop_j = i;\n    const Eurydice_arr_a4 *ring_element = &t0.ptr[_cloop_j];\n    libcrux_ml_dsa_encoding_t0_serialize_37(ring_element,\n      Eurydice_slice_subslice_mut_7e(signing_key_serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = offset,\n            .end = offset + LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE\n          }\n        )));\n    offset = offset + LIBCRUX_ML_DSA_CONSTANTS_RING_ELEMENT_OF_T0S_SIZE;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.generate_key_pair\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ngenerate_key_pair_5a(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  Eurydice_arr_d10 seed_expanded0 = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x2\n  lvalue =\n    {\n      .data = {\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A\n      }\n    };\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n    Eurydice_array_to_slice_shared_26(&lvalue));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n    Eurydice_array_to_slice_mut_18(&seed_expanded0));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_18(&seed_expanded0),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_expanded = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(seed_expanded,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_error_vectors = uu____1.fst;\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.snd;\n  Eurydice_arr_db s1_s2;\n  Eurydice_arr_a4 repeat_expression0[8U];\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s1_s2.data, repeat_expression0, (size_t)8U * sizeof (Eurydice_arr_a4));\n  sample_s1_and_s2_29(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,\n    seed_for_error_vectors,\n    Eurydice_array_to_slice_mut_71(&s1_s2));\n  Eurydice_arr_a80 t0;\n  Eurydice_arr_a4 repeat_expression1[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t0.data, repeat_expression1, (size_t)4U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_66 a_as_ntt;\n  Eurydice_arr_a4 repeat_expression2[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(a_as_ntt.data, repeat_expression2, (size_t)16U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n    seed_for_a,\n    Eurydice_array_to_slice_mut_710(&a_as_ntt));\n  Eurydice_arr_a80 s1_ntt;\n  Eurydice_arr_a4 repeat_expression3[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s1_ntt.data, repeat_expression3, (size_t)4U * sizeof (Eurydice_arr_a4));\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_711(&s1_ntt),\n    Eurydice_array_to_subslice_shared_c3(&s1_s2,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A\n        }\n      )),\n    Eurydice_arr_a4);\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_ml_dsa_ntt_ntt_37(&s1_ntt.data[i0]););\n  libcrux_ml_dsa_matrix_compute_as1_plus_s2_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n    LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n    Eurydice_array_to_slice_mut_710(&a_as_ntt),\n    Eurydice_array_to_slice_shared_71(&s1_ntt),\n    Eurydice_array_to_slice_shared_710(&s1_s2),\n    Eurydice_array_to_slice_mut_711(&t0));\n  Eurydice_arr_a80 t1;\n  Eurydice_arr_a4 repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t1.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_arithmetic_power2round_vector_37(Eurydice_array_to_slice_mut_711(&t0),\n    Eurydice_array_to_slice_mut_711(&t1));\n  libcrux_ml_dsa_encoding_verification_key_generate_serialized_37(seed_for_a,\n    Eurydice_array_to_slice_shared_71(&t1),\n    verification_key);\n  generate_serialized_2e(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE,\n    seed_for_a,\n    seed_for_signing,\n    (\n      KRML_CLITERAL(Eurydice_borrow_slice_u8){\n        .ptr = verification_key.ptr,\n        .meta = verification_key.meta\n      }\n    ),\n    Eurydice_array_to_slice_shared_710(&s1_s2),\n    Eurydice_array_to_slice_shared_71(&t0),\n    signing_key);\n}\n\n/**\n Generate key pair.\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_18 *signing_key,\n  Eurydice_arr_40 *verification_key\n)\n{\n  generate_key_pair_5a(randomness,\n    Eurydice_array_to_slice_mut_59(signing_key),\n    Eurydice_array_to_slice_mut_bb(verification_key));\n}\n\n/**\n This corresponds to line 6 in algorithm 7 in FIPS 204 (line 7 in algorithm\n 8, resp.).\n\n If `domain_separation_context` is supplied, applies domain\n separation and length encoding to the context string,\n before appending the message (in the regular variant) or the\n pre-hash OID as well as the pre-hashed message digest. Otherwise,\n it is assumed that `message` already contains domain separation\n information.\n\n In FIPS 204 M' is the concatenation of the domain separated context, any\n potential pre-hash OID and the message (or the message pre-hash). We do not\n explicitely construct the concatenation in memory since it is of statically unknown\n length, but feed its components directly into the incremental XOF.\n\n Refer to line 10 of Algorithm 2 (and line 5 of Algorithm 3, resp.) in [FIPS\n 204](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.pdf#section.5)\n for details on the domain separation for regular ML-DSA. Line\n 23 of Algorithm 4 (and line 18 of Algorithm 5,resp.) describe domain separation for the HashMl-DSA\n variant.\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.derive_message_representative\nwith types libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(\n  Eurydice_borrow_slice_u8 verification_key_hash,\n  const core_option_Option_84 *domain_separation_context,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_arr_060 *message_representative\n)\n{\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake, verification_key_hash);\n  if (domain_separation_context->tag == core_option_Some)\n  {\n    const\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext\n    *domain_separation_context0 = &domain_separation_context->f0;\n    libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *uu____0 = &shake;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_f10\n    lvalue0 =\n      {\n        .data = {\n          (uint8_t)core_option_is_some_cd_4e(libcrux_ml_dsa_pre_hash_pre_hash_oid_88(domain_separation_context0))\n        }\n      };\n    libcrux_ml_dsa_hash_functions_portable_absorb_26(uu____0,\n      Eurydice_array_to_slice_shared_07(&lvalue0));\n    libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *uu____1 = &shake;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_f10\n    lvalue =\n      { .data = { (uint8_t)libcrux_ml_dsa_pre_hash_context_88(domain_separation_context0).meta } };\n    libcrux_ml_dsa_hash_functions_portable_absorb_26(uu____1,\n      Eurydice_array_to_slice_shared_07(&lvalue));\n    libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n      libcrux_ml_dsa_pre_hash_context_88(domain_separation_context0));\n    const\n    core_option_Option_b5\n    *uu____2 = libcrux_ml_dsa_pre_hash_pre_hash_oid_88(domain_separation_context0);\n    if (uu____2->tag == core_option_Some)\n    {\n      const Eurydice_arr_cb *pre_hash_oid = &uu____2->f0;\n      libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n        Eurydice_array_to_slice_shared_da(pre_hash_oid));\n    }\n  }\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake, message);\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n    Eurydice_array_to_slice_mut_d8(message_representative));\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256\nwith const generics\n- OUTPUT_LENGTH= 576\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_shake256_1b(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_5f0 *out\n)\n{\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_fa(out), input);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_x4_9b\nwith const generics\n- OUT_LEN= 576\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_shake256_x4_9b_1b(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_5f0 *out0,\n  Eurydice_arr_5f0 *out1,\n  Eurydice_arr_5f0 *out2,\n  Eurydice_arr_5f0 *out3\n)\n{\n  libcrux_ml_dsa_hash_functions_portable_shake256_1b(input0, out0);\n  libcrux_ml_dsa_hash_functions_portable_shake256_1b(input1, out1);\n  libcrux_ml_dsa_hash_functions_portable_shake256_1b(input2, out2);\n  libcrux_ml_dsa_hash_functions_portable_shake256_1b(input3, out3);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256\nwith const generics\n- OUTPUT_LENGTH= 640\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_shake256_c8(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_c30 *out\n)\n{\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_7d(out), input);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_x4_9b\nwith const generics\n- OUT_LEN= 640\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_shake256_x4_9b_c8(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_c30 *out0,\n  Eurydice_arr_c30 *out1,\n  Eurydice_arr_c30 *out2,\n  Eurydice_arr_c30 *out3\n)\n{\n  libcrux_ml_dsa_hash_functions_portable_shake256_c8(input0, out0);\n  libcrux_ml_dsa_hash_functions_portable_shake256_c8(input1, out1);\n  libcrux_ml_dsa_hash_functions_portable_shake256_c8(input2, out2);\n  libcrux_ml_dsa_hash_functions_portable_shake256_c8(input3, out3);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_61\nwith const generics\n- OUTPUT_LENGTH= 640\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_shake256_61_c8(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_c30 *out\n)\n{\n  libcrux_ml_dsa_hash_functions_portable_shake256_c8(input, out);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_61\nwith const generics\n- OUTPUT_LENGTH= 576\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_dsa_hash_functions_portable_shake256_61_1b(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_5f0 *out\n)\n{\n  libcrux_ml_dsa_hash_functions_portable_shake256_1b(input, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.sample_mask_ring_element\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nsample_mask_ring_element_2e(\n  const Eurydice_arr_a2 *seed,\n  Eurydice_arr_a4 *result,\n  size_t gamma1_exponent\n)\n{\n  switch (gamma1_exponent)\n  {\n    case 17U:\n      {\n        break;\n      }\n    case 19U:\n      {\n        Eurydice_arr_c30 out = { .data = { 0U } };\n        libcrux_ml_dsa_hash_functions_portable_shake256_61_c8(Eurydice_array_to_slice_shared_39(seed),\n          &out);\n        libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n          Eurydice_array_to_slice_shared_7d0(&out),\n          result);\n        return;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  Eurydice_arr_5f0 out = { .data = { 0U } };\n  libcrux_ml_dsa_hash_functions_portable_shake256_61_1b(Eurydice_array_to_slice_shared_39(seed),\n    &out);\n  libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n    Eurydice_array_to_slice_shared_fa(&out),\n    result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.sample_mask_vector\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nsample_mask_vector_67(\n  size_t dimension,\n  size_t gamma1_exponent,\n  const Eurydice_arr_060 *seed,\n  uint16_t *domain_separator,\n  Eurydice_dst_ref_mut_e7 mask\n)\n{\n  Eurydice_arr_a2\n  seed0 =\n    libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_d8(seed),\n      domain_separator[0U]);\n  Eurydice_arr_a2\n  seed1 =\n    libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_d8(seed),\n      (uint32_t)domain_separator[0U] + 1U);\n  Eurydice_arr_a2\n  seed2 =\n    libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_d8(seed),\n      (uint32_t)domain_separator[0U] + 2U);\n  Eurydice_arr_a2\n  seed3 =\n    libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_d8(seed),\n      (uint32_t)domain_separator[0U] + 3U);\n  domain_separator[0U] = (uint32_t)domain_separator[0U] + 4U;\n  switch (gamma1_exponent)\n  {\n    case 17U:\n      {\n        Eurydice_arr_5f0 out0 = { .data = { 0U } };\n        Eurydice_arr_5f0 out1 = { .data = { 0U } };\n        Eurydice_arr_5f0 out2 = { .data = { 0U } };\n        Eurydice_arr_5f0 out3 = { .data = { 0U } };\n        libcrux_ml_dsa_hash_functions_portable_shake256_x4_9b_1b(Eurydice_array_to_slice_shared_39(&seed0),\n          Eurydice_array_to_slice_shared_39(&seed1),\n          Eurydice_array_to_slice_shared_39(&seed2),\n          Eurydice_array_to_slice_shared_39(&seed3),\n          &out0,\n          &out1,\n          &out2,\n          &out3);\n        libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n          Eurydice_array_to_slice_shared_fa(&out0),\n          mask.ptr);\n        libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n          Eurydice_array_to_slice_shared_fa(&out1),\n          &mask.ptr[1U]);\n        libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n          Eurydice_array_to_slice_shared_fa(&out2),\n          &mask.ptr[2U]);\n        libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n          Eurydice_array_to_slice_shared_fa(&out3),\n          &mask.ptr[3U]);\n        break;\n      }\n    case 19U:\n      {\n        Eurydice_arr_c30 out0 = { .data = { 0U } };\n        Eurydice_arr_c30 out1 = { .data = { 0U } };\n        Eurydice_arr_c30 out2 = { .data = { 0U } };\n        Eurydice_arr_c30 out3 = { .data = { 0U } };\n        libcrux_ml_dsa_hash_functions_portable_shake256_x4_9b_c8(Eurydice_array_to_slice_shared_39(&seed0),\n          Eurydice_array_to_slice_shared_39(&seed1),\n          Eurydice_array_to_slice_shared_39(&seed2),\n          Eurydice_array_to_slice_shared_39(&seed3),\n          &out0,\n          &out1,\n          &out2,\n          &out3);\n        libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n          Eurydice_array_to_slice_shared_7d0(&out0),\n          mask.ptr);\n        libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n          Eurydice_array_to_slice_shared_7d0(&out1),\n          &mask.ptr[1U]);\n        libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n          Eurydice_array_to_slice_shared_7d0(&out2),\n          &mask.ptr[2U]);\n        libcrux_ml_dsa_encoding_gamma1_deserialize_37(gamma1_exponent,\n          Eurydice_array_to_slice_shared_7d0(&out3),\n          &mask.ptr[3U]);\n        break;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n        KRML_HOST_EXIT(255U);\n      }\n  }\n  for (size_t i = (size_t)4U; i < dimension; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_a2\n    seed4 =\n      libcrux_ml_dsa_sample_add_error_domain_separator(Eurydice_array_to_slice_shared_d8(seed),\n        domain_separator[0U]);\n    domain_separator[0U] = (uint32_t)domain_separator[0U] + 1U;\n    sample_mask_ring_element_2e(&seed4, &mask.ptr[i0], gamma1_exponent);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.sample.sample_challenge_ring_element\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_hash_functions_portable_Shake256\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nsample_challenge_ring_element_2e(\n  Eurydice_borrow_slice_u8 seed,\n  size_t number_of_ones,\n  Eurydice_arr_a4 *re\n)\n{\n  Eurydice_arr_26 state = libcrux_ml_dsa_hash_functions_portable_init_absorb_final_61(seed);\n  Eurydice_arr_3d\n  randomness0 = libcrux_ml_dsa_hash_functions_portable_squeeze_first_block_61(&state);\n  Eurydice_array_u8x8 arr;\n  memcpy(arr.data,\n    Eurydice_array_to_subslice_shared_360(&randomness0,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)8U })).ptr,\n    (size_t)8U * sizeof (uint8_t));\n  uint64_t\n  signs =\n    core_num__u64__from_le_bytes(core_result_unwrap_26_ab((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        )));\n  Eurydice_arr_c3 result = { .data = { 0U } };\n  size_t out_index = (size_t)256U - number_of_ones;\n  bool\n  done =\n    libcrux_ml_dsa_sample_inside_out_shuffle(Eurydice_array_to_subslice_from_shared_8c(&randomness0,\n        (size_t)8U),\n      &out_index,\n      &signs,\n      &result);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_3d\n      randomness = libcrux_ml_dsa_hash_functions_portable_squeeze_next_block_61(&state);\n      done =\n        libcrux_ml_dsa_sample_inside_out_shuffle(Eurydice_array_to_slice_shared_d4(&randomness),\n          &out_index,\n          &signs,\n          &result);\n    }\n  }\n  libcrux_ml_dsa_polynomial_from_i32_array_ff_37(Eurydice_array_to_slice_shared_200(&result),\n    re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_internal\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_internal_5a(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(signing_key,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized0 = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(remaining_serialized0,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized1 = uu____1.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(remaining_serialized1,\n      LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 verification_key_hash = uu____2.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized2 = uu____2.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____3 =\n    Eurydice_slice_split_at(remaining_serialized2,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s1_serialized = uu____3.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized = uu____3.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____4 =\n    Eurydice_slice_split_at(remaining_serialized,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s2_serialized = uu____4.fst;\n  Eurydice_borrow_slice_u8 t0_serialized = uu____4.snd;\n  Eurydice_arr_a80 s1_as_ntt;\n  Eurydice_arr_a4 repeat_expression0[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s1_as_ntt.data, repeat_expression0, (size_t)4U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_a80 s2_as_ntt;\n  Eurydice_arr_a4 repeat_expression1[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s2_as_ntt.data, repeat_expression1, (size_t)4U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_a80 t0_as_ntt;\n  Eurydice_arr_a4 repeat_expression2[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t0_as_ntt.data, repeat_expression2, (size_t)4U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE,\n    s1_serialized,\n    Eurydice_array_to_slice_mut_711(&s1_as_ntt));\n  libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_ERROR_RING_ELEMENT_SIZE,\n    s2_serialized,\n    Eurydice_array_to_slice_mut_711(&s2_as_ntt));\n  libcrux_ml_dsa_encoding_t0_deserialize_to_vector_then_ntt_37(t0_serialized,\n    Eurydice_array_to_slice_mut_711(&t0_as_ntt));\n  Eurydice_arr_66 matrix;\n  Eurydice_arr_a4 repeat_expression3[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(matrix.data, repeat_expression3, (size_t)16U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n    seed_for_a,\n    Eurydice_array_to_slice_mut_710(&matrix));\n  Eurydice_arr_060 message_representative = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(verification_key_hash,\n    &domain_separation_context,\n    message,\n    &message_representative);\n  Eurydice_arr_060 mask_seed = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake0 = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0, seed_for_signing);\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake0,\n    Eurydice_array_to_slice_shared_d8(&message_representative));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake0,\n    Eurydice_array_to_slice_mut_d8(&mask_seed));\n  uint16_t domain_separator_for_mask = 0U;\n  size_t attempt = (size_t)0U;\n  core_option_Option_90 commitment_hash0 = { .tag = core_option_None };\n  core_option_Option_43 signer_response0 = { .tag = core_option_None };\n  core_option_Option_cf hint0 = { .tag = core_option_None };\n  while (attempt < LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN)\n  {\n    attempt++;\n    Eurydice_arr_a80 mask;\n    Eurydice_arr_a4 repeat_expression4[4U];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      repeat_expression4[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(mask.data, repeat_expression4, (size_t)4U * sizeof (Eurydice_arr_a4));\n    Eurydice_arr_a80 w0;\n    Eurydice_arr_a4 repeat_expression5[4U];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      repeat_expression5[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(w0.data, repeat_expression5, (size_t)4U * sizeof (Eurydice_arr_a4));\n    Eurydice_arr_a80 commitment;\n    Eurydice_arr_a4 repeat_expression6[4U];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      repeat_expression6[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(commitment.data, repeat_expression6, (size_t)4U * sizeof (Eurydice_arr_a4));\n    sample_mask_vector_67(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT,\n      &mask_seed,\n      &domain_separator_for_mask,\n      Eurydice_array_to_slice_mut_711(&mask));\n    Eurydice_arr_a80 a_x_mask;\n    Eurydice_arr_a4 repeat_expression[4U];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(a_x_mask.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_a4));\n    Eurydice_arr_a80\n    mask_ntt =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)4U,\n        &mask,\n        Eurydice_arr_a4,\n        Eurydice_arr_a80);\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t i0 = i;\n      libcrux_ml_dsa_ntt_ntt_37(&mask_ntt.data[i0]););\n    libcrux_ml_dsa_matrix_compute_matrix_x_mask_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n      Eurydice_array_to_slice_shared_711(&matrix),\n      Eurydice_array_to_slice_shared_71(&mask_ntt),\n      Eurydice_array_to_slice_mut_711(&a_x_mask));\n    libcrux_ml_dsa_arithmetic_decompose_vector_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2,\n      Eurydice_array_to_slice_shared_71(&a_x_mask),\n      Eurydice_array_to_slice_mut_711(&w0),\n      Eurydice_array_to_slice_mut_711(&commitment));\n    Eurydice_arr_60 commitment_hash_candidate = { .data = { 0U } };\n    Eurydice_arr_56 commitment_serialized = { .data = { 0U } };\n    libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_COMMITMENT_RING_ELEMENT_SIZE,\n      Eurydice_array_to_slice_shared_71(&commitment),\n      Eurydice_array_to_slice_mut_ee(&commitment_serialized));\n    libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n    shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n    libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n      Eurydice_array_to_slice_shared_d8(&message_representative));\n    libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n      Eurydice_array_to_slice_shared_ee(&commitment_serialized));\n    libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n      Eurydice_array_to_slice_mut_6e(&commitment_hash_candidate));\n    Eurydice_arr_a4 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();\n    sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_6e(&commitment_hash_candidate),\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ONES_IN_VERIFIER_CHALLENGE,\n      &verifier_challenge);\n    libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);\n    Eurydice_arr_a80\n    challenge_times_s1 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)4U,\n        &s1_as_ntt,\n        Eurydice_arr_a4,\n        Eurydice_arr_a80);\n    Eurydice_arr_a80\n    challenge_times_s2 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)4U,\n        &s2_as_ntt,\n        Eurydice_arr_a4,\n        Eurydice_arr_a80);\n    libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_711(&challenge_times_s1),\n      &verifier_challenge);\n    libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_711(&challenge_times_s2),\n      &verifier_challenge);\n    libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n      Eurydice_array_to_slice_mut_711(&mask),\n      Eurydice_array_to_slice_shared_71(&challenge_times_s1));\n    libcrux_ml_dsa_matrix_subtract_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n      Eurydice_array_to_slice_mut_711(&w0),\n      Eurydice_array_to_slice_shared_71(&challenge_times_s2));\n    if\n    (\n      !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_71(&mask),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA)\n    )\n    {\n      if\n      (\n        !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_71(&w0),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2 - LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA)\n      )\n      {\n        Eurydice_arr_a80\n        challenge_times_t0 =\n          core_array__core__clone__Clone_for__T__N___clone((size_t)4U,\n            &t0_as_ntt,\n            Eurydice_arr_a4,\n            Eurydice_arr_a80);\n        libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_711(&challenge_times_t0),\n          &verifier_challenge);\n        if\n        (\n          !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_71(&challenge_times_t0),\n            LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2)\n        )\n        {\n          libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n            Eurydice_array_to_slice_mut_711(&w0),\n            Eurydice_array_to_slice_shared_71(&challenge_times_t0));\n          Eurydice_arr_83\n          hint_candidate =\n            {\n              .data = {\n                { .data = { 0U } },\n                { .data = { 0U } },\n                { .data = { 0U } },\n                { .data = { 0U } }\n              }\n            };\n          size_t\n          ones_in_hint =\n            libcrux_ml_dsa_arithmetic_make_hint_37(Eurydice_array_to_slice_shared_71(&w0),\n              Eurydice_array_to_slice_shared_71(&commitment),\n              LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2,\n              Eurydice_array_to_slice_mut_6d(&hint_candidate));\n          if (!(ones_in_hint > LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT))\n          {\n            attempt = LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN;\n            commitment_hash0 =\n              (\n                KRML_CLITERAL(core_option_Option_90){\n                  .tag = core_option_Some,\n                  .f0 = commitment_hash_candidate\n                }\n              );\n            signer_response0 =\n              (KRML_CLITERAL(core_option_Option_43){ .tag = core_option_Some, .f0 = mask });\n            hint0 =\n              (\n                KRML_CLITERAL(core_option_Option_cf){\n                  .tag = core_option_Some,\n                  .f0 = hint_candidate\n                }\n              );\n          }\n        }\n      }\n    }\n  }\n  core_result_Result_53 uu____5;\n  if (commitment_hash0.tag == core_option_None)\n  {\n    uu____5 =\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n        }\n      );\n  }\n  else\n  {\n    Eurydice_arr_60 commitment_hash = commitment_hash0.f0;\n    Eurydice_arr_60 commitment_hash1 = commitment_hash;\n    if (signer_response0.tag == core_option_None)\n    {\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n    else\n    {\n      Eurydice_arr_a80 signer_response = signer_response0.f0;\n      Eurydice_arr_a80 signer_response1 = signer_response;\n      if (!(hint0.tag == core_option_None))\n      {\n        Eurydice_arr_83 hint = hint0.f0;\n        Eurydice_arr_83 hint1 = hint;\n        libcrux_ml_dsa_encoding_signature_serialize_37(Eurydice_array_to_slice_shared_6e(&commitment_hash1),\n          Eurydice_array_to_slice_shared_71(&signer_response1),\n          Eurydice_array_to_slice_shared_6d(&hint1),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COMMITMENT_HASH_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT,\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_GAMMA1_RING_ELEMENT_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT,\n          Eurydice_array_to_slice_mut_180(signature));\n        return (KRML_CLITERAL(core_result_Result_53){ .tag = core_result_Ok });\n      }\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n  }\n  return uu____5;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_mut\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_mut_5a(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    sign_internal_5a(signing_key,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_48\nsign_5a(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_400 signature = libcrux_ml_dsa_types_zero_c5_1a();\n  core_result_Result_53\n  uu____0 = sign_mut_5a(signing_key, message, context, randomness, &signature);\n  core_result_Result_48 uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_48){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_48){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\n/**\n Sign.\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return sign_5a(Eurydice_array_to_slice_shared_59(signing_key), message, context, randomness);\n}\n\n/**\n Sign.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign_mut(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  return\n    sign_mut_5a(Eurydice_array_to_slice_shared_59(signing_key),\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\nThis function found in impl {libcrux_ml_dsa::pre_hash::PreHash for libcrux_ml_dsa::pre_hash::SHAKE128_PH}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.pre_hash.hash_30\nwith types libcrux_ml_dsa_hash_functions_portable_Shake128\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_pre_hash_hash_30_83(\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  libcrux_ml_dsa_hash_functions_portable_shake128_7b(message, output);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_pre_hashed_mut\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_pre_hashed_mut_3f(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n)\n{\n  if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))\n  {\n    libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n    core_result_Result_a8\n    uu____0 =\n      libcrux_ml_dsa_pre_hash_new_88(context,\n        (\n          KRML_CLITERAL(core_option_Option_b5){\n            .tag = core_option_Some,\n            .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n          }\n        ));\n    if (!(uu____0.tag == core_result_Ok))\n    {\n      return\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n          }\n        );\n    }\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n    return\n      sign_internal_5a(signing_key,\n        (\n          KRML_CLITERAL(Eurydice_borrow_slice_u8){\n            .ptr = pre_hash_buffer.ptr,\n            .meta = pre_hash_buffer.meta\n          }\n        ),\n        (\n          KRML_CLITERAL(core_option_Option_84){\n            .tag = core_option_Some,\n            .f0 = domain_separation_context\n          }\n        ),\n        randomness,\n        signature);\n  }\n  return\n    (\n      KRML_CLITERAL(core_result_Result_53){\n        .tag = core_result_Err,\n        .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.sign_pre_hashed\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_48\nsign_pre_hashed_3f(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_400 signature = libcrux_ml_dsa_types_zero_c5_1a();\n  core_result_Result_53\n  uu____0 =\n    sign_pre_hashed_mut_3f(signing_key,\n      message,\n      context,\n      pre_hash_buffer,\n      randomness,\n      &signature);\n  core_result_Result_48 uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_48){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_48){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\n/**\n Sign (pre-hashed).\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign_pre_hashed_shake128(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    sign_pre_hashed_3f(Eurydice_array_to_slice_shared_59(signing_key),\n      message,\n      context,\n      pre_hash_buffer,\n      randomness);\n}\n\n/**\n The internal verification API.\n\n If no `domain_separation_context` is supplied, it is assumed that\n `message` already contains the domain separation.\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.verify_internal\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_internal_5a(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  const Eurydice_arr_400 *signature_serialized\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_bb(verification_key),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 t1_serialized = uu____0.snd;\n  Eurydice_arr_a80 t1;\n  Eurydice_arr_a4 repeat_expression0[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t1.data, repeat_expression0, (size_t)4U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_encoding_verification_key_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_VERIFICATION_KEY_SIZE,\n    t1_serialized,\n    Eurydice_array_to_slice_mut_711(&t1));\n  Eurydice_arr_60 deserialized_commitment_hash = { .data = { 0U } };\n  Eurydice_arr_a80 deserialized_signer_response;\n  Eurydice_arr_a4 repeat_expression1[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(deserialized_signer_response.data,\n    repeat_expression1,\n    (size_t)4U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_83\n  deserialized_hint =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  core_result_Result_41\n  uu____1 =\n    libcrux_ml_dsa_encoding_signature_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COMMITMENT_HASH_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_GAMMA1_RING_ELEMENT_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_MAX_ONES_IN_HINT,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_SIGNATURE_SIZE,\n      Eurydice_array_to_slice_shared_180(signature_serialized),\n      Eurydice_array_to_slice_mut_6e(&deserialized_commitment_hash),\n      Eurydice_array_to_slice_mut_711(&deserialized_signer_response),\n      Eurydice_array_to_slice_mut_6d(&deserialized_hint));\n  core_result_Result_41 uu____2;\n  if (uu____1.tag == core_result_Ok)\n  {\n    if\n    (\n      libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_71(&deserialized_signer_response),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_BETA)\n    )\n    {\n      uu____2 =\n        (\n          KRML_CLITERAL(core_result_Result_41){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError\n          }\n        );\n    }\n    else\n    {\n      Eurydice_arr_66 matrix;\n      Eurydice_arr_a4 repeat_expression[16U];\n      KRML_MAYBE_FOR16(i,\n        (size_t)0U,\n        (size_t)16U,\n        (size_t)1U,\n        repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n      memcpy(matrix.data, repeat_expression, (size_t)16U * sizeof (Eurydice_arr_a4));\n      libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n        seed_for_a,\n        Eurydice_array_to_slice_mut_710(&matrix));\n      Eurydice_arr_060 verification_key_hash = { .data = { 0U } };\n      libcrux_ml_dsa_hash_functions_portable_shake256_61_24(Eurydice_array_to_slice_shared_bb(verification_key),\n        &verification_key_hash);\n      Eurydice_arr_060 message_representative = { .data = { 0U } };\n      libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(Eurydice_array_to_slice_shared_d8(&verification_key_hash),\n        &domain_separation_context,\n        message,\n        &message_representative);\n      Eurydice_arr_a4 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();\n      sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_6e(&deserialized_commitment_hash),\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ONES_IN_VERIFIER_CHALLENGE,\n        &verifier_challenge);\n      libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);\n      KRML_MAYBE_FOR4(i,\n        (size_t)0U,\n        (size_t)4U,\n        (size_t)1U,\n        size_t i0 = i;\n        libcrux_ml_dsa_ntt_ntt_37(&deserialized_signer_response.data[i0]););\n      libcrux_ml_dsa_matrix_compute_w_approx_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_ROWS_IN_A,\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_COLUMNS_IN_A,\n        Eurydice_array_to_slice_shared_711(&matrix),\n        Eurydice_array_to_slice_shared_71(&deserialized_signer_response),\n        &verifier_challenge,\n        Eurydice_array_to_slice_mut_711(&t1));\n      Eurydice_arr_60 recomputed_commitment_hash = { .data = { 0U } };\n      libcrux_ml_dsa_arithmetic_use_hint_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_44_GAMMA2,\n        Eurydice_array_to_slice_shared_6d(&deserialized_hint),\n        Eurydice_array_to_slice_mut_711(&t1));\n      Eurydice_arr_56 commitment_serialized = { .data = { 0U } };\n      libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_44_COMMITMENT_RING_ELEMENT_SIZE,\n        Eurydice_array_to_slice_shared_71(&t1),\n        Eurydice_array_to_slice_mut_ee(&commitment_serialized));\n      libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n      shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n      libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n        Eurydice_array_to_slice_shared_d8(&message_representative));\n      libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n        Eurydice_array_to_slice_shared_ee(&commitment_serialized));\n      libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n        Eurydice_array_to_slice_mut_6e(&recomputed_commitment_hash));\n      if\n      (\n        Eurydice_array_eq((size_t)32U,\n          &deserialized_commitment_hash,\n          &recomputed_commitment_hash,\n          uint8_t)\n      )\n      {\n        uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });\n      }\n      else\n      {\n        uu____2 =\n          (\n            KRML_CLITERAL(core_result_Result_41){\n              .tag = core_result_Err,\n              .f0 = libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError\n            }\n          );\n      }\n    }\n  }\n  else\n  {\n    libcrux_ml_dsa_types_VerificationError e = uu____1.f0;\n    uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Err, .f0 = e });\n  }\n  return uu____2;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.verify\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_5a(\n  const Eurydice_arr_40 *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature_serialized\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_5a(verification_key_serialized,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\n/**\n Verify.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_verify(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n)\n{\n  return verify_5a(verification_key, message, context, signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_44.verify_pre_hashed\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_pre_hashed_3f(\n  const Eurydice_arr_40 *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_400 *signature_serialized\n)\n{\n  libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (\n        KRML_CLITERAL(core_option_Option_b5){\n          .tag = core_option_Some,\n          .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n        }\n      ));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_5a(verification_key_serialized,\n      (\n        KRML_CLITERAL(Eurydice_borrow_slice_u8){\n          .ptr = pre_hash_buffer.ptr,\n          .meta = pre_hash_buffer.meta\n        }\n      ),\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_verify_pre_hashed_shake128(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_400 *signature\n)\n{\n  return verify_pre_hashed_3f(verification_key, message, context, pre_hash_buffer, signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.generate_key_pair\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ngenerate_key_pair_5a0(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  Eurydice_arr_d10 seed_expanded0 = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x2\n  lvalue =\n    {\n      .data = {\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A\n      }\n    };\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n    Eurydice_array_to_slice_shared_26(&lvalue));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n    Eurydice_array_to_slice_mut_18(&seed_expanded0));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_18(&seed_expanded0),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_expanded = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(seed_expanded,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_error_vectors = uu____1.fst;\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.snd;\n  Eurydice_arr_58 s1_s2;\n  Eurydice_arr_a4 repeat_expression0[11U];\n  KRML_MAYBE_FOR11(i,\n    (size_t)0U,\n    (size_t)11U,\n    (size_t)1U,\n    repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s1_s2.data, repeat_expression0, (size_t)11U * sizeof (Eurydice_arr_a4));\n  sample_s1_and_s2_29(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,\n    seed_for_error_vectors,\n    Eurydice_array_to_slice_mut_712(&s1_s2));\n  Eurydice_arr_a3 t0;\n  Eurydice_arr_a4 repeat_expression1[6U];\n  KRML_MAYBE_FOR6(i,\n    (size_t)0U,\n    (size_t)6U,\n    (size_t)1U,\n    repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t0.data, repeat_expression1, (size_t)6U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_a1 a_as_ntt;\n  Eurydice_arr_a4 repeat_expression2[30U];\n  for (size_t i = (size_t)0U; i < (size_t)30U; i++)\n  {\n    repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37();\n  }\n  memcpy(a_as_ntt.data, repeat_expression2, (size_t)30U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n    seed_for_a,\n    Eurydice_array_to_slice_mut_713(&a_as_ntt));\n  Eurydice_arr_b0 s1_ntt;\n  Eurydice_arr_a4 repeat_expression3[5U];\n  KRML_MAYBE_FOR5(i,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s1_ntt.data, repeat_expression3, (size_t)5U * sizeof (Eurydice_arr_a4));\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_714(&s1_ntt),\n    Eurydice_array_to_subslice_shared_c30(&s1_s2,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A\n        }\n      )),\n    Eurydice_arr_a4);\n  KRML_MAYBE_FOR5(i,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_ml_dsa_ntt_ntt_37(&s1_ntt.data[i0]););\n  libcrux_ml_dsa_matrix_compute_as1_plus_s2_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n    LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n    Eurydice_array_to_slice_mut_713(&a_as_ntt),\n    Eurydice_array_to_slice_shared_712(&s1_ntt),\n    Eurydice_array_to_slice_shared_713(&s1_s2),\n    Eurydice_array_to_slice_mut_715(&t0));\n  Eurydice_arr_a3 t1;\n  Eurydice_arr_a4 repeat_expression[6U];\n  KRML_MAYBE_FOR6(i,\n    (size_t)0U,\n    (size_t)6U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t1.data, repeat_expression, (size_t)6U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_arithmetic_power2round_vector_37(Eurydice_array_to_slice_mut_715(&t0),\n    Eurydice_array_to_slice_mut_715(&t1));\n  libcrux_ml_dsa_encoding_verification_key_generate_serialized_37(seed_for_a,\n    Eurydice_array_to_slice_shared_714(&t1),\n    verification_key);\n  generate_serialized_2e(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE,\n    seed_for_a,\n    seed_for_signing,\n    (\n      KRML_CLITERAL(Eurydice_borrow_slice_u8){\n        .ptr = verification_key.ptr,\n        .meta = verification_key.meta\n      }\n    ),\n    Eurydice_array_to_slice_shared_713(&s1_s2),\n    Eurydice_array_to_slice_shared_714(&t0),\n    signing_key);\n}\n\n/**\n Generate key pair.\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_d1 *signing_key,\n  Eurydice_arr_4a *verification_key\n)\n{\n  generate_key_pair_5a0(randomness,\n    Eurydice_array_to_slice_mut_ef(signing_key),\n    Eurydice_array_to_slice_mut_5b(verification_key));\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_internal\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_internal_5a0(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(signing_key,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized0 = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(remaining_serialized0,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized1 = uu____1.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(remaining_serialized1,\n      LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 verification_key_hash = uu____2.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized2 = uu____2.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____3 =\n    Eurydice_slice_split_at(remaining_serialized2,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s1_serialized = uu____3.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized = uu____3.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____4 =\n    Eurydice_slice_split_at(remaining_serialized,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s2_serialized = uu____4.fst;\n  Eurydice_borrow_slice_u8 t0_serialized = uu____4.snd;\n  Eurydice_arr_b0 s1_as_ntt;\n  Eurydice_arr_a4 repeat_expression0[5U];\n  KRML_MAYBE_FOR5(i,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s1_as_ntt.data, repeat_expression0, (size_t)5U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_a3 s2_as_ntt;\n  Eurydice_arr_a4 repeat_expression1[6U];\n  KRML_MAYBE_FOR6(i,\n    (size_t)0U,\n    (size_t)6U,\n    (size_t)1U,\n    repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s2_as_ntt.data, repeat_expression1, (size_t)6U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_a3 t0_as_ntt;\n  Eurydice_arr_a4 repeat_expression2[6U];\n  KRML_MAYBE_FOR6(i,\n    (size_t)0U,\n    (size_t)6U,\n    (size_t)1U,\n    repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t0_as_ntt.data, repeat_expression2, (size_t)6U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE,\n    s1_serialized,\n    Eurydice_array_to_slice_mut_714(&s1_as_ntt));\n  libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_ERROR_RING_ELEMENT_SIZE,\n    s2_serialized,\n    Eurydice_array_to_slice_mut_715(&s2_as_ntt));\n  libcrux_ml_dsa_encoding_t0_deserialize_to_vector_then_ntt_37(t0_serialized,\n    Eurydice_array_to_slice_mut_715(&t0_as_ntt));\n  Eurydice_arr_a1 matrix;\n  Eurydice_arr_a4 repeat_expression3[30U];\n  for (size_t i = (size_t)0U; i < (size_t)30U; i++)\n  {\n    repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37();\n  }\n  memcpy(matrix.data, repeat_expression3, (size_t)30U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n    seed_for_a,\n    Eurydice_array_to_slice_mut_713(&matrix));\n  Eurydice_arr_060 message_representative = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(verification_key_hash,\n    &domain_separation_context,\n    message,\n    &message_representative);\n  Eurydice_arr_060 mask_seed = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake0 = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0, seed_for_signing);\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake0,\n    Eurydice_array_to_slice_shared_d8(&message_representative));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake0,\n    Eurydice_array_to_slice_mut_d8(&mask_seed));\n  uint16_t domain_separator_for_mask = 0U;\n  size_t attempt = (size_t)0U;\n  core_option_Option_a6 commitment_hash0 = { .tag = core_option_None };\n  core_option_Option_c8 signer_response0 = { .tag = core_option_None };\n  core_option_Option_cb hint0 = { .tag = core_option_None };\n  while (attempt < LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN)\n  {\n    attempt++;\n    Eurydice_arr_b0 mask;\n    Eurydice_arr_a4 repeat_expression4[5U];\n    KRML_MAYBE_FOR5(i,\n      (size_t)0U,\n      (size_t)5U,\n      (size_t)1U,\n      repeat_expression4[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(mask.data, repeat_expression4, (size_t)5U * sizeof (Eurydice_arr_a4));\n    Eurydice_arr_a3 w0;\n    Eurydice_arr_a4 repeat_expression5[6U];\n    KRML_MAYBE_FOR6(i,\n      (size_t)0U,\n      (size_t)6U,\n      (size_t)1U,\n      repeat_expression5[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(w0.data, repeat_expression5, (size_t)6U * sizeof (Eurydice_arr_a4));\n    Eurydice_arr_a3 commitment;\n    Eurydice_arr_a4 repeat_expression6[6U];\n    KRML_MAYBE_FOR6(i,\n      (size_t)0U,\n      (size_t)6U,\n      (size_t)1U,\n      repeat_expression6[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(commitment.data, repeat_expression6, (size_t)6U * sizeof (Eurydice_arr_a4));\n    sample_mask_vector_67(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT,\n      &mask_seed,\n      &domain_separator_for_mask,\n      Eurydice_array_to_slice_mut_714(&mask));\n    Eurydice_arr_a3 a_x_mask;\n    Eurydice_arr_a4 repeat_expression[6U];\n    KRML_MAYBE_FOR6(i,\n      (size_t)0U,\n      (size_t)6U,\n      (size_t)1U,\n      repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(a_x_mask.data, repeat_expression, (size_t)6U * sizeof (Eurydice_arr_a4));\n    Eurydice_arr_b0\n    mask_ntt =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)5U,\n        &mask,\n        Eurydice_arr_a4,\n        Eurydice_arr_b0);\n    KRML_MAYBE_FOR5(i,\n      (size_t)0U,\n      (size_t)5U,\n      (size_t)1U,\n      size_t i0 = i;\n      libcrux_ml_dsa_ntt_ntt_37(&mask_ntt.data[i0]););\n    libcrux_ml_dsa_matrix_compute_matrix_x_mask_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n      Eurydice_array_to_slice_shared_715(&matrix),\n      Eurydice_array_to_slice_shared_712(&mask_ntt),\n      Eurydice_array_to_slice_mut_715(&a_x_mask));\n    libcrux_ml_dsa_arithmetic_decompose_vector_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2,\n      Eurydice_array_to_slice_shared_714(&a_x_mask),\n      Eurydice_array_to_slice_mut_715(&w0),\n      Eurydice_array_to_slice_mut_715(&commitment));\n    Eurydice_arr_5f commitment_hash_candidate = { .data = { 0U } };\n    Eurydice_arr_56 commitment_serialized = { .data = { 0U } };\n    libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_COMMITMENT_RING_ELEMENT_SIZE,\n      Eurydice_array_to_slice_shared_714(&commitment),\n      Eurydice_array_to_slice_mut_ee(&commitment_serialized));\n    libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n    shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n    libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n      Eurydice_array_to_slice_shared_d8(&message_representative));\n    libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n      Eurydice_array_to_slice_shared_ee(&commitment_serialized));\n    libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n      Eurydice_array_to_slice_mut_95(&commitment_hash_candidate));\n    Eurydice_arr_a4 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();\n    sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_95(&commitment_hash_candidate),\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ONES_IN_VERIFIER_CHALLENGE,\n      &verifier_challenge);\n    libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);\n    Eurydice_arr_b0\n    challenge_times_s1 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)5U,\n        &s1_as_ntt,\n        Eurydice_arr_a4,\n        Eurydice_arr_b0);\n    Eurydice_arr_a3\n    challenge_times_s2 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)6U,\n        &s2_as_ntt,\n        Eurydice_arr_a4,\n        Eurydice_arr_a3);\n    libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_714(&challenge_times_s1),\n      &verifier_challenge);\n    libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_715(&challenge_times_s2),\n      &verifier_challenge);\n    libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n      Eurydice_array_to_slice_mut_714(&mask),\n      Eurydice_array_to_slice_shared_712(&challenge_times_s1));\n    libcrux_ml_dsa_matrix_subtract_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n      Eurydice_array_to_slice_mut_715(&w0),\n      Eurydice_array_to_slice_shared_714(&challenge_times_s2));\n    if\n    (\n      !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_712(&mask),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA)\n    )\n    {\n      if\n      (\n        !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_714(&w0),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2 - LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA)\n      )\n      {\n        Eurydice_arr_a3\n        challenge_times_t0 =\n          core_array__core__clone__Clone_for__T__N___clone((size_t)6U,\n            &t0_as_ntt,\n            Eurydice_arr_a4,\n            Eurydice_arr_a3);\n        libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_715(&challenge_times_t0),\n          &verifier_challenge);\n        if\n        (\n          !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_714(&challenge_times_t0),\n            LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2)\n        )\n        {\n          libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n            Eurydice_array_to_slice_mut_715(&w0),\n            Eurydice_array_to_slice_shared_714(&challenge_times_t0));\n          Eurydice_arr_b5\n          hint_candidate =\n            {\n              .data = {\n                { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n                { .data = { 0U } }, { .data = { 0U } }\n              }\n            };\n          size_t\n          ones_in_hint =\n            libcrux_ml_dsa_arithmetic_make_hint_37(Eurydice_array_to_slice_shared_714(&w0),\n              Eurydice_array_to_slice_shared_714(&commitment),\n              LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2,\n              Eurydice_array_to_slice_mut_6d0(&hint_candidate));\n          if (!(ones_in_hint > LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT))\n          {\n            attempt = LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN;\n            commitment_hash0 =\n              (\n                KRML_CLITERAL(core_option_Option_a6){\n                  .tag = core_option_Some,\n                  .f0 = commitment_hash_candidate\n                }\n              );\n            signer_response0 =\n              (KRML_CLITERAL(core_option_Option_c8){ .tag = core_option_Some, .f0 = mask });\n            hint0 =\n              (\n                KRML_CLITERAL(core_option_Option_cb){\n                  .tag = core_option_Some,\n                  .f0 = hint_candidate\n                }\n              );\n          }\n        }\n      }\n    }\n  }\n  core_result_Result_53 uu____5;\n  if (commitment_hash0.tag == core_option_None)\n  {\n    uu____5 =\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n        }\n      );\n  }\n  else\n  {\n    Eurydice_arr_5f commitment_hash = commitment_hash0.f0;\n    Eurydice_arr_5f commitment_hash1 = commitment_hash;\n    if (signer_response0.tag == core_option_None)\n    {\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n    else\n    {\n      Eurydice_arr_b0 signer_response = signer_response0.f0;\n      Eurydice_arr_b0 signer_response1 = signer_response;\n      if (!(hint0.tag == core_option_None))\n      {\n        Eurydice_arr_b5 hint = hint0.f0;\n        Eurydice_arr_b5 hint1 = hint;\n        libcrux_ml_dsa_encoding_signature_serialize_37(Eurydice_array_to_slice_shared_95(&commitment_hash1),\n          Eurydice_array_to_slice_shared_712(&signer_response1),\n          Eurydice_array_to_slice_shared_6d0(&hint1),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COMMITMENT_HASH_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT,\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_GAMMA1_RING_ELEMENT_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT,\n          Eurydice_array_to_slice_mut_ee0(signature));\n        return (KRML_CLITERAL(core_result_Result_53){ .tag = core_result_Ok });\n      }\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n  }\n  return uu____5;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_mut\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_mut_5a0(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    sign_internal_5a0(signing_key,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_8c\nsign_5a0(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_96 signature = libcrux_ml_dsa_types_zero_c5_fa();\n  core_result_Result_53\n  uu____0 = sign_mut_5a0(signing_key, message, context, randomness, &signature);\n  core_result_Result_8c uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_8c){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_8c){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\n/**\n Sign.\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return sign_5a0(Eurydice_array_to_slice_shared_ef(signing_key), message, context, randomness);\n}\n\n/**\n Sign.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign_mut(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  return\n    sign_mut_5a0(Eurydice_array_to_slice_shared_ef(signing_key),\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_pre_hashed_mut\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_pre_hashed_mut_3f0(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n)\n{\n  if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))\n  {\n    libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n    core_result_Result_a8\n    uu____0 =\n      libcrux_ml_dsa_pre_hash_new_88(context,\n        (\n          KRML_CLITERAL(core_option_Option_b5){\n            .tag = core_option_Some,\n            .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n          }\n        ));\n    if (!(uu____0.tag == core_result_Ok))\n    {\n      return\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n          }\n        );\n    }\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n    return\n      sign_internal_5a0(signing_key,\n        (\n          KRML_CLITERAL(Eurydice_borrow_slice_u8){\n            .ptr = pre_hash_buffer.ptr,\n            .meta = pre_hash_buffer.meta\n          }\n        ),\n        (\n          KRML_CLITERAL(core_option_Option_84){\n            .tag = core_option_Some,\n            .f0 = domain_separation_context\n          }\n        ),\n        randomness,\n        signature);\n  }\n  return\n    (\n      KRML_CLITERAL(core_result_Result_53){\n        .tag = core_result_Err,\n        .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.sign_pre_hashed\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_8c\nsign_pre_hashed_3f0(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_96 signature = libcrux_ml_dsa_types_zero_c5_fa();\n  core_result_Result_53\n  uu____0 =\n    sign_pre_hashed_mut_3f0(signing_key,\n      message,\n      context,\n      pre_hash_buffer,\n      randomness,\n      &signature);\n  core_result_Result_8c uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_8c){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_8c){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\n/**\n Sign (pre-hashed).\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign_pre_hashed_shake128(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    sign_pre_hashed_3f0(Eurydice_array_to_slice_shared_ef(signing_key),\n      message,\n      context,\n      pre_hash_buffer,\n      randomness);\n}\n\n/**\n The internal verification API.\n\n If no `domain_separation_context` is supplied, it is assumed that\n `message` already contains the domain separation.\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.verify_internal\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_internal_5a0(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  const Eurydice_arr_96 *signature_serialized\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_5b(verification_key),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 t1_serialized = uu____0.snd;\n  Eurydice_arr_a3 t1;\n  Eurydice_arr_a4 repeat_expression0[6U];\n  KRML_MAYBE_FOR6(i,\n    (size_t)0U,\n    (size_t)6U,\n    (size_t)1U,\n    repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t1.data, repeat_expression0, (size_t)6U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_encoding_verification_key_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_VERIFICATION_KEY_SIZE,\n    t1_serialized,\n    Eurydice_array_to_slice_mut_715(&t1));\n  Eurydice_arr_5f deserialized_commitment_hash = { .data = { 0U } };\n  Eurydice_arr_b0 deserialized_signer_response;\n  Eurydice_arr_a4 repeat_expression1[5U];\n  KRML_MAYBE_FOR5(i,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(deserialized_signer_response.data,\n    repeat_expression1,\n    (size_t)5U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_b5\n  deserialized_hint =\n    {\n      .data = {\n        { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n        { .data = { 0U } }, { .data = { 0U } }\n      }\n    };\n  core_result_Result_41\n  uu____1 =\n    libcrux_ml_dsa_encoding_signature_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COMMITMENT_HASH_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_GAMMA1_RING_ELEMENT_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_MAX_ONES_IN_HINT,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_SIGNATURE_SIZE,\n      Eurydice_array_to_slice_shared_ee0(signature_serialized),\n      Eurydice_array_to_slice_mut_95(&deserialized_commitment_hash),\n      Eurydice_array_to_slice_mut_714(&deserialized_signer_response),\n      Eurydice_array_to_slice_mut_6d0(&deserialized_hint));\n  core_result_Result_41 uu____2;\n  if (uu____1.tag == core_result_Ok)\n  {\n    if\n    (\n      libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_712(&deserialized_signer_response),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_BETA)\n    )\n    {\n      uu____2 =\n        (\n          KRML_CLITERAL(core_result_Result_41){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError\n          }\n        );\n    }\n    else\n    {\n      Eurydice_arr_a1 matrix;\n      Eurydice_arr_a4 repeat_expression[30U];\n      for (size_t i = (size_t)0U; i < (size_t)30U; i++)\n      {\n        repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();\n      }\n      memcpy(matrix.data, repeat_expression, (size_t)30U * sizeof (Eurydice_arr_a4));\n      libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n        seed_for_a,\n        Eurydice_array_to_slice_mut_713(&matrix));\n      Eurydice_arr_060 verification_key_hash = { .data = { 0U } };\n      libcrux_ml_dsa_hash_functions_portable_shake256_61_24(Eurydice_array_to_slice_shared_5b(verification_key),\n        &verification_key_hash);\n      Eurydice_arr_060 message_representative = { .data = { 0U } };\n      libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(Eurydice_array_to_slice_shared_d8(&verification_key_hash),\n        &domain_separation_context,\n        message,\n        &message_representative);\n      Eurydice_arr_a4 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();\n      sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_95(&deserialized_commitment_hash),\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ONES_IN_VERIFIER_CHALLENGE,\n        &verifier_challenge);\n      libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);\n      KRML_MAYBE_FOR5(i,\n        (size_t)0U,\n        (size_t)5U,\n        (size_t)1U,\n        size_t i0 = i;\n        libcrux_ml_dsa_ntt_ntt_37(&deserialized_signer_response.data[i0]););\n      libcrux_ml_dsa_matrix_compute_w_approx_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_ROWS_IN_A,\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_COLUMNS_IN_A,\n        Eurydice_array_to_slice_shared_715(&matrix),\n        Eurydice_array_to_slice_shared_712(&deserialized_signer_response),\n        &verifier_challenge,\n        Eurydice_array_to_slice_mut_715(&t1));\n      Eurydice_arr_5f recomputed_commitment_hash = { .data = { 0U } };\n      libcrux_ml_dsa_arithmetic_use_hint_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_65_GAMMA2,\n        Eurydice_array_to_slice_shared_6d0(&deserialized_hint),\n        Eurydice_array_to_slice_mut_715(&t1));\n      Eurydice_arr_56 commitment_serialized = { .data = { 0U } };\n      libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_65_COMMITMENT_RING_ELEMENT_SIZE,\n        Eurydice_array_to_slice_shared_714(&t1),\n        Eurydice_array_to_slice_mut_ee(&commitment_serialized));\n      libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n      shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n      libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n        Eurydice_array_to_slice_shared_d8(&message_representative));\n      libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n        Eurydice_array_to_slice_shared_ee(&commitment_serialized));\n      libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n        Eurydice_array_to_slice_mut_95(&recomputed_commitment_hash));\n      if\n      (\n        Eurydice_array_eq((size_t)48U,\n          &deserialized_commitment_hash,\n          &recomputed_commitment_hash,\n          uint8_t)\n      )\n      {\n        uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });\n      }\n      else\n      {\n        uu____2 =\n          (\n            KRML_CLITERAL(core_result_Result_41){\n              .tag = core_result_Err,\n              .f0 = libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError\n            }\n          );\n      }\n    }\n  }\n  else\n  {\n    libcrux_ml_dsa_types_VerificationError e = uu____1.f0;\n    uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Err, .f0 = e });\n  }\n  return uu____2;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.verify\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_5a0(\n  const Eurydice_arr_4a *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature_serialized\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_5a0(verification_key_serialized,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\n/**\n Verify.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_verify(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n)\n{\n  return verify_5a0(verification_key, message, context, signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_65.verify_pre_hashed\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_pre_hashed_3f0(\n  const Eurydice_arr_4a *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_96 *signature_serialized\n)\n{\n  libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (\n        KRML_CLITERAL(core_option_Option_b5){\n          .tag = core_option_Some,\n          .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n        }\n      ));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_5a0(verification_key_serialized,\n      (\n        KRML_CLITERAL(Eurydice_borrow_slice_u8){\n          .ptr = pre_hash_buffer.ptr,\n          .meta = pre_hash_buffer.meta\n        }\n      ),\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_verify_pre_hashed_shake128(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_96 *signature\n)\n{\n  return verify_pre_hashed_3f0(verification_key, message, context, pre_hash_buffer, signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.generate_key_pair\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ngenerate_key_pair_5a1(\n  Eurydice_arr_60 randomness,\n  Eurydice_mut_borrow_slice_u8 signing_key,\n  Eurydice_mut_borrow_slice_u8 verification_key\n)\n{\n  Eurydice_arr_d10 seed_expanded0 = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x2\n  lvalue =\n    {\n      .data = {\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n        (uint8_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A\n      }\n    };\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n    Eurydice_array_to_slice_shared_26(&lvalue));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n    Eurydice_array_to_slice_mut_18(&seed_expanded0));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_18(&seed_expanded0),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_expanded = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(seed_expanded,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_ERROR_VECTORS_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_error_vectors = uu____1.fst;\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.snd;\n  Eurydice_arr_f8 s1_s2;\n  Eurydice_arr_a4 repeat_expression0[15U];\n  KRML_MAYBE_FOR15(i,\n    (size_t)0U,\n    (size_t)15U,\n    (size_t)1U,\n    repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s1_s2.data, repeat_expression0, (size_t)15U * sizeof (Eurydice_arr_a4));\n  sample_s1_and_s2_29(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,\n    seed_for_error_vectors,\n    Eurydice_array_to_slice_mut_716(&s1_s2));\n  Eurydice_arr_db t0;\n  Eurydice_arr_a4 repeat_expression1[8U];\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t0.data, repeat_expression1, (size_t)8U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_46 a_as_ntt;\n  Eurydice_arr_a4 repeat_expression2[56U];\n  for (size_t i = (size_t)0U; i < (size_t)56U; i++)\n  {\n    repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37();\n  }\n  memcpy(a_as_ntt.data, repeat_expression2, (size_t)56U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n    seed_for_a,\n    Eurydice_array_to_slice_mut_717(&a_as_ntt));\n  Eurydice_arr_25 s1_ntt;\n  Eurydice_arr_a4 repeat_expression3[7U];\n  KRML_MAYBE_FOR7(i,\n    (size_t)0U,\n    (size_t)7U,\n    (size_t)1U,\n    repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s1_ntt.data, repeat_expression3, (size_t)7U * sizeof (Eurydice_arr_a4));\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_718(&s1_ntt),\n    Eurydice_array_to_subslice_shared_c31(&s1_s2,\n      (\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A\n        }\n      )),\n    Eurydice_arr_a4);\n  KRML_MAYBE_FOR7(i,\n    (size_t)0U,\n    (size_t)7U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_ml_dsa_ntt_ntt_37(&s1_ntt.data[i0]););\n  libcrux_ml_dsa_matrix_compute_as1_plus_s2_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n    LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n    Eurydice_array_to_slice_mut_717(&a_as_ntt),\n    Eurydice_array_to_slice_shared_716(&s1_ntt),\n    Eurydice_array_to_slice_shared_717(&s1_s2),\n    Eurydice_array_to_slice_mut_71(&t0));\n  Eurydice_arr_db t1;\n  Eurydice_arr_a4 repeat_expression[8U];\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t1.data, repeat_expression, (size_t)8U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_arithmetic_power2round_vector_37(Eurydice_array_to_slice_mut_71(&t0),\n    Eurydice_array_to_slice_mut_71(&t1));\n  libcrux_ml_dsa_encoding_verification_key_generate_serialized_37(seed_for_a,\n    Eurydice_array_to_slice_shared_710(&t1),\n    verification_key);\n  generate_serialized_2e(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE,\n    seed_for_a,\n    seed_for_signing,\n    (\n      KRML_CLITERAL(Eurydice_borrow_slice_u8){\n        .ptr = verification_key.ptr,\n        .meta = verification_key.meta\n      }\n    ),\n    Eurydice_array_to_slice_shared_717(&s1_s2),\n    Eurydice_array_to_slice_shared_710(&t0),\n    signing_key);\n}\n\n/**\n Generate key pair.\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_180 *signing_key,\n  Eurydice_arr_51 *verification_key\n)\n{\n  generate_key_pair_5a1(randomness,\n    Eurydice_array_to_slice_mut_e2(signing_key),\n    Eurydice_array_to_slice_mut_f7(verification_key));\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_internal\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_internal_5a1(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(signing_key,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized0 = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(remaining_serialized0,\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_SIGNING_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_signing = uu____1.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized1 = uu____1.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(remaining_serialized1,\n      LIBCRUX_ML_DSA_CONSTANTS_BYTES_FOR_VERIFICATION_KEY_HASH,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 verification_key_hash = uu____2.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized2 = uu____2.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____3 =\n    Eurydice_slice_split_at(remaining_serialized2,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s1_serialized = uu____3.fst;\n  Eurydice_borrow_slice_u8 remaining_serialized = uu____3.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____4 =\n    Eurydice_slice_split_at(remaining_serialized,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE *\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 s2_serialized = uu____4.fst;\n  Eurydice_borrow_slice_u8 t0_serialized = uu____4.snd;\n  Eurydice_arr_25 s1_as_ntt;\n  Eurydice_arr_a4 repeat_expression0[7U];\n  KRML_MAYBE_FOR7(i,\n    (size_t)0U,\n    (size_t)7U,\n    (size_t)1U,\n    repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s1_as_ntt.data, repeat_expression0, (size_t)7U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_db s2_as_ntt;\n  Eurydice_arr_a4 repeat_expression1[8U];\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(s2_as_ntt.data, repeat_expression1, (size_t)8U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_db t0_as_ntt;\n  Eurydice_arr_a4 repeat_expression2[8U];\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    repeat_expression2[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t0_as_ntt.data, repeat_expression2, (size_t)8U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE,\n    s1_serialized,\n    Eurydice_array_to_slice_mut_718(&s1_as_ntt));\n  libcrux_ml_dsa_encoding_error_deserialize_to_vector_then_ntt_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ETA,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_ERROR_RING_ELEMENT_SIZE,\n    s2_serialized,\n    Eurydice_array_to_slice_mut_71(&s2_as_ntt));\n  libcrux_ml_dsa_encoding_t0_deserialize_to_vector_then_ntt_37(t0_serialized,\n    Eurydice_array_to_slice_mut_71(&t0_as_ntt));\n  Eurydice_arr_46 matrix;\n  Eurydice_arr_a4 repeat_expression3[56U];\n  for (size_t i = (size_t)0U; i < (size_t)56U; i++)\n  {\n    repeat_expression3[i] = libcrux_ml_dsa_polynomial_zero_ff_37();\n  }\n  memcpy(matrix.data, repeat_expression3, (size_t)56U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n    seed_for_a,\n    Eurydice_array_to_slice_mut_717(&matrix));\n  Eurydice_arr_060 message_representative = { .data = { 0U } };\n  libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(verification_key_hash,\n    &domain_separation_context,\n    message,\n    &message_representative);\n  Eurydice_arr_060 mask_seed = { .data = { 0U } };\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n  shake0 = libcrux_ml_dsa_hash_functions_portable_init_26();\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0, seed_for_signing);\n  libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake0,\n    Eurydice_array_to_slice_shared_6e(&randomness));\n  libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake0,\n    Eurydice_array_to_slice_shared_d8(&message_representative));\n  libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake0,\n    Eurydice_array_to_slice_mut_d8(&mask_seed));\n  uint16_t domain_separator_for_mask = 0U;\n  size_t attempt = (size_t)0U;\n  core_option_Option_d9 commitment_hash0 = { .tag = core_option_None };\n  core_option_Option_0d signer_response0 = { .tag = core_option_None };\n  core_option_Option_b9 hint0 = { .tag = core_option_None };\n  while (attempt < LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN)\n  {\n    attempt++;\n    Eurydice_arr_25 mask;\n    Eurydice_arr_a4 repeat_expression4[7U];\n    KRML_MAYBE_FOR7(i,\n      (size_t)0U,\n      (size_t)7U,\n      (size_t)1U,\n      repeat_expression4[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(mask.data, repeat_expression4, (size_t)7U * sizeof (Eurydice_arr_a4));\n    Eurydice_arr_db w0;\n    Eurydice_arr_a4 repeat_expression5[8U];\n    KRML_MAYBE_FOR8(i,\n      (size_t)0U,\n      (size_t)8U,\n      (size_t)1U,\n      repeat_expression5[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(w0.data, repeat_expression5, (size_t)8U * sizeof (Eurydice_arr_a4));\n    Eurydice_arr_db commitment;\n    Eurydice_arr_a4 repeat_expression6[8U];\n    KRML_MAYBE_FOR8(i,\n      (size_t)0U,\n      (size_t)8U,\n      (size_t)1U,\n      repeat_expression6[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(commitment.data, repeat_expression6, (size_t)8U * sizeof (Eurydice_arr_a4));\n    sample_mask_vector_67(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT,\n      &mask_seed,\n      &domain_separator_for_mask,\n      Eurydice_array_to_slice_mut_718(&mask));\n    Eurydice_arr_db a_x_mask;\n    Eurydice_arr_a4 repeat_expression[8U];\n    KRML_MAYBE_FOR8(i,\n      (size_t)0U,\n      (size_t)8U,\n      (size_t)1U,\n      repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n    memcpy(a_x_mask.data, repeat_expression, (size_t)8U * sizeof (Eurydice_arr_a4));\n    Eurydice_arr_25\n    mask_ntt =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)7U,\n        &mask,\n        Eurydice_arr_a4,\n        Eurydice_arr_25);\n    KRML_MAYBE_FOR7(i,\n      (size_t)0U,\n      (size_t)7U,\n      (size_t)1U,\n      size_t i0 = i;\n      libcrux_ml_dsa_ntt_ntt_37(&mask_ntt.data[i0]););\n    libcrux_ml_dsa_matrix_compute_matrix_x_mask_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n      Eurydice_array_to_slice_shared_718(&matrix),\n      Eurydice_array_to_slice_shared_716(&mask_ntt),\n      Eurydice_array_to_slice_mut_71(&a_x_mask));\n    libcrux_ml_dsa_arithmetic_decompose_vector_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2,\n      Eurydice_array_to_slice_shared_710(&a_x_mask),\n      Eurydice_array_to_slice_mut_71(&w0),\n      Eurydice_array_to_slice_mut_71(&commitment));\n    Eurydice_arr_060 commitment_hash_candidate = { .data = { 0U } };\n    Eurydice_arr_9e commitment_serialized = { .data = { 0U } };\n    libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_COMMITMENT_RING_ELEMENT_SIZE,\n      Eurydice_array_to_slice_shared_710(&commitment),\n      Eurydice_array_to_slice_mut_fd(&commitment_serialized));\n    libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n    shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n    libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n      Eurydice_array_to_slice_shared_d8(&message_representative));\n    libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n      Eurydice_array_to_slice_shared_fd(&commitment_serialized));\n    libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n      Eurydice_array_to_slice_mut_d8(&commitment_hash_candidate));\n    Eurydice_arr_a4 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();\n    sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_d8(&commitment_hash_candidate),\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ONES_IN_VERIFIER_CHALLENGE,\n      &verifier_challenge);\n    libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);\n    Eurydice_arr_25\n    challenge_times_s1 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)7U,\n        &s1_as_ntt,\n        Eurydice_arr_a4,\n        Eurydice_arr_25);\n    Eurydice_arr_db\n    challenge_times_s2 =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)8U,\n        &s2_as_ntt,\n        Eurydice_arr_a4,\n        Eurydice_arr_db);\n    libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_718(&challenge_times_s1),\n      &verifier_challenge);\n    libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_71(&challenge_times_s2),\n      &verifier_challenge);\n    libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n      Eurydice_array_to_slice_mut_718(&mask),\n      Eurydice_array_to_slice_shared_716(&challenge_times_s1));\n    libcrux_ml_dsa_matrix_subtract_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n      Eurydice_array_to_slice_mut_71(&w0),\n      Eurydice_array_to_slice_shared_710(&challenge_times_s2));\n    if\n    (\n      !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_716(&mask),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA)\n    )\n    {\n      if\n      (\n        !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_710(&w0),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2 - LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA)\n      )\n      {\n        Eurydice_arr_db\n        challenge_times_t0 =\n          core_array__core__clone__Clone_for__T__N___clone((size_t)8U,\n            &t0_as_ntt,\n            Eurydice_arr_a4,\n            Eurydice_arr_db);\n        libcrux_ml_dsa_matrix_vector_times_ring_element_37(Eurydice_array_to_slice_mut_71(&challenge_times_t0),\n          &verifier_challenge);\n        if\n        (\n          !libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_710(&challenge_times_t0),\n            LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2)\n        )\n        {\n          libcrux_ml_dsa_matrix_add_vectors_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n            Eurydice_array_to_slice_mut_71(&w0),\n            Eurydice_array_to_slice_shared_710(&challenge_times_t0));\n          Eurydice_arr_fb\n          hint_candidate =\n            {\n              .data = {\n                { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n                { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }\n              }\n            };\n          size_t\n          ones_in_hint =\n            libcrux_ml_dsa_arithmetic_make_hint_37(Eurydice_array_to_slice_shared_710(&w0),\n              Eurydice_array_to_slice_shared_710(&commitment),\n              LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2,\n              Eurydice_array_to_slice_mut_6d1(&hint_candidate));\n          if (!(ones_in_hint > LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT))\n          {\n            attempt = LIBCRUX_ML_DSA_CONSTANTS_REJECTION_SAMPLE_BOUND_SIGN;\n            commitment_hash0 =\n              (\n                KRML_CLITERAL(core_option_Option_d9){\n                  .tag = core_option_Some,\n                  .f0 = commitment_hash_candidate\n                }\n              );\n            signer_response0 =\n              (KRML_CLITERAL(core_option_Option_0d){ .tag = core_option_Some, .f0 = mask });\n            hint0 =\n              (\n                KRML_CLITERAL(core_option_Option_b9){\n                  .tag = core_option_Some,\n                  .f0 = hint_candidate\n                }\n              );\n          }\n        }\n      }\n    }\n  }\n  core_result_Result_53 uu____5;\n  if (commitment_hash0.tag == core_option_None)\n  {\n    uu____5 =\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n        }\n      );\n  }\n  else\n  {\n    Eurydice_arr_060 commitment_hash = commitment_hash0.f0;\n    Eurydice_arr_060 commitment_hash1 = commitment_hash;\n    if (signer_response0.tag == core_option_None)\n    {\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n    else\n    {\n      Eurydice_arr_25 signer_response = signer_response0.f0;\n      Eurydice_arr_25 signer_response1 = signer_response;\n      if (!(hint0.tag == core_option_None))\n      {\n        Eurydice_arr_fb hint = hint0.f0;\n        Eurydice_arr_fb hint1 = hint;\n        libcrux_ml_dsa_encoding_signature_serialize_37(Eurydice_array_to_slice_shared_d8(&commitment_hash1),\n          Eurydice_array_to_slice_shared_716(&signer_response1),\n          Eurydice_array_to_slice_shared_6d1(&hint1),\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COMMITMENT_HASH_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT,\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_GAMMA1_RING_ELEMENT_SIZE,\n          LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT,\n          Eurydice_array_to_slice_mut_24(signature));\n        return (KRML_CLITERAL(core_result_Result_53){ .tag = core_result_Ok });\n      }\n      uu____5 =\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_RejectionSamplingError\n          }\n        );\n    }\n  }\n  return uu____5;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_mut\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_mut_5a1(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_53){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    sign_internal_5a1(signing_key,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_8b\nsign_5a1(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_38 signature = libcrux_ml_dsa_types_zero_c5_c2();\n  core_result_Result_53\n  uu____0 = sign_mut_5a1(signing_key, message, context, randomness, &signature);\n  core_result_Result_8b uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_8b){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_8b){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\n/**\n Sign.\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n)\n{\n  return sign_5a1(Eurydice_array_to_slice_shared_e2(signing_key), message, context, randomness);\n}\n\n/**\n Sign.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign_mut(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  return\n    sign_mut_5a1(Eurydice_array_to_slice_shared_e2(signing_key),\n      message,\n      context,\n      randomness,\n      signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_pre_hashed_mut\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_53\nsign_pre_hashed_mut_3f1(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n)\n{\n  if (!(context.meta > LIBCRUX_ML_DSA_CONSTANTS_CONTEXT_MAX_LEN))\n  {\n    libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n    core_result_Result_a8\n    uu____0 =\n      libcrux_ml_dsa_pre_hash_new_88(context,\n        (\n          KRML_CLITERAL(core_option_Option_b5){\n            .tag = core_option_Some,\n            .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n          }\n        ));\n    if (!(uu____0.tag == core_result_Ok))\n    {\n      return\n        (\n          KRML_CLITERAL(core_result_Result_53){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n          }\n        );\n    }\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n    libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n    return\n      sign_internal_5a1(signing_key,\n        (\n          KRML_CLITERAL(Eurydice_borrow_slice_u8){\n            .ptr = pre_hash_buffer.ptr,\n            .meta = pre_hash_buffer.meta\n          }\n        ),\n        (\n          KRML_CLITERAL(core_option_Option_84){\n            .tag = core_option_Some,\n            .f0 = domain_separation_context\n          }\n        ),\n        randomness,\n        signature);\n  }\n  return\n    (\n      KRML_CLITERAL(core_result_Result_53){\n        .tag = core_result_Err,\n        .f0 = libcrux_ml_dsa_types_SigningError_ContextTooLongError\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.sign_pre_hashed\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_hash_functions_portable_Shake256X4, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_8b\nsign_pre_hashed_3f1(\n  Eurydice_borrow_slice_u8 signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  Eurydice_arr_38 signature = libcrux_ml_dsa_types_zero_c5_c2();\n  core_result_Result_53\n  uu____0 =\n    sign_pre_hashed_mut_3f1(signing_key,\n      message,\n      context,\n      pre_hash_buffer,\n      randomness,\n      &signature);\n  core_result_Result_8b uu____1;\n  if (uu____0.tag == core_result_Ok)\n  {\n    uu____1 =\n      (\n        KRML_CLITERAL(core_result_Result_8b){\n          .tag = core_result_Ok,\n          .val = { .case_Ok = signature }\n        }\n      );\n  }\n  else\n  {\n    libcrux_ml_dsa_types_SigningError e = uu____0.f0;\n    uu____1 =\n      (KRML_CLITERAL(core_result_Result_8b){ .tag = core_result_Err, .val = { .case_Err = e } });\n  }\n  return uu____1;\n}\n\n/**\n Sign (pre-hashed).\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign_pre_hashed_shake128(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n)\n{\n  return\n    sign_pre_hashed_3f1(Eurydice_array_to_slice_shared_e2(signing_key),\n      message,\n      context,\n      pre_hash_buffer,\n      randomness);\n}\n\n/**\n The internal verification API.\n\n If no `domain_separation_context` is supplied, it is assumed that\n `message` already contains the domain separation.\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.verify_internal\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_internal_5a1(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  core_option_Option_84 domain_separation_context,\n  const Eurydice_arr_38 *signature_serialized\n)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_f7(verification_key),\n      LIBCRUX_ML_DSA_CONSTANTS_SEED_FOR_A_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_a = uu____0.fst;\n  Eurydice_borrow_slice_u8 t1_serialized = uu____0.snd;\n  Eurydice_arr_db t1;\n  Eurydice_arr_a4 repeat_expression0[8U];\n  KRML_MAYBE_FOR8(i,\n    (size_t)0U,\n    (size_t)8U,\n    (size_t)1U,\n    repeat_expression0[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(t1.data, repeat_expression0, (size_t)8U * sizeof (Eurydice_arr_a4));\n  libcrux_ml_dsa_encoding_verification_key_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n    LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_VERIFICATION_KEY_SIZE,\n    t1_serialized,\n    Eurydice_array_to_slice_mut_71(&t1));\n  Eurydice_arr_060 deserialized_commitment_hash = { .data = { 0U } };\n  Eurydice_arr_25 deserialized_signer_response;\n  Eurydice_arr_a4 repeat_expression1[7U];\n  KRML_MAYBE_FOR7(i,\n    (size_t)0U,\n    (size_t)7U,\n    (size_t)1U,\n    repeat_expression1[i] = libcrux_ml_dsa_polynomial_zero_ff_37(););\n  memcpy(deserialized_signer_response.data,\n    repeat_expression1,\n    (size_t)7U * sizeof (Eurydice_arr_a4));\n  Eurydice_arr_fb\n  deserialized_hint =\n    {\n      .data = {\n        { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n        { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }\n      }\n    };\n  core_result_Result_41\n  uu____1 =\n    libcrux_ml_dsa_encoding_signature_deserialize_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COMMITMENT_HASH_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_GAMMA1_RING_ELEMENT_SIZE,\n      LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_MAX_ONES_IN_HINT,\n      LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_SIGNATURE_SIZE,\n      Eurydice_array_to_slice_shared_24(signature_serialized),\n      Eurydice_array_to_slice_mut_d8(&deserialized_commitment_hash),\n      Eurydice_array_to_slice_mut_718(&deserialized_signer_response),\n      Eurydice_array_to_slice_mut_6d1(&deserialized_hint));\n  core_result_Result_41 uu____2;\n  if (uu____1.tag == core_result_Ok)\n  {\n    if\n    (\n      libcrux_ml_dsa_arithmetic_vector_infinity_norm_exceeds_37(Eurydice_array_to_slice_shared_716(&deserialized_signer_response),\n        ((int32_t)1 << (uint32_t)LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA1_EXPONENT) -\n          LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_BETA)\n    )\n    {\n      uu____2 =\n        (\n          KRML_CLITERAL(core_result_Result_41){\n            .tag = core_result_Err,\n            .f0 = libcrux_ml_dsa_types_VerificationError_SignerResponseExceedsBoundError\n          }\n        );\n    }\n    else\n    {\n      Eurydice_arr_46 matrix;\n      Eurydice_arr_a4 repeat_expression[56U];\n      for (size_t i = (size_t)0U; i < (size_t)56U; i++)\n      {\n        repeat_expression[i] = libcrux_ml_dsa_polynomial_zero_ff_37();\n      }\n      memcpy(matrix.data, repeat_expression, (size_t)56U * sizeof (Eurydice_arr_a4));\n      libcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n        seed_for_a,\n        Eurydice_array_to_slice_mut_717(&matrix));\n      Eurydice_arr_060 verification_key_hash = { .data = { 0U } };\n      libcrux_ml_dsa_hash_functions_portable_shake256_61_24(Eurydice_array_to_slice_shared_f7(verification_key),\n        &verification_key_hash);\n      Eurydice_arr_060 message_representative = { .data = { 0U } };\n      libcrux_ml_dsa_ml_dsa_generic_derive_message_representative_43(Eurydice_array_to_slice_shared_d8(&verification_key_hash),\n        &domain_separation_context,\n        message,\n        &message_representative);\n      Eurydice_arr_a4 verifier_challenge = libcrux_ml_dsa_polynomial_zero_ff_37();\n      sample_challenge_ring_element_2e(Eurydice_array_to_slice_shared_d8(&deserialized_commitment_hash),\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ONES_IN_VERIFIER_CHALLENGE,\n        &verifier_challenge);\n      libcrux_ml_dsa_ntt_ntt_37(&verifier_challenge);\n      KRML_MAYBE_FOR7(i,\n        (size_t)0U,\n        (size_t)7U,\n        (size_t)1U,\n        size_t i0 = i;\n        libcrux_ml_dsa_ntt_ntt_37(&deserialized_signer_response.data[i0]););\n      libcrux_ml_dsa_matrix_compute_w_approx_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_ROWS_IN_A,\n        LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_COLUMNS_IN_A,\n        Eurydice_array_to_slice_shared_718(&matrix),\n        Eurydice_array_to_slice_shared_716(&deserialized_signer_response),\n        &verifier_challenge,\n        Eurydice_array_to_slice_mut_71(&t1));\n      Eurydice_arr_060 recomputed_commitment_hash = { .data = { 0U } };\n      libcrux_ml_dsa_arithmetic_use_hint_37(LIBCRUX_ML_DSA_CONSTANTS_ML_DSA_87_GAMMA2,\n        Eurydice_array_to_slice_shared_6d1(&deserialized_hint),\n        Eurydice_array_to_slice_mut_71(&t1));\n      Eurydice_arr_9e commitment_serialized = { .data = { 0U } };\n      libcrux_ml_dsa_encoding_commitment_serialize_vector_37(LIBCRUX_ML_DSA_ML_DSA_GENERIC_ML_DSA_87_COMMITMENT_RING_ELEMENT_SIZE,\n        Eurydice_array_to_slice_shared_710(&t1),\n        Eurydice_array_to_slice_mut_fd(&commitment_serialized));\n      libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\n      shake = libcrux_ml_dsa_hash_functions_portable_init_26();\n      libcrux_ml_dsa_hash_functions_portable_absorb_26(&shake,\n        Eurydice_array_to_slice_shared_d8(&message_representative));\n      libcrux_ml_dsa_hash_functions_portable_absorb_final_26(&shake,\n        Eurydice_array_to_slice_shared_fd(&commitment_serialized));\n      libcrux_ml_dsa_hash_functions_portable_squeeze_26(&shake,\n        Eurydice_array_to_slice_mut_d8(&recomputed_commitment_hash));\n      if\n      (\n        Eurydice_array_eq((size_t)64U,\n          &deserialized_commitment_hash,\n          &recomputed_commitment_hash,\n          uint8_t)\n      )\n      {\n        uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Ok });\n      }\n      else\n      {\n        uu____2 =\n          (\n            KRML_CLITERAL(core_result_Result_41){\n              .tag = core_result_Err,\n              .f0 = libcrux_ml_dsa_types_VerificationError_CommitmentHashesDontMatchError\n            }\n          );\n      }\n    }\n  }\n  else\n  {\n    libcrux_ml_dsa_types_VerificationError e = uu____1.f0;\n    uu____2 = (KRML_CLITERAL(core_result_Result_41){ .tag = core_result_Err, .f0 = e });\n  }\n  return uu____2;\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.verify\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_5a1(\n  const Eurydice_arr_51 *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature_serialized\n)\n{\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (KRML_CLITERAL(core_option_Option_b5){ .tag = core_option_None }));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_5a1(verification_key_serialized,\n      message,\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\n/**\n Verify.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_verify(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n)\n{\n  return verify_5a1(verification_key, message, context, signature);\n}\n\n/**\nA monomorphic instance of libcrux_ml_dsa.ml_dsa_generic.ml_dsa_87.verify_pre_hashed\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients, libcrux_ml_dsa_samplex4_portable_PortableSampler, libcrux_ml_dsa_hash_functions_portable_Shake128, libcrux_ml_dsa_hash_functions_portable_Shake128X4, libcrux_ml_dsa_hash_functions_portable_Shake256, libcrux_ml_dsa_hash_functions_portable_Shake256Xof, libcrux_ml_dsa_pre_hash_SHAKE128_PH\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE core_result_Result_41\nverify_pre_hashed_3f1(\n  const Eurydice_arr_51 *verification_key_serialized,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_38 *signature_serialized\n)\n{\n  libcrux_ml_dsa_pre_hash_hash_30_83(message, pre_hash_buffer);\n  core_result_Result_a8\n  uu____0 =\n    libcrux_ml_dsa_pre_hash_new_88(context,\n      (\n        KRML_CLITERAL(core_option_Option_b5){\n          .tag = core_option_Some,\n          .f0 = libcrux_ml_dsa_pre_hash_oid_30()\n        }\n      ));\n  if (!(uu____0.tag == core_result_Ok))\n  {\n    return\n      (\n        KRML_CLITERAL(core_result_Result_41){\n          .tag = core_result_Err,\n          .f0 = libcrux_ml_dsa_types_VerificationError_VerificationContextTooLongError\n        }\n      );\n  }\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext dsc = uu____0.val.case_Ok;\n  libcrux_ml_dsa_pre_hash_DomainSeparationContext domain_separation_context = dsc;\n  return\n    verify_internal_5a1(verification_key_serialized,\n      (\n        KRML_CLITERAL(Eurydice_borrow_slice_u8){\n          .ptr = pre_hash_buffer.ptr,\n          .meta = pre_hash_buffer.meta\n        }\n      ),\n      (\n        KRML_CLITERAL(core_option_Option_84){\n          .tag = core_option_Some,\n          .f0 = domain_separation_context\n        }\n      ),\n      signature_serialized);\n}\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_verify_pre_hashed_shake128(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_38 *signature\n)\n{\n  return verify_pre_hashed_3f1(verification_key, message, context, pre_hash_buffer, signature);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_mldsa_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mldsa_portable_H\n#define libcrux_mldsa_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_sha3_internal.h\"\n#include \"libcrux_mldsa_core.h\"\n\ntypedef struct libcrux_ml_dsa_hash_functions_portable_Shake128X4_s\n{\n  Eurydice_arr_26 state0;\n  Eurydice_arr_26 state1;\n  Eurydice_arr_26 state2;\n  Eurydice_arr_26 state3;\n}\nlibcrux_ml_dsa_hash_functions_portable_Shake128X4;\n\ntypedef libcrux_sha3_portable_KeccakState libcrux_ml_dsa_hash_functions_portable_Shake256;\n\ntypedef struct libcrux_ml_dsa_hash_functions_portable_Shake256X4_s\n{\n  Eurydice_arr_26 state0;\n  Eurydice_arr_26 state1;\n  Eurydice_arr_26 state2;\n  Eurydice_arr_26 state3;\n}\nlibcrux_ml_dsa_hash_functions_portable_Shake256X4;\n\ntypedef libcrux_sha3_portable_incremental_Shake256Xof\nlibcrux_ml_dsa_hash_functions_portable_Shake256Xof;\n\nlibcrux_ml_dsa_hash_functions_portable_Shake128X4\nlibcrux_ml_dsa_hash_functions_portable_init_absorb(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n);\n\nEurydice_arr_26\nlibcrux_ml_dsa_hash_functions_portable_init_absorb_final_shake256(\n  Eurydice_borrow_slice_u8 input\n);\n\nlibcrux_ml_dsa_hash_functions_portable_Shake256X4\nlibcrux_ml_dsa_hash_functions_portable_init_absorb_x4(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n);\n\nvoid\nlibcrux_ml_dsa_hash_functions_portable_shake128(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\nEurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_block_shake256(Eurydice_arr_26 *state);\n\nEurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_block_x4(\n  libcrux_ml_dsa_hash_functions_portable_Shake256X4 *state\n);\n\nvoid\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_five_blocks(\n  libcrux_ml_dsa_hash_functions_portable_Shake128X4 *state,\n  Eurydice_arr_12 *out0,\n  Eurydice_arr_12 *out1,\n  Eurydice_arr_12 *out2,\n  Eurydice_arr_12 *out3\n);\n\nEurydice_arr_27_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block(\n  libcrux_ml_dsa_hash_functions_portable_Shake128X4 *state\n);\n\nEurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block_shake256(Eurydice_arr_26 *state);\n\nEurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4(\n  libcrux_ml_dsa_hash_functions_portable_Shake256X4 *state\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::Xof for libcrux_ml_dsa::hash_functions::portable::Shake128}\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_shake128_7b(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake128X4}\n*/\nlibcrux_ml_dsa_hash_functions_portable_Shake128X4\nlibcrux_ml_dsa_hash_functions_portable_init_absorb_11(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake128X4}\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_five_blocks_11(\n  libcrux_ml_dsa_hash_functions_portable_Shake128X4 *self,\n  Eurydice_arr_12 *out0,\n  Eurydice_arr_12 *out1,\n  Eurydice_arr_12 *out2,\n  Eurydice_arr_12 *out3\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake128::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake128X4}\n*/\nEurydice_arr_27_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block_11(\n  libcrux_ml_dsa_hash_functions_portable_Shake128X4 *self\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\nEurydice_arr_26\nlibcrux_ml_dsa_hash_functions_portable_init_absorb_final_61(Eurydice_borrow_slice_u8 input);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\nEurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_block_61(Eurydice_arr_26 *self);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\nEurydice_arr_3d\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block_61(Eurydice_arr_26 *self);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_absorb_26(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  Eurydice_borrow_slice_u8 input\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_absorb_final_26(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  Eurydice_borrow_slice_u8 input\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}\n*/\nlibcrux_sha3_generic_keccak_xof_KeccakXofState_e2\nlibcrux_ml_dsa_hash_functions_portable_init_26(void);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::Xof for libcrux_ml_dsa::hash_functions::portable::Shake256Xof}\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_squeeze_26(\n  libcrux_sha3_generic_keccak_xof_KeccakXofState_e2 *self,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}\n*/\nlibcrux_ml_dsa_hash_functions_portable_Shake256X4\nlibcrux_ml_dsa_hash_functions_portable_init_absorb_x4_9b(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}\n*/\nEurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_first_block_x4_9b(\n  libcrux_ml_dsa_hash_functions_portable_Shake256X4 *self\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}\n*/\nEurydice_arr_3d_x4\nlibcrux_ml_dsa_hash_functions_portable_squeeze_next_block_x4_9b(\n  libcrux_ml_dsa_hash_functions_portable_Shake256X4 *self\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::samplex4::X4Sampler for libcrux_ml_dsa::samplex4::portable::PortableSampler}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.samplex4.portable.matrix_flat_a8\nwith types libcrux_ml_dsa_simd_portable_vector_type_Coefficients\nwith const generics\n\n*/\nvoid\nlibcrux_ml_dsa_samplex4_portable_matrix_flat_a8_37(\n  size_t columns,\n  Eurydice_borrow_slice_u8 seed,\n  Eurydice_dst_ref_mut_e7 matrix\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256\nwith const generics\n- OUTPUT_LENGTH= 64\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_shake256_24(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_060 *out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_61\nwith const generics\n- OUTPUT_LENGTH= 64\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_shake256_61_24(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_060 *out\n);\n\n/**\n Generate key pair.\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_18 *signing_key,\n  Eurydice_arr_40 *verification_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256\nwith const generics\n- OUTPUT_LENGTH= 576\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_shake256_1b(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_5f0 *out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_x4_9b\nwith const generics\n- OUT_LEN= 576\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_shake256_x4_9b_1b(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_5f0 *out0,\n  Eurydice_arr_5f0 *out1,\n  Eurydice_arr_5f0 *out2,\n  Eurydice_arr_5f0 *out3\n);\n\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256\nwith const generics\n- OUTPUT_LENGTH= 640\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_shake256_c8(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_c30 *out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::XofX4 for libcrux_ml_dsa::hash_functions::portable::Shake256X4}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_x4_9b\nwith const generics\n- OUT_LEN= 640\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_shake256_x4_9b_c8(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_arr_c30 *out0,\n  Eurydice_arr_c30 *out1,\n  Eurydice_arr_c30 *out2,\n  Eurydice_arr_c30 *out3\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_61\nwith const generics\n- OUTPUT_LENGTH= 640\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_shake256_61_c8(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_c30 *out\n);\n\n/**\nThis function found in impl {libcrux_ml_dsa::hash_functions::shake256::DsaXof for libcrux_ml_dsa::hash_functions::portable::Shake256}\n*/\n/**\nA monomorphic instance of libcrux_ml_dsa.hash_functions.portable.shake256_61\nwith const generics\n- OUTPUT_LENGTH= 576\n*/\nvoid\nlibcrux_ml_dsa_hash_functions_portable_shake256_61_1b(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_arr_5f0 *out\n);\n\n/**\n Sign.\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Sign.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign_mut(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_400 *signature\n);\n\n/**\n Sign (pre-hashed).\n*/\ncore_result_Result_48\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_sign_pre_hashed_shake128(\n  const Eurydice_arr_18 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Verify.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_verify(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_400 *signature\n);\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_44_verify_pre_hashed_shake128(\n  const Eurydice_arr_40 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_400 *signature\n);\n\n/**\n Generate key pair.\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_d1 *signing_key,\n  Eurydice_arr_4a *verification_key\n);\n\n/**\n Sign.\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Sign.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign_mut(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_96 *signature\n);\n\n/**\n Sign (pre-hashed).\n*/\ncore_result_Result_8c\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_sign_pre_hashed_shake128(\n  const Eurydice_arr_d1 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Verify.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_verify(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_96 *signature\n);\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_65_verify_pre_hashed_shake128(\n  const Eurydice_arr_4a *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_96 *signature\n);\n\n/**\n Generate key pair.\n*/\nvoid\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_generate_key_pair(\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_180 *signing_key,\n  Eurydice_arr_51 *verification_key\n);\n\n/**\n Sign.\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Sign.\n*/\ncore_result_Result_53\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign_mut(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_arr_60 randomness,\n  Eurydice_arr_38 *signature\n);\n\n/**\n Sign (pre-hashed).\n*/\ncore_result_Result_8b\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_sign_pre_hashed_shake128(\n  const Eurydice_arr_180 *signing_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  Eurydice_arr_60 randomness\n);\n\n/**\n Verify.\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_verify(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  const Eurydice_arr_38 *signature\n);\n\n/**\n Verify (pre-hashed with SHAKE-128).\n*/\ncore_result_Result_41\nlibcrux_ml_dsa_ml_dsa_generic_instantiations_portable_ml_dsa_87_verify_pre_hashed_shake128(\n  const Eurydice_arr_51 *verification_key,\n  Eurydice_borrow_slice_u8 message,\n  Eurydice_borrow_slice_u8 context,\n  Eurydice_mut_borrow_slice_u8 pre_hash_buffer,\n  const Eurydice_arr_38 *signature\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mldsa_portable_H_DEFINED\n#endif /* libcrux_mldsa_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_sha3.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_sha3_H\n#define libcrux_sha3_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_sha3_internal.h\"\n#include \"libcrux_mldsa_core.h\"\n\n/**\n A portable SHAKE128 implementation.\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_shake128(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_c6(data, digest);\n}\n\n/**\n A portable SHAKE256 implementation.\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_shake256(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_ad(data, digest);\n}\n\n/**\n A portable SHA3 224 implementation.\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_sha224(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_1e(data, digest);\n}\n\n/**\n A portable SHA3 256 implementation.\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_sha256(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_ad0(data, digest);\n}\n\n/**\n A portable SHA3 384 implementation.\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_portable_sha384(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_7c(data, digest);\n}\n\n/**\n SHA3 224\n\n Preconditions:\n - `digest.len() == 28`\n*/\nstatic inline void\nlibcrux_sha3_sha224_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)\n{\n  libcrux_sha3_portable_sha224(digest, payload);\n}\n\n/**\n SHA3 224\n*/\nstatic inline Eurydice_arr_f1 libcrux_sha3_sha224(Eurydice_borrow_slice_u8 data)\n{\n  Eurydice_arr_f1 out = { .data = { 0U } };\n  libcrux_sha3_sha224_ema(Eurydice_array_to_slice_mut_c0(&out), data);\n  return out;\n}\n\n/**\n SHA3 256\n*/\nstatic inline void\nlibcrux_sha3_sha256_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)\n{\n  libcrux_sha3_portable_sha256(digest, payload);\n}\n\n/**\n SHA3 256\n*/\nstatic inline Eurydice_arr_60 libcrux_sha3_sha256(Eurydice_borrow_slice_u8 data)\n{\n  Eurydice_arr_60 out = { .data = { 0U } };\n  libcrux_sha3_sha256_ema(Eurydice_array_to_slice_mut_6e(&out), data);\n  return out;\n}\n\n/**\n SHA3 384\n*/\nstatic inline void\nlibcrux_sha3_sha384_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)\n{\n  libcrux_sha3_portable_sha384(digest, payload);\n}\n\n/**\n SHA3 384\n*/\nstatic inline Eurydice_arr_5f libcrux_sha3_sha384(Eurydice_borrow_slice_u8 data)\n{\n  Eurydice_arr_5f out = { .data = { 0U } };\n  libcrux_sha3_sha384_ema(Eurydice_array_to_slice_mut_95(&out), data);\n  return out;\n}\n\n/**\n SHAKE 128\n\n Writes `out.len()` bytes.\n*/\nstatic inline void\nlibcrux_sha3_shake128_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_borrow_slice_u8 data)\n{\n  libcrux_sha3_portable_shake128(out, data);\n}\n\n/**\n SHAKE 256\n\n Writes `out.len()` bytes.\n*/\nstatic inline void\nlibcrux_sha3_shake256_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_borrow_slice_u8 data)\n{\n  libcrux_sha3_portable_shake256(out, data);\n}\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_sha3_H_DEFINED\n#endif /* libcrux_sha3_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_sha3_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_sha3_avx2.h\"\n\n#include \"libcrux_sha3_internal.h\"\n#include \"libcrux_mldsa_core.h\"\n#include \"internal/libcrux_mldsa_core.h\"\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i zero_b0(void)\n{\n  return mm256_set1_epi64x((int64_t)0LL);\n}\n\nstatic KRML_MUSTINLINE __m256i\n_veor5q_u64(__m256i a, __m256i b, __m256i c, __m256i d, __m256i e)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  __m256i cd = mm256_xor_si256(c, d);\n  __m256i abcd = mm256_xor_si256(ab, cd);\n  return mm256_xor_si256(abcd, e);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i xor5_b0(__m256i a, __m256i b, __m256i c, __m256i d, __m256i e)\n{\n  return _veor5q_u64(a, b, c, d, e);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_76(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)1, x, __m256i),\n      mm256_srli_epi64((int32_t)63, x, __m256i));\n}\n\nstatic KRML_MUSTINLINE __m256i _vrax1q_u64(__m256i a, __m256i b)\n{\n  return mm256_xor_si256(a, rotate_left_76(b));\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left1_and_xor_b0(__m256i a, __m256i b)\n{\n  return _vrax1q_u64(a, b);\n}\n\nstatic KRML_MUSTINLINE __m256i _vbcaxq_u64(__m256i a, __m256i b, __m256i c)\n{\n  return mm256_xor_si256(a, mm256_andnot_si256(c, b));\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i and_not_xor_b0(__m256i a, __m256i b, __m256i c)\n{\n  return _vbcaxq_u64(a, b, c);\n}\n\nstatic KRML_MUSTINLINE __m256i _veorq_n_u64(__m256i a, uint64_t c)\n{\n  __m256i c0 = mm256_set1_epi64x((int64_t)c);\n  return mm256_xor_si256(a, c0);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i xor_constant_b0(__m256i a, uint64_t c)\n{\n  return _veorq_n_u64(a, c);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i xor_b0(__m256i a, __m256i b)\n{\n  return mm256_xor_si256(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.new_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE Eurydice_arr_05 libcrux_sha3_generic_keccak_new_80_a6(void)\n{\n  Eurydice_arr_05 lit;\n  __m256i repeat_expression[25U];\n  for (size_t i = (size_t)0U; i < (size_t)25U; i++)\n  {\n    repeat_expression[i] = zero_b0();\n  }\n  memcpy(lit.data, repeat_expression, (size_t)25U * sizeof (__m256i));\n  return lit;\n}\n\n/**\n Initialise the [`KeccakState`].\n*/\nEurydice_arr_05 libcrux_sha3_avx2_x4_incremental_init(void)\n{\n  return libcrux_sha3_generic_keccak_new_80_a6();\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.set_ij\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_traits_set_ij_a6(Eurydice_arr_05 *arr, size_t i, size_t j, __m256i value)\n{\n  arr->data[(size_t)5U * j + i] = value;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.get_ij\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE const\n__m256i\n*libcrux_sha3_traits_get_ij_a6(const Eurydice_arr_05 *arr, size_t i, size_t j)\n{\n  return &arr->data[(size_t)5U * j + i];\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_block\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nload_block_3a(Eurydice_arr_05 *state, const Eurydice_arr_cd *blocks, size_t offset)\n{\n  for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)32U; i++)\n  {\n    size_t i4 = i;\n    size_t start = offset + (size_t)32U * i4;\n    __m256i\n    v00 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_7e(blocks->data[0U],\n          (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v10 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_7e(blocks->data[1U],\n          (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v20 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_7e(blocks->data[2U],\n          (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v30 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_7e(blocks->data[3U],\n          (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)32U })));\n    __m256i v0l = mm256_unpacklo_epi64(v00, v10);\n    __m256i v1h = mm256_unpackhi_epi64(v00, v10);\n    __m256i v2l = mm256_unpacklo_epi64(v20, v30);\n    __m256i v3h = mm256_unpackhi_epi64(v20, v30);\n    __m256i v0 = mm256_permute2x128_si256((int32_t)32, v0l, v2l, __m256i);\n    __m256i v1 = mm256_permute2x128_si256((int32_t)32, v1h, v3h, __m256i);\n    __m256i v2 = mm256_permute2x128_si256((int32_t)49, v0l, v2l, __m256i);\n    __m256i v3 = mm256_permute2x128_si256((int32_t)49, v1h, v3h, __m256i);\n    size_t i0 = (size_t)4U * i4 / (size_t)5U;\n    size_t j0 = (size_t)4U * i4 % (size_t)5U;\n    size_t i1 = ((size_t)4U * i4 + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i4 + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i4 + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i4 + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i4 + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i4 + (size_t)3U) % (size_t)5U;\n    libcrux_sha3_traits_set_ij_a6(state,\n      i0,\n      j0,\n      mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i0, j0)[0U], v0));\n    libcrux_sha3_traits_set_ij_a6(state,\n      i1,\n      j1,\n      mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i1, j1)[0U], v1));\n    libcrux_sha3_traits_set_ij_a6(state,\n      i2,\n      j2,\n      mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i2, j2)[0U], v2));\n    libcrux_sha3_traits_set_ij_a6(state,\n      i3,\n      j3,\n      mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i3, j3)[0U], v3));\n  }\n  size_t rem = (size_t)168U % (size_t)32U;\n  size_t start = offset + (size_t)32U * ((size_t)168U / (size_t)32U);\n  Eurydice_arr_60 u8s = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)8U })),\n    Eurydice_slice_subslice_shared_7e(blocks->data[0U],\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)8U, .end = (size_t)16U })),\n    Eurydice_slice_subslice_shared_7e(blocks->data[1U],\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)16U, .end = (size_t)24U })),\n    Eurydice_slice_subslice_shared_7e(blocks->data[2U],\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)24U, .end = (size_t)32U })),\n    Eurydice_slice_subslice_shared_7e(blocks->data[3U],\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  __m256i\n  u =\n    mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n        &u8s,\n        uint8_t,\n        Eurydice_borrow_slice_u8));\n  size_t i0 = (size_t)4U * ((size_t)168U / (size_t)32U) / (size_t)5U;\n  size_t j0 = (size_t)4U * ((size_t)168U / (size_t)32U) % (size_t)5U;\n  libcrux_sha3_traits_set_ij_a6(state,\n    i0,\n    j0,\n    mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i0, j0)[0U], u));\n  if (rem == (size_t)16U)\n  {\n    Eurydice_arr_60 u8s0 = { .data = { 0U } };\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)8U })),\n      Eurydice_slice_subslice_shared_7e(blocks->data[0U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)8U, .end = (size_t)16U })),\n      Eurydice_slice_subslice_shared_7e(blocks->data[1U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)16U, .end = (size_t)24U })),\n      Eurydice_slice_subslice_shared_7e(blocks->data[2U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)24U, .end = (size_t)32U })),\n      Eurydice_slice_subslice_shared_7e(blocks->data[3U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    __m256i\n    u0 =\n      mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n          &u8s0,\n          uint8_t,\n          Eurydice_borrow_slice_u8));\n    size_t i = ((size_t)4U * ((size_t)168U / (size_t)32U) + (size_t)1U) / (size_t)5U;\n    size_t j = ((size_t)4U * ((size_t)168U / (size_t)32U) + (size_t)1U) % (size_t)5U;\n    libcrux_sha3_traits_set_ij_a6(state,\n      i,\n      j,\n      mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i, j)[0U], u0));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nstatic KRML_MUSTINLINE void\nload_last_c6(Eurydice_arr_05 *state, const Eurydice_arr_cd *blocks, size_t start, size_t len)\n{\n  Eurydice_arr_b3\n  buffers =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_361(&buffers.data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = len })),\n      Eurydice_slice_subslice_shared_7e(blocks->data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + len })),\n      uint8_t);\n    buffers.data[i0].data[len] = 31U;\n    size_t uu____0 = i0;\n    size_t uu____1 = (size_t)168U - (size_t)1U;\n    buffers.data[uu____0].data[uu____1] = (uint32_t)buffers.data[uu____0].data[uu____1] | 128U;);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_cd\n  lvalue =\n    {\n      .data = {\n        Eurydice_array_to_slice_shared_7b(buffers.data),\n        Eurydice_array_to_slice_shared_7b(&buffers.data[1U]),\n        Eurydice_array_to_slice_shared_7b(&buffers.data[2U]),\n        Eurydice_array_to_slice_shared_7b(&buffers.data[3U])\n      }\n    };\n  load_block_3a(state, &lvalue, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<4usize> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last_8f\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nstatic void\nload_last_8f_c6(Eurydice_arr_05 *self, const Eurydice_arr_cd *input, size_t start, size_t len)\n{\n  load_last_c6(self, input, start, len);\n}\n\n/**\nThis function found in impl {core::ops::index::Index<(usize, usize), T> for libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.index_c2\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nconst\n__m256i\n*libcrux_sha3_generic_keccak_index_c2_a6(const Eurydice_arr_05 *self, size_t_x2 index)\n{\n  return libcrux_sha3_traits_get_ij_a6(self, index.fst, index.snd);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.theta_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE Eurydice_arr_c0 libcrux_sha3_generic_keccak_theta_80_a6(Eurydice_arr_05 *self)\n{\n  Eurydice_arr_c0\n  c =\n    {\n      .data = {\n        xor5_b0(libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]),\n        xor5_b0(libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]),\n        xor5_b0(libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]),\n        xor5_b0(libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]),\n        xor5_b0(libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U])\n      }\n    };\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_c0){\n        .data = {\n          rotate_left1_and_xor_b0(c.data[((size_t)0U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)0U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)1U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)1U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)2U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)2U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)3U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)3U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)4U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)4U + (size_t)1U) % (size_t)5U])\n        }\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.set_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nvoid\nlibcrux_sha3_generic_keccak_set_80_a6(Eurydice_arr_05 *self, size_t i, size_t j, __m256i v)\n{\n  libcrux_sha3_traits_set_ij_a6(self, i, j, v);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_02(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)36, x, __m256i),\n      mm256_srli_epi64((int32_t)28, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_02(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_02(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_02(__m256i a, __m256i b)\n{\n  return _vxarq_u64_02(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_ac(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)3, x, __m256i),\n      mm256_srli_epi64((int32_t)61, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_ac(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_ac(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_ac(__m256i a, __m256i b)\n{\n  return _vxarq_u64_ac(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_020(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)41, x, __m256i),\n      mm256_srli_epi64((int32_t)23, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_020(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_020(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_020(__m256i a, __m256i b)\n{\n  return _vxarq_u64_020(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_a9(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)18, x, __m256i),\n      mm256_srli_epi64((int32_t)46, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_a9(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_a9(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_a9(__m256i a, __m256i b)\n{\n  return _vxarq_u64_a9(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_0_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_0_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)0U,\n    (size_t)0U,\n    xor_b0(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)1U,\n    (size_t)0U,\n    xor_and_rotate_b0_02(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)2U,\n    (size_t)0U,\n    xor_and_rotate_b0_ac(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)3U,\n    (size_t)0U,\n    xor_and_rotate_b0_020(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)4U,\n    (size_t)0U,\n    xor_and_rotate_b0_a9(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_76(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_76(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_76(__m256i a, __m256i b)\n{\n  return _vxarq_u64_76(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_58(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)44, x, __m256i),\n      mm256_srli_epi64((int32_t)20, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_58(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_58(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_58(__m256i a, __m256i b)\n{\n  return _vxarq_u64_58(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_e0(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)10, x, __m256i),\n      mm256_srli_epi64((int32_t)54, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_e0(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_e0(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_e0(__m256i a, __m256i b)\n{\n  return _vxarq_u64_e0(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_63(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)45, x, __m256i),\n      mm256_srli_epi64((int32_t)19, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_63(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_63(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_63(__m256i a, __m256i b)\n{\n  return _vxarq_u64_63(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_6a(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)2, x, __m256i),\n      mm256_srli_epi64((int32_t)62, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_6a(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_6a(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_6a(__m256i a, __m256i b)\n{\n  return _vxarq_u64_6a(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_1_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_1_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)0U,\n    (size_t)1U,\n    xor_and_rotate_b0_76(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)1U,\n    (size_t)1U,\n    xor_and_rotate_b0_58(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)2U,\n    (size_t)1U,\n    xor_and_rotate_b0_e0(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)3U,\n    (size_t)1U,\n    xor_and_rotate_b0_63(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)4U,\n    (size_t)1U,\n    xor_and_rotate_b0_6a(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_ab(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)62, x, __m256i),\n      mm256_srli_epi64((int32_t)2, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_ab(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_ab(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_ab(__m256i a, __m256i b)\n{\n  return _vxarq_u64_ab(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_5b(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)6, x, __m256i),\n      mm256_srli_epi64((int32_t)58, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_5b(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_5b(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_5b(__m256i a, __m256i b)\n{\n  return _vxarq_u64_5b(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_6f(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)43, x, __m256i),\n      mm256_srli_epi64((int32_t)21, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_6f(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_6f(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_6f(__m256i a, __m256i b)\n{\n  return _vxarq_u64_6f(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_62(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)15, x, __m256i),\n      mm256_srli_epi64((int32_t)49, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_62(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_62(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_62(__m256i a, __m256i b)\n{\n  return _vxarq_u64_62(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_23(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)61, x, __m256i),\n      mm256_srli_epi64((int32_t)3, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_23(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_23(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_23(__m256i a, __m256i b)\n{\n  return _vxarq_u64_23(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_2_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_2_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)0U,\n    (size_t)2U,\n    xor_and_rotate_b0_ab(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)1U,\n    (size_t)2U,\n    xor_and_rotate_b0_5b(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)2U,\n    (size_t)2U,\n    xor_and_rotate_b0_6f(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)3U,\n    (size_t)2U,\n    xor_and_rotate_b0_62(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)4U,\n    (size_t)2U,\n    xor_and_rotate_b0_23(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_37(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)28, x, __m256i),\n      mm256_srli_epi64((int32_t)36, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_37(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_37(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_37(__m256i a, __m256i b)\n{\n  return _vxarq_u64_37(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_bb(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)55, x, __m256i),\n      mm256_srli_epi64((int32_t)9, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_bb(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_bb(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_bb(__m256i a, __m256i b)\n{\n  return _vxarq_u64_bb(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_b9(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)25, x, __m256i),\n      mm256_srli_epi64((int32_t)39, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_b9(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_b9(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_b9(__m256i a, __m256i b)\n{\n  return _vxarq_u64_b9(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_54(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)21, x, __m256i),\n      mm256_srli_epi64((int32_t)43, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_54(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_54(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_54(__m256i a, __m256i b)\n{\n  return _vxarq_u64_54(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_4c(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)56, x, __m256i),\n      mm256_srli_epi64((int32_t)8, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_4c(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_4c(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_4c(__m256i a, __m256i b)\n{\n  return _vxarq_u64_4c(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_3_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_3_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)0U,\n    (size_t)3U,\n    xor_and_rotate_b0_37(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)1U,\n    (size_t)3U,\n    xor_and_rotate_b0_bb(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)2U,\n    (size_t)3U,\n    xor_and_rotate_b0_b9(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)3U,\n    (size_t)3U,\n    xor_and_rotate_b0_54(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)4U,\n    (size_t)3U,\n    xor_and_rotate_b0_4c(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_ce(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)27, x, __m256i),\n      mm256_srli_epi64((int32_t)37, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_ce(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_ce(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_ce(__m256i a, __m256i b)\n{\n  return _vxarq_u64_ce(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_77(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)20, x, __m256i),\n      mm256_srli_epi64((int32_t)44, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_77(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_77(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_77(__m256i a, __m256i b)\n{\n  return _vxarq_u64_77(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_25(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)39, x, __m256i),\n      mm256_srli_epi64((int32_t)25, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_25(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_25(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_25(__m256i a, __m256i b)\n{\n  return _vxarq_u64_25(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_af(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)8, x, __m256i),\n      mm256_srli_epi64((int32_t)56, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_af(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_af(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_af(__m256i a, __m256i b)\n{\n  return _vxarq_u64_af(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_fd(__m256i x)\n{\n  return\n    mm256_xor_si256(mm256_slli_epi64((int32_t)14, x, __m256i),\n      mm256_srli_epi64((int32_t)50, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_fd(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_fd(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_fd(__m256i a, __m256i b)\n{\n  return _vxarq_u64_fd(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_4_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_4_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)0U,\n    (size_t)4U,\n    xor_and_rotate_b0_ce(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)1U,\n    (size_t)4U,\n    xor_and_rotate_b0_77(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)2U,\n    (size_t)4U,\n    xor_and_rotate_b0_25(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)3U,\n    (size_t)4U,\n    xor_and_rotate_b0_af(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)4U,\n    (size_t)4U,\n    xor_and_rotate_b0_fd(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_80_a6(Eurydice_arr_05 *self, Eurydice_arr_c0 t)\n{\n  libcrux_sha3_generic_keccak_rho_0_80_a6(self, t);\n  libcrux_sha3_generic_keccak_rho_1_80_a6(self, t);\n  libcrux_sha3_generic_keccak_rho_2_80_a6(self, t);\n  libcrux_sha3_generic_keccak_rho_3_80_a6(self, t);\n  libcrux_sha3_generic_keccak_rho_4_80_a6(self, t);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_0_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_0_80_a6(Eurydice_arr_05 *self, Eurydice_arr_05 old)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)1U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)2U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)3U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)4U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_1_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_1_80_a6(Eurydice_arr_05 *self, Eurydice_arr_05 old)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)0U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)1U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)2U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)3U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)4U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_2_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_2_80_a6(Eurydice_arr_05 *self, Eurydice_arr_05 old)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)0U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)1U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)2U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)3U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)4U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_3_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_3_80_a6(Eurydice_arr_05 *self, Eurydice_arr_05 old)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)0U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)1U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)2U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)3U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)4U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_4_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_4_80_a6(Eurydice_arr_05 *self, Eurydice_arr_05 old)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)0U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)1U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)2U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)3U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)4U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_a6(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_pi_80_a6(Eurydice_arr_05 *self)\n{\n  Eurydice_arr_05 old = self[0U];\n  libcrux_sha3_generic_keccak_pi_0_80_a6(self, old);\n  libcrux_sha3_generic_keccak_pi_1_80_a6(self, old);\n  libcrux_sha3_generic_keccak_pi_2_80_a6(self, old);\n  libcrux_sha3_generic_keccak_pi_3_80_a6(self, old);\n  libcrux_sha3_generic_keccak_pi_4_80_a6(self, old);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.chi_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_chi_80_a6(Eurydice_arr_05 *self)\n{\n  Eurydice_arr_05 old = self[0U];\n  KRML_MAYBE_FOR5(i0,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR5(i,\n      (size_t)0U,\n      (size_t)5U,\n      (size_t)1U,\n      size_t j = i;\n      libcrux_sha3_generic_keccak_set_80_a6(self,\n        i1,\n        j,\n        and_not_xor_b0(libcrux_sha3_generic_keccak_index_c2_a6(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = j }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)2U) % (size_t)5U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_a6(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)1U) % (size_t)5U }))[0U]));););\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.iota_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_iota_80_a6(Eurydice_arr_05 *self, size_t i)\n{\n  libcrux_sha3_generic_keccak_set_80_a6(self,\n    (size_t)0U,\n    (size_t)0U,\n    xor_constant_b0(libcrux_sha3_generic_keccak_index_c2_a6(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS.data[i]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_keccakf1600_80_a6(Eurydice_arr_05 *self)\n{\n  for (size_t i = (size_t)0U; i < (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_c0 t = libcrux_sha3_generic_keccak_theta_80_a6(self);\n    libcrux_sha3_generic_keccak_rho_80_a6(self, t);\n    libcrux_sha3_generic_keccak_pi_80_a6(self);\n    libcrux_sha3_generic_keccak_chi_80_a6(self);\n    libcrux_sha3_generic_keccak_iota_80_a6(self, i0);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 168\n- DELIM= 31\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_fb(\n  Eurydice_arr_05 *self,\n  const Eurydice_arr_cd *input,\n  size_t start,\n  size_t len\n)\n{\n  load_last_8f_c6(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n}\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_absorb_final(\n  Eurydice_arr_05 *s,\n  Eurydice_borrow_slice_u8 data0,\n  Eurydice_borrow_slice_u8 data1,\n  Eurydice_borrow_slice_u8 data2,\n  Eurydice_borrow_slice_u8 data3\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_cd lvalue = { .data = { data0, data1, data2, data3 } };\n  libcrux_sha3_generic_keccak_absorb_final_80_fb(s, &lvalue, (size_t)0U, data0.meta);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_block\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nload_block_5b(Eurydice_arr_05 *state, const Eurydice_arr_cd *blocks, size_t offset)\n{\n  for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)32U; i++)\n  {\n    size_t i4 = i;\n    size_t start = offset + (size_t)32U * i4;\n    __m256i\n    v00 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_7e(blocks->data[0U],\n          (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v10 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_7e(blocks->data[1U],\n          (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v20 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_7e(blocks->data[2U],\n          (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v30 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_7e(blocks->data[3U],\n          (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)32U })));\n    __m256i v0l = mm256_unpacklo_epi64(v00, v10);\n    __m256i v1h = mm256_unpackhi_epi64(v00, v10);\n    __m256i v2l = mm256_unpacklo_epi64(v20, v30);\n    __m256i v3h = mm256_unpackhi_epi64(v20, v30);\n    __m256i v0 = mm256_permute2x128_si256((int32_t)32, v0l, v2l, __m256i);\n    __m256i v1 = mm256_permute2x128_si256((int32_t)32, v1h, v3h, __m256i);\n    __m256i v2 = mm256_permute2x128_si256((int32_t)49, v0l, v2l, __m256i);\n    __m256i v3 = mm256_permute2x128_si256((int32_t)49, v1h, v3h, __m256i);\n    size_t i0 = (size_t)4U * i4 / (size_t)5U;\n    size_t j0 = (size_t)4U * i4 % (size_t)5U;\n    size_t i1 = ((size_t)4U * i4 + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i4 + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i4 + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i4 + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i4 + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i4 + (size_t)3U) % (size_t)5U;\n    libcrux_sha3_traits_set_ij_a6(state,\n      i0,\n      j0,\n      mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i0, j0)[0U], v0));\n    libcrux_sha3_traits_set_ij_a6(state,\n      i1,\n      j1,\n      mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i1, j1)[0U], v1));\n    libcrux_sha3_traits_set_ij_a6(state,\n      i2,\n      j2,\n      mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i2, j2)[0U], v2));\n    libcrux_sha3_traits_set_ij_a6(state,\n      i3,\n      j3,\n      mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i3, j3)[0U], v3));\n  }\n  size_t rem = (size_t)136U % (size_t)32U;\n  size_t start = offset + (size_t)32U * ((size_t)136U / (size_t)32U);\n  Eurydice_arr_60 u8s = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)8U })),\n    Eurydice_slice_subslice_shared_7e(blocks->data[0U],\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)8U, .end = (size_t)16U })),\n    Eurydice_slice_subslice_shared_7e(blocks->data[1U],\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)16U, .end = (size_t)24U })),\n    Eurydice_slice_subslice_shared_7e(blocks->data[2U],\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)24U, .end = (size_t)32U })),\n    Eurydice_slice_subslice_shared_7e(blocks->data[3U],\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  __m256i\n  u =\n    mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n        &u8s,\n        uint8_t,\n        Eurydice_borrow_slice_u8));\n  size_t i0 = (size_t)4U * ((size_t)136U / (size_t)32U) / (size_t)5U;\n  size_t j0 = (size_t)4U * ((size_t)136U / (size_t)32U) % (size_t)5U;\n  libcrux_sha3_traits_set_ij_a6(state,\n    i0,\n    j0,\n    mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i0, j0)[0U], u));\n  if (rem == (size_t)16U)\n  {\n    Eurydice_arr_60 u8s0 = { .data = { 0U } };\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)8U })),\n      Eurydice_slice_subslice_shared_7e(blocks->data[0U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)8U, .end = (size_t)16U })),\n      Eurydice_slice_subslice_shared_7e(blocks->data[1U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)16U, .end = (size_t)24U })),\n      Eurydice_slice_subslice_shared_7e(blocks->data[2U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_364(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)24U, .end = (size_t)32U })),\n      Eurydice_slice_subslice_shared_7e(blocks->data[3U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    __m256i\n    u0 =\n      mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n          &u8s0,\n          uint8_t,\n          Eurydice_borrow_slice_u8));\n    size_t i = ((size_t)4U * ((size_t)136U / (size_t)32U) + (size_t)1U) / (size_t)5U;\n    size_t j = ((size_t)4U * ((size_t)136U / (size_t)32U) + (size_t)1U) % (size_t)5U;\n    libcrux_sha3_traits_set_ij_a6(state,\n      i,\n      j,\n      mm256_xor_si256(libcrux_sha3_traits_get_ij_a6(state, i, j)[0U], u0));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nstatic KRML_MUSTINLINE void\nload_last_ad(Eurydice_arr_05 *state, const Eurydice_arr_cd *blocks, size_t start, size_t len)\n{\n  Eurydice_arr_1a\n  buffers =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_362(&buffers.data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = len })),\n      Eurydice_slice_subslice_shared_7e(blocks->data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + len })),\n      uint8_t);\n    buffers.data[i0].data[len] = 31U;\n    size_t uu____0 = i0;\n    size_t uu____1 = (size_t)136U - (size_t)1U;\n    buffers.data[uu____0].data[uu____1] = (uint32_t)buffers.data[uu____0].data[uu____1] | 128U;);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_cd\n  lvalue =\n    {\n      .data = {\n        Eurydice_array_to_slice_shared_d4(buffers.data),\n        Eurydice_array_to_slice_shared_d4(&buffers.data[1U]),\n        Eurydice_array_to_slice_shared_d4(&buffers.data[2U]),\n        Eurydice_array_to_slice_shared_d4(&buffers.data[3U])\n      }\n    };\n  load_block_5b(state, &lvalue, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<4usize> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last_8f\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nstatic void\nload_last_8f_ad(Eurydice_arr_05 *self, const Eurydice_arr_cd *input, size_t start, size_t len)\n{\n  load_last_ad(self, input, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 136\n- DELIM= 31\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_fb0(\n  Eurydice_arr_05 *self,\n  const Eurydice_arr_cd *input,\n  size_t start,\n  size_t len\n)\n{\n  load_last_8f_ad(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n}\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_absorb_final(\n  Eurydice_arr_05 *s,\n  Eurydice_borrow_slice_u8 data0,\n  Eurydice_borrow_slice_u8 data1,\n  Eurydice_borrow_slice_u8 data2,\n  Eurydice_borrow_slice_u8 data3\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_cd lvalue = { .data = { data0, data1, data2, data3 } };\n  libcrux_sha3_generic_keccak_absorb_final_80_fb0(s, &lvalue, (size_t)0U, data0.meta);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.store_block\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nstore_block_5b(\n  const Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  size_t chunks = len / (size_t)32U;\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = chunks }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      size_t rem = len % (size_t)32U;\n      if (rem > (size_t)0U)\n      {\n        size_t start0 = start + (size_t)32U * chunks;\n        Eurydice_arr_60 u8s = { .data = { 0U } };\n        size_t chunks8 = rem / (size_t)8U;\n        for (size_t i0 = (size_t)0U; i0 < chunks8; i0++)\n        {\n          size_t k = i0;\n          size_t i = ((size_t)4U * chunks + k) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + k) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____1 = Eurydice_array_to_slice_mut_6e(&u8s);\n          mm256_storeu_si256_u8(uu____1, libcrux_sha3_traits_get_ij_a6(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)8U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)8U, .end = (size_t)16U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)16U, .end = (size_t)24U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)24U, .end = (size_t)32U })),\n            uint8_t);\n        }\n        size_t rem8 = rem % (size_t)8U;\n        if (rem8 > (size_t)0U)\n        {\n          size_t i = ((size_t)4U * chunks + chunks8) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + chunks8) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____2 = Eurydice_array_to_slice_mut_6e(&u8s);\n          mm256_storeu_si256_u8(uu____2, libcrux_sha3_traits_get_ij_a6(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = rem8 })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = (size_t)8U,\n                  .end = (size_t)8U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = (size_t)16U,\n                  .end = (size_t)16U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = (size_t)24U,\n                  .end = (size_t)24U + rem8\n                }\n              )),\n            uint8_t);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t i0 = (size_t)4U * i / (size_t)5U;\n    size_t j0 = (size_t)4U * i % (size_t)5U;\n    size_t i1 = ((size_t)4U * i + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i + (size_t)3U) % (size_t)5U;\n    __m256i\n    v0l =\n      mm256_permute2x128_si256((int32_t)32,\n        libcrux_sha3_traits_get_ij_a6(s, i0, j0)[0U],\n        libcrux_sha3_traits_get_ij_a6(s, i2, j2)[0U],\n        __m256i);\n    __m256i\n    v1h =\n      mm256_permute2x128_si256((int32_t)32,\n        libcrux_sha3_traits_get_ij_a6(s, i1, j1)[0U],\n        libcrux_sha3_traits_get_ij_a6(s, i3, j3)[0U],\n        __m256i);\n    __m256i\n    v2l =\n      mm256_permute2x128_si256((int32_t)49,\n        libcrux_sha3_traits_get_ij_a6(s, i0, j0)[0U],\n        libcrux_sha3_traits_get_ij_a6(s, i2, j2)[0U],\n        __m256i);\n    __m256i\n    v3h =\n      mm256_permute2x128_si256((int32_t)49,\n        libcrux_sha3_traits_get_ij_a6(s, i1, j1)[0U],\n        libcrux_sha3_traits_get_ij_a6(s, i3, j3)[0U],\n        __m256i);\n    __m256i v0 = mm256_unpacklo_epi64(v0l, v1h);\n    __m256i v1 = mm256_unpackhi_epi64(v0l, v1h);\n    __m256i v2 = mm256_unpacklo_epi64(v2l, v3h);\n    __m256i v3 = mm256_unpackhi_epi64(v2l, v3h);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_7e(out0,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v0);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_7e(out1,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v1);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_7e(out2,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v2);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_7e(out3,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v3);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze4<core::core_arch::x86::__m256i> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.squeeze4_17\nwith const generics\n- RATE= 136\n*/\nstatic void\nsqueeze4_17_5b(\n  const Eurydice_arr_05 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  store_block_5b(self, out0, out1, out2, out3, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<4usize> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_block_8f\nwith const generics\n- RATE= 136\n*/\nstatic void load_block_8f_5b(Eurydice_arr_05 *self, const Eurydice_arr_cd *input, size_t start)\n{\n  load_block_5b(self, input, start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_97(\n  Eurydice_arr_05 *self,\n  const Eurydice_arr_cd *input,\n  size_t start\n)\n{\n  load_block_8f_5b(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.keccak4\nwith const generics\n- RATE= 136\n- DELIM= 31\n*/\nstatic KRML_MUSTINLINE void\nkeccak4_ad(\n  const Eurydice_arr_cd *data,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  Eurydice_arr_05 s = libcrux_sha3_generic_keccak_new_80_a6();\n  size_t data_len = data->data->meta;\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = data_len / (size_t)136U\n        }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      size_t rem = data_len % (size_t)136U;\n      libcrux_sha3_generic_keccak_absorb_final_80_fb0(&s, data, data_len - rem, rem);\n      size_t outlen = out0.meta;\n      size_t blocks = outlen / (size_t)136U;\n      size_t last = outlen - outlen % (size_t)136U;\n      if (blocks == (size_t)0U)\n      {\n        squeeze4_17_5b(&s, out0, out1, out2, out3, (size_t)0U, outlen);\n      }\n      else\n      {\n        squeeze4_17_5b(&s, out0, out1, out2, out3, (size_t)0U, (size_t)136U);\n        for (size_t i = (size_t)1U; i < blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_a6(&s);\n          squeeze4_17_5b(&s, out0, out1, out2, out3, i0 * (size_t)136U, (size_t)136U);\n        }\n        if (last < outlen)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_a6(&s);\n          squeeze4_17_5b(&s, out0, out1, out2, out3, last, outlen - last);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    libcrux_sha3_generic_keccak_absorb_block_80_97(&s, data, i * (size_t)136U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n Perform 4 SHAKE256 operations in parallel\n*/\nvoid\nlibcrux_sha3_avx2_x4_shake256(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_cd lvalue = { .data = { input0, input1, input2, input3 } };\n  keccak4_ad(&lvalue, out0, out1, out2, out3);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_first_block_81\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_first_block_81_5b(\n  const Eurydice_arr_05 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze4_17_5b(self, out0, out1, out2, out3, (size_t)0U, (size_t)136U);\n}\n\n/**\n Squeeze block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_first_block_81_5b(&s[0U], out0, out1, out2, out3);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.store_block\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nstore_block_3a(\n  const Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  size_t chunks = len / (size_t)32U;\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = chunks }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      size_t rem = len % (size_t)32U;\n      if (rem > (size_t)0U)\n      {\n        size_t start0 = start + (size_t)32U * chunks;\n        Eurydice_arr_60 u8s = { .data = { 0U } };\n        size_t chunks8 = rem / (size_t)8U;\n        for (size_t i0 = (size_t)0U; i0 < chunks8; i0++)\n        {\n          size_t k = i0;\n          size_t i = ((size_t)4U * chunks + k) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + k) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____1 = Eurydice_array_to_slice_mut_6e(&u8s);\n          mm256_storeu_si256_u8(uu____1, libcrux_sha3_traits_get_ij_a6(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = (size_t)8U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)8U, .end = (size_t)16U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)16U, .end = (size_t)24U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)24U, .end = (size_t)32U })),\n            uint8_t);\n        }\n        size_t rem8 = rem % (size_t)8U;\n        if (rem8 > (size_t)0U)\n        {\n          size_t i = ((size_t)4U * chunks + chunks8) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + chunks8) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____2 = Eurydice_array_to_slice_mut_6e(&u8s);\n          mm256_storeu_si256_u8(uu____2, libcrux_sha3_traits_get_ij_a6(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = rem8 })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = (size_t)8U,\n                  .end = (size_t)8U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = (size_t)16U,\n                  .end = (size_t)16U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_36(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_08){\n                  .start = (size_t)24U,\n                  .end = (size_t)24U + rem8\n                }\n              )),\n            uint8_t);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t i0 = (size_t)4U * i / (size_t)5U;\n    size_t j0 = (size_t)4U * i % (size_t)5U;\n    size_t i1 = ((size_t)4U * i + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i + (size_t)3U) % (size_t)5U;\n    __m256i\n    v0l =\n      mm256_permute2x128_si256((int32_t)32,\n        libcrux_sha3_traits_get_ij_a6(s, i0, j0)[0U],\n        libcrux_sha3_traits_get_ij_a6(s, i2, j2)[0U],\n        __m256i);\n    __m256i\n    v1h =\n      mm256_permute2x128_si256((int32_t)32,\n        libcrux_sha3_traits_get_ij_a6(s, i1, j1)[0U],\n        libcrux_sha3_traits_get_ij_a6(s, i3, j3)[0U],\n        __m256i);\n    __m256i\n    v2l =\n      mm256_permute2x128_si256((int32_t)49,\n        libcrux_sha3_traits_get_ij_a6(s, i0, j0)[0U],\n        libcrux_sha3_traits_get_ij_a6(s, i2, j2)[0U],\n        __m256i);\n    __m256i\n    v3h =\n      mm256_permute2x128_si256((int32_t)49,\n        libcrux_sha3_traits_get_ij_a6(s, i1, j1)[0U],\n        libcrux_sha3_traits_get_ij_a6(s, i3, j3)[0U],\n        __m256i);\n    __m256i v0 = mm256_unpacklo_epi64(v0l, v1h);\n    __m256i v1 = mm256_unpackhi_epi64(v0l, v1h);\n    __m256i v2 = mm256_unpacklo_epi64(v2l, v3h);\n    __m256i v3 = mm256_unpackhi_epi64(v2l, v3h);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_7e(out0,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v0);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_7e(out1,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v1);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_7e(out2,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v2);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_7e(out3,\n        (\n          KRML_CLITERAL(core_ops_range_Range_08){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v3);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze4<core::core_arch::x86::__m256i> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.squeeze4_17\nwith const generics\n- RATE= 168\n*/\nstatic void\nsqueeze4_17_3a(\n  const Eurydice_arr_05 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  store_block_3a(self, out0, out1, out2, out3, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_first_five_blocks_81\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_first_five_blocks_81_3a(\n  Eurydice_arr_05 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze4_17_3a(self, out0, out1, out2, out3, (size_t)0U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n  squeeze4_17_3a(self, out0, out1, out2, out3, (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n  squeeze4_17_3a(self, out0, out1, out2, out3, (size_t)2U * (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n  squeeze4_17_3a(self, out0, out1, out2, out3, (size_t)3U * (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n  squeeze4_17_3a(self, out0, out1, out2, out3, (size_t)4U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze five blocks\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_first_five_blocks_81_3a(s, out0, out1, out2, out3);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_next_block_81\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_next_block_81_3a(\n  Eurydice_arr_05 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start\n)\n{\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n  squeeze4_17_3a(self, out0, out1, out2, out3, start, (size_t)168U);\n}\n\n/**\n Squeeze another block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_next_block_81_3a(s, out0, out1, out2, out3, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_next_block_81\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_next_block_81_5b(\n  Eurydice_arr_05 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start\n)\n{\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n  squeeze4_17_5b(self, out0, out1, out2, out3, start, (size_t)136U);\n}\n\n/**\n Squeeze next block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_next_block_81_5b(s, out0, out1, out2, out3, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_first_three_blocks_81\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_first_three_blocks_81_3a(\n  Eurydice_arr_05 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze4_17_3a(self, out0, out1, out2, out3, (size_t)0U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n  squeeze4_17_3a(self, out0, out1, out2, out3, (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_a6(self);\n  squeeze4_17_3a(self, out0, out1, out2, out3, (size_t)2U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze three blocks\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_first_three_blocks_81_3a(s, out0, out1, out2, out3);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_sha3_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_sha3_avx2_H\n#define libcrux_sha3_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"intrinsics/libcrux_intrinsics_avx2.h\"\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types core_core_arch_x86___m256i\nwith const generics\n- $25size_t\n*/\ntypedef struct Eurydice_arr_05_s { __m256i data[25U]; } Eurydice_arr_05;\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.KeccakState\nwith types core_core_arch_x86___m256i\nwith const generics\n- $4size_t\n*/\ntypedef Eurydice_arr_05 libcrux_sha3_generic_keccak_KeccakState_55;\n\ntypedef libcrux_sha3_generic_keccak_KeccakState_55\nlibcrux_sha3_avx2_x4_incremental_KeccakState;\n\n/**\n Initialise the [`KeccakState`].\n*/\nEurydice_arr_05 libcrux_sha3_avx2_x4_incremental_init(void);\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_absorb_final(\n  Eurydice_arr_05 *s,\n  Eurydice_borrow_slice_u8 data0,\n  Eurydice_borrow_slice_u8 data1,\n  Eurydice_borrow_slice_u8 data2,\n  Eurydice_borrow_slice_u8 data3\n);\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_absorb_final(\n  Eurydice_arr_05 *s,\n  Eurydice_borrow_slice_u8 data0,\n  Eurydice_borrow_slice_u8 data1,\n  Eurydice_borrow_slice_u8 data2,\n  Eurydice_borrow_slice_u8 data3\n);\n\n/**\n Perform 4 SHAKE256 operations in parallel\n*/\nvoid\nlibcrux_sha3_avx2_x4_shake256(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze five blocks\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze another block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze next block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze three blocks\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_05 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_sha3_avx2_H_DEFINED\n#endif /* libcrux_sha3_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-dsa/libcrux_sha3_internal.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_sha3_internal_H\n#define libcrux_sha3_internal_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_mldsa_core.h\"\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.KeccakState\nwith types uint64_t\nwith const generics\n- $1size_t\n*/\ntypedef Eurydice_arr_26 libcrux_sha3_generic_keccak_KeccakState_17;\n\ntypedef libcrux_sha3_generic_keccak_KeccakState_17 libcrux_sha3_portable_KeccakState;\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.KeccakXofState\nwith types uint64_t\nwith const generics\n- $1size_t\n- $136size_t\n*/\ntypedef struct libcrux_sha3_generic_keccak_xof_KeccakXofState_e2_s\n{\n  Eurydice_arr_26 inner;\n  Eurydice_arr_3e buf;\n  size_t buf_len;\n  bool sponge;\n}\nlibcrux_sha3_generic_keccak_xof_KeccakXofState_e2;\n\ntypedef libcrux_sha3_generic_keccak_xof_KeccakXofState_e2\nlibcrux_sha3_portable_incremental_Shake256Xof;\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_zero_d2(void)\n{\n  return 0ULL;\n}\n\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__veor5q_u64(\n  uint64_t a,\n  uint64_t b,\n  uint64_t c,\n  uint64_t d,\n  uint64_t e\n)\n{\n  return (((a ^ b) ^ c) ^ d) ^ e;\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor5_d2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e)\n{\n  return libcrux_sha3_simd_portable__veor5q_u64(a, b, c, d, e);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_76(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)1);\n}\n\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vrax1q_u64(uint64_t a, uint64_t b)\n{\n  return a ^ libcrux_sha3_simd_portable_rotate_left_76(b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_rotate_left1_and_xor_d2(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vrax1q_u64(a, b);\n}\n\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vbcaxq_u64(uint64_t a, uint64_t b, uint64_t c)\n{\n  return a ^ (b & ~c);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_and_not_xor_d2(uint64_t a, uint64_t b, uint64_t c)\n{\n  return libcrux_sha3_simd_portable__vbcaxq_u64(a, b, c);\n}\n\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__veorq_n_u64(uint64_t a, uint64_t c)\n{\n  return a ^ c;\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_constant_d2(uint64_t a, uint64_t c)\n{\n  return libcrux_sha3_simd_portable__veorq_n_u64(a, c);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_xor_d2(uint64_t a, uint64_t b)\n{\n  return a ^ b;\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.new_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_26 libcrux_sha3_generic_keccak_new_80_04(void)\n{\n  Eurydice_arr_26 lit;\n  uint64_t repeat_expression[25U];\n  for (size_t i = (size_t)0U; i < (size_t)25U; i++)\n  {\n    repeat_expression[i] = libcrux_sha3_simd_portable_zero_d2();\n  }\n  memcpy(lit.data, repeat_expression, (size_t)25U * sizeof (uint64_t));\n  return lit;\n}\n\n#define LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS ((KRML_CLITERAL(Eurydice_arr_a7){ .data = { 1ULL, 32898ULL, 9223372036854808714ULL, 9223372039002292224ULL, 32907ULL, 2147483649ULL, 9223372039002292353ULL, 9223372036854808585ULL, 138ULL, 136ULL, 2147516425ULL, 2147483658ULL, 2147516555ULL, 9223372036854775947ULL, 9223372036854808713ULL, 9223372036854808579ULL, 9223372036854808578ULL, 9223372036854775936ULL, 32778ULL, 9223372039002259466ULL, 9223372039002292353ULL, 9223372036854808704ULL, 2147483649ULL, 9223372039002292232ULL } }))\n\n/**\nA monomorphic instance of libcrux_sha3.traits.get_ij\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE const\nuint64_t\n*libcrux_sha3_traits_get_ij_04(const Eurydice_arr_26 *arr, size_t i, size_t j)\n{\n  return &arr->data[(size_t)5U * j + i];\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.set_ij\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_traits_set_ij_04(Eurydice_arr_26 *arr, size_t i, size_t j, uint64_t value)\n{\n  arr->data[(size_t)5U * j + i] = value;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_3a(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_26 state_flat = { .data = { 0U } };\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = (size_t)168U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_04(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_04(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_shared_7e(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_ab((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_c6(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_27 buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_361(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_7e(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 31U;\n  size_t uu____0 = (size_t)168U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_3a(state,\n    Eurydice_array_to_slice_shared_7b(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_last_a1_c6(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_c6(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {core::ops::index::Index<(usize, usize), T> for libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.index_c2\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic inline const\nuint64_t\n*libcrux_sha3_generic_keccak_index_c2_04(const Eurydice_arr_26 *self, size_t_x2 index)\n{\n  return libcrux_sha3_traits_get_ij_04(self, index.fst, index.snd);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.theta_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_a5\nlibcrux_sha3_generic_keccak_theta_80_04(Eurydice_arr_26 *self)\n{\n  Eurydice_arr_a5\n  c =\n    {\n      .data = {\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U])\n      }\n    };\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_a5){\n        .data = {\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)0U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)0U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)1U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)1U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)2U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)2U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)3U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)3U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)4U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)4U + (size_t)1U) % (size_t)5U])\n        }\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.set_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic inline void\nlibcrux_sha3_generic_keccak_set_80_04(Eurydice_arr_26 *self, size_t i, size_t j, uint64_t v)\n{\n  libcrux_sha3_traits_set_ij_04(self, i, j, v);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_02(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)36);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_02(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_02(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_02(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_02(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ac(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)3);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_ac(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_ac(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_ac(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_ac(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_020(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)41);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_020(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_020(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_020(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_020(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_a9(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)18);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_a9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_a9(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_a9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_a9(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_0_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_0_80_04(Eurydice_arr_26 *self, Eurydice_arr_a5 t)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)0U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_d2(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)1U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_02(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)2U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_ac(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)3U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_020(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)4U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_a9(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_76(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_76(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_76(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_76(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_58(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)44);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_58(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_58(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_58(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_58(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_e0(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)10);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_e0(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_e0(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_e0(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_e0(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_63(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)45);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_63(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_63(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_63(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_63(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_6a(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)2);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_6a(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_6a(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_6a(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_6a(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_1_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_1_80_04(Eurydice_arr_26 *self, Eurydice_arr_a5 t)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)0U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_76(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)1U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_58(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)2U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_e0(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)3U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_63(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)4U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_6a(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ab(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)62);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_ab(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_ab(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_ab(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_ab(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_5b(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)6);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_5b(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_5b(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_5b(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_5b(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_6f(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)43);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_6f(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_6f(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_6f(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_6f(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_62(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)15);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_62(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_62(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_62(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_62(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_23(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)61);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_23(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_23(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_23(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_23(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_2_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_2_80_04(Eurydice_arr_26 *self, Eurydice_arr_a5 t)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)0U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_ab(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)1U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_5b(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)2U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_6f(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)3U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_62(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)4U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_23(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_37(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)28);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_37(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_37(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_37(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_37(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_bb(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)55);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_bb(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_bb(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_bb(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_bb(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_b9(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)25);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_b9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_b9(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_b9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_b9(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_54(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)21);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_54(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_54(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_54(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_54(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_4c(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)56);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_4c(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_4c(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_4c(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_4c(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_3_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_3_80_04(Eurydice_arr_26 *self, Eurydice_arr_a5 t)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)0U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_37(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)1U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_bb(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)2U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_b9(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)3U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_54(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)4U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_4c(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ce(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)27);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_ce(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_ce(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_ce(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_ce(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_77(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)20);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_77(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_77(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_77(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_77(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_25(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)39);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_25(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_25(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_25(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_25(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_af(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)8);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_af(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_af(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_af(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_af(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_fd(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)(int32_t)14);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vxarq_u64_fd(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_fd(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_fd(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_fd(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_4_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_4_80_04(Eurydice_arr_26 *self, Eurydice_arr_a5 t)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)0U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_ce(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)1U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_77(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)2U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_25(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)3U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_af(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)4U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_fd(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_80_04(Eurydice_arr_26 *self, Eurydice_arr_a5 t)\n{\n  libcrux_sha3_generic_keccak_rho_0_80_04(self, t);\n  libcrux_sha3_generic_keccak_rho_1_80_04(self, t);\n  libcrux_sha3_generic_keccak_rho_2_80_04(self, t);\n  libcrux_sha3_generic_keccak_rho_3_80_04(self, t);\n  libcrux_sha3_generic_keccak_rho_4_80_04(self, t);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_0_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_0_80_04(Eurydice_arr_26 *self, Eurydice_arr_26 old)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)1U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)2U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)3U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)4U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_1_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_1_80_04(Eurydice_arr_26 *self, Eurydice_arr_26 old)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)0U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)1U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)2U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)3U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)4U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_2_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_2_80_04(Eurydice_arr_26 *self, Eurydice_arr_26 old)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)0U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)1U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)2U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)3U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)4U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_3_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_3_80_04(Eurydice_arr_26 *self, Eurydice_arr_26 old)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)0U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)1U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)2U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)3U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)4U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_4_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_4_80_04(Eurydice_arr_26 *self, Eurydice_arr_26 old)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)0U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)1U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)2U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)3U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)4U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_04(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void libcrux_sha3_generic_keccak_pi_80_04(Eurydice_arr_26 *self)\n{\n  Eurydice_arr_26 old = self[0U];\n  libcrux_sha3_generic_keccak_pi_0_80_04(self, old);\n  libcrux_sha3_generic_keccak_pi_1_80_04(self, old);\n  libcrux_sha3_generic_keccak_pi_2_80_04(self, old);\n  libcrux_sha3_generic_keccak_pi_3_80_04(self, old);\n  libcrux_sha3_generic_keccak_pi_4_80_04(self, old);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.chi_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void libcrux_sha3_generic_keccak_chi_80_04(Eurydice_arr_26 *self)\n{\n  Eurydice_arr_26 old = self[0U];\n  KRML_MAYBE_FOR5(i0,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR5(i,\n      (size_t)0U,\n      (size_t)5U,\n      (size_t)1U,\n      size_t j = i;\n      libcrux_sha3_generic_keccak_set_80_04(self,\n        i1,\n        j,\n        libcrux_sha3_simd_portable_and_not_xor_d2(libcrux_sha3_generic_keccak_index_c2_04(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = j }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)2U) % (size_t)5U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_04(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)1U) % (size_t)5U }))[0U]));););\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.iota_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_iota_80_04(Eurydice_arr_26 *self, size_t i)\n{\n  libcrux_sha3_generic_keccak_set_80_04(self,\n    (size_t)0U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_constant_d2(libcrux_sha3_generic_keccak_index_c2_04(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS.data[i]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_keccakf1600_80_04(Eurydice_arr_26 *self)\n{\n  for (size_t i = (size_t)0U; i < (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_a5 t = libcrux_sha3_generic_keccak_theta_80_04(self);\n    libcrux_sha3_generic_keccak_rho_80_04(self, t);\n    libcrux_sha3_generic_keccak_pi_80_04(self);\n    libcrux_sha3_generic_keccak_chi_80_04(self);\n    libcrux_sha3_generic_keccak_iota_80_04(self, i0);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 168\n- DELIM= 31\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_9e(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_c6(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_5b(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_26 state_flat = { .data = { 0U } };\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = (size_t)136U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_04(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_04(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_shared_7e(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_ab((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_ad(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_3d buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_362(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_7e(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 31U;\n  size_t uu____0 = (size_t)136U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_5b(state,\n    Eurydice_array_to_slice_shared_d4(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_last_a1_ad(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_ad(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n- DELIM= 31\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_9e0(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_ad(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_5b(\n  const Eurydice_arr_26 *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_04(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_shared_41(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_04(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_7e(out,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0,\n      Eurydice_array_to_subslice_to_shared_6e(&bytes, remaining),\n      uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 136\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_squeeze_9b_5b(\n  const Eurydice_arr_26 *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_5b(self, out, start, len);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_3a(\n  const Eurydice_arr_26 *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_04(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_shared_41(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_04(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_7e(out,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0,\n      Eurydice_array_to_subslice_to_shared_6e(&bytes, remaining),\n      uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 168\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_squeeze_9b_3a(\n  const Eurydice_arr_26 *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_3a(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 136\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_block_a1_5b(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_5b(self, input->data[0U], start);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 104\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_7a(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_26 state_flat = { .data = { 0U } };\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = (size_t)104U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_04(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_04(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_shared_7e(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_ab((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 104\n- DELIMITER= 6\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_7c(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_181 buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_366(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_7e(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)104U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_7a(state,\n    Eurydice_array_to_slice_shared_9c(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 104\n- DELIMITER= 6\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_last_a1_7c(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_7c(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 104\n- DELIM= 6\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_9e4(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_7c(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 104\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_7a(\n  const Eurydice_arr_26 *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_04(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_shared_41(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_04(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_7e(out,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0,\n      Eurydice_array_to_subslice_to_shared_6e(&bytes, remaining),\n      uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 104\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_squeeze_9b_7a(\n  const Eurydice_arr_26 *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_7a(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 104\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_block_a1_7a(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_7a(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 104\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_c63(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_7a(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 104\n- DELIM= 6\n*/\nstatic inline void\nlibcrux_sha3_generic_keccak_portable_keccak1_7c(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_26 s = libcrux_sha3_generic_keccak_new_80_04();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)104U;\n  size_t input_rem = input_len % (size_t)104U;\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_06 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_9e4(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)104U;\n      size_t output_rem = output_len % (size_t)104U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_7a(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_7a(&s, output, (size_t)0U, (size_t)104U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_7a(&s, output, i0 * (size_t)104U, (size_t)104U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_7a(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_06 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_c63(&s, &lvalue, i * (size_t)104U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 6\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_ad0(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_3d buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_362(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_7e(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)136U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_5b(state,\n    Eurydice_array_to_slice_shared_d4(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 136\n- DELIMITER= 6\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_last_a1_ad0(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_ad0(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n- DELIM= 6\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_9e3(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_ad0(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_c61(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_5b(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 136\n- DELIM= 6\n*/\nstatic inline void\nlibcrux_sha3_generic_keccak_portable_keccak1_ad0(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_26 s = libcrux_sha3_generic_keccak_new_80_04();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)136U;\n  size_t input_rem = input_len % (size_t)136U;\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_06 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_9e3(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)136U;\n      size_t output_rem = output_len % (size_t)136U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_5b(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_5b(&s, output, (size_t)0U, (size_t)136U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_5b(&s, output, i0 * (size_t)136U, (size_t)136U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_5b(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_06 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_c61(&s, &lvalue, i * (size_t)136U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 144\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_2c(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_26 state_flat = { .data = { 0U } };\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){\n          .start = (size_t)0U,\n          .end = (size_t)144U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_04(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_04(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_shared_7e(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_ab((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 144\n- DELIMITER= 6\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_1e(\n  Eurydice_arr_26 *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_a8 buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_365(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_7e(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_08){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)144U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_2c(state,\n    Eurydice_array_to_slice_shared_d1(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 144\n- DELIMITER= 6\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_last_a1_1e(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_1e(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 144\n- DELIM= 6\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_9e2(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_1e(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 144\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_2c(\n  const Eurydice_arr_26 *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_04(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_7e(out,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_shared_41(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_04(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_7e(out,\n        (KRML_CLITERAL(core_ops_range_Range_08){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0,\n      Eurydice_array_to_subslice_to_shared_6e(&bytes, remaining),\n      uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 144\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_squeeze_9b_2c(\n  const Eurydice_arr_26 *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_2c(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 144\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_block_a1_2c(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_2c(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 144\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_c62(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_2c(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 144\n- DELIM= 6\n*/\nstatic inline void\nlibcrux_sha3_generic_keccak_portable_keccak1_1e(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_26 s = libcrux_sha3_generic_keccak_new_80_04();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)144U;\n  size_t input_rem = input_len % (size_t)144U;\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_06 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_9e2(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)144U;\n      size_t output_rem = output_len % (size_t)144U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_2c(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_2c(&s, output, (size_t)0U, (size_t)144U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_2c(&s, output, i0 * (size_t)144U, (size_t)144U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_2c(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_06 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_c62(&s, &lvalue, i * (size_t)144U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 136\n- DELIM= 31\n*/\nstatic inline void\nlibcrux_sha3_generic_keccak_portable_keccak1_ad(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_26 s = libcrux_sha3_generic_keccak_new_80_04();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)136U;\n  size_t input_rem = input_len % (size_t)136U;\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_06 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_9e0(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)136U;\n      size_t output_rem = output_len % (size_t)136U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_5b(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_5b(&s, output, (size_t)0U, (size_t)136U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_5b(&s, output, i0 * (size_t)136U, (size_t)136U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_5b(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_06 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_c61(&s, &lvalue, i * (size_t)136U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 168\n*/\nstatic inline void\nlibcrux_sha3_simd_portable_load_block_a1_3a(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_3a(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_c60(\n  Eurydice_arr_26 *self,\n  const Eurydice_arr_06 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_3a(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_04(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 168\n- DELIM= 31\n*/\nstatic inline void\nlibcrux_sha3_generic_keccak_portable_keccak1_c6(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_26 s = libcrux_sha3_generic_keccak_new_80_04();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)168U;\n  size_t input_rem = input_len % (size_t)168U;\n  core_ops_range_Range_08\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_08){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_08,\n      size_t,\n      core_ops_range_Range_08);\n  while (true)\n  {\n    core_option_Option_08\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_08);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_06 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_9e(&s, &lvalue, input_len - input_rem, input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)168U;\n      size_t output_rem = output_len % (size_t)168U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_3a(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_3a(&s, output, (size_t)0U, (size_t)168U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_3a(&s, output, i0 * (size_t)168U, (size_t)168U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_04(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_3a(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_06 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_c60(&s, &lvalue, i * (size_t)168U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_sha3_internal_H_DEFINED\n#endif /* libcrux_sha3_internal_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/internal/libcrux_core.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_core_H\n#define internal_libcrux_core_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"../libcrux_core.h\"\n\n#define core_option_None 0\n#define core_option_Some 1\n\ntypedef uint8_t core_option_Option_87_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types size_t\n\n*/\ntypedef struct core_option_Option_87_s\n{\n  core_option_Option_87_tags tag;\n  size_t f0;\n}\ncore_option_Option_87;\n\nstatic inline uint64_t core_num__u64__from_le_bytes(Eurydice_array_u8x8 x0);\n\nstatic inline uint64_t core_num__u64__rotate_left(uint64_t x0, uint32_t x1);\n\nstatic inline Eurydice_array_u8x8 core_num__u64__to_le_bytes(uint64_t x0);\n\nstatic inline uint32_t core_num__u8__count_ones(uint8_t x0);\n\n/**\nA monomorphic instance of core.ops.range.Range\nwith types size_t\n\n*/\ntypedef struct core_ops_range_Range_87_s\n{\n  size_t start;\n  size_t end;\n}\ncore_ops_range_Range_87;\n\nuint8_t\nlibcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(\n  Eurydice_borrow_slice_u8 lhs,\n  Eurydice_borrow_slice_u8 rhs\n);\n\nEurydice_arr_ec\nlibcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(\n  Eurydice_borrow_slice_u8 lhs,\n  Eurydice_borrow_slice_u8 rhs,\n  uint8_t selector\n);\n\nEurydice_arr_ec\nlibcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(\n  Eurydice_borrow_slice_u8 lhs_c,\n  Eurydice_borrow_slice_u8 rhs_c,\n  Eurydice_borrow_slice_u8 lhs_s,\n  Eurydice_borrow_slice_u8 rhs_s\n);\n\n#define LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT (LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE ((size_t)32U)\n\n/**\n K * BITS_PER_RING_ELEMENT / 8\n\n [eurydice] Note that we can't use const generics here because that breaks\n            C extraction with eurydice.\n*/\nsize_t libcrux_ml_kem_constants_ranked_bytes_per_ring_element(size_t rank);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types int16_t\n\n*/\nint16_t libcrux_secrets_int_public_integers_declassify_d8_39(int16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nuint8_t libcrux_secrets_int_as_u8_f5(int16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types int16_t\n\n*/\nint16_t libcrux_secrets_int_public_integers_classify_27_39(int16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u8}\n*/\nint16_t libcrux_secrets_int_as_i16_59(uint8_t self);\n\nint16_t libcrux_secrets_int_I16(int16_t v);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nint32_t libcrux_secrets_int_as_i32_f5(int16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i32}\n*/\nint16_t libcrux_secrets_int_as_i16_36(int32_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u32}\n*/\nint32_t libcrux_secrets_int_as_i32_b8(uint32_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nuint16_t libcrux_secrets_int_as_u16_f5(int16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u16}\n*/\nint16_t libcrux_secrets_int_as_i16_ca(uint16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u16}\n*/\nuint64_t libcrux_secrets_int_as_u64_ca(uint16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types uint32_t\n\n*/\nuint32_t libcrux_secrets_int_public_integers_classify_27_df(uint32_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u64}\n*/\nuint32_t libcrux_secrets_int_as_u32_a3(uint64_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u32}\n*/\nint16_t libcrux_secrets_int_as_i16_b8(uint32_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nint16_t libcrux_secrets_int_as_i16_f5(int16_t self);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 3168\n*/\nEurydice_arr_a8 libcrux_ml_kem_types_default_d3_0e(void);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_to_shared_212(const Eurydice_arr_d1 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 3168\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d49(const Eurydice_arr_a8 *a, core_ops_range_Range_87 r);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 libcrux_ml_kem_types_from_51_d9(Eurydice_arr_d1 value);\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_types_from_17_70(Eurydice_arr_a8 sk, Eurydice_arr_d1 pk);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 3168\n*/\nEurydice_arr_a8 libcrux_ml_kem_types_from_b2_0e(Eurydice_arr_a8 value);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1536size_t\n*/\ntypedef struct Eurydice_arr_df_s { uint8_t data[1536U]; } Eurydice_arr_df;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1536\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_2f(const Eurydice_arr_df *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 3168\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d420(Eurydice_arr_a8 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1536\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_2f(Eurydice_arr_df *a);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 libcrux_ml_kem_types_from_19_d9(Eurydice_arr_d1 value);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 1568\n*/\nconst Eurydice_arr_d1 *libcrux_ml_kem_types_as_slice_e6_d9(const Eurydice_arr_d1 *self);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 1568\n*/\nconst Eurydice_arr_d1 *libcrux_ml_kem_types_as_slice_a9_d9(const Eurydice_arr_d1 *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f6(Eurydice_arr_d1 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d419(Eurydice_arr_d1 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $352size_t\n*/\ntypedef struct Eurydice_arr_e7_s { uint8_t data[352U]; } Eurydice_arr_e7;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 352\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d418(Eurydice_arr_e7 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 352\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_25(const Eurydice_arr_e7 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $128size_t\n*/\ntypedef struct Eurydice_arr_89_s { uint8_t data[128U]; } Eurydice_arr_89;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_89\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_3b0_s { Eurydice_arr_89 data[4U]; } Eurydice_arr_3b0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $33size_t\n*/\ntypedef struct Eurydice_arr_fa_s { uint8_t data[33U]; } Eurydice_arr_fa;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_fa\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_890_s { Eurydice_arr_fa data[4U]; } Eurydice_arr_890;\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 4\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_23(Eurydice_arr_890 *prf_inputs, uint8_t domain_separator);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int16_t\nwith const generics\n- $272size_t\n*/\ntypedef struct Eurydice_arr_5b_s { int16_t data[272U]; } Eurydice_arr_5b;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_5b\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_24_s { Eurydice_arr_5b data[4U]; } Eurydice_arr_24;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_cc_s { size_t data[4U]; } Eurydice_arr_cc;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $504size_t\n*/\ntypedef struct Eurydice_arr_79_s { uint8_t data[504U]; } Eurydice_arr_79;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_79\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_7c0_s { Eurydice_arr_79 data[4U]; } Eurydice_arr_7c0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $34size_t\n*/\ntypedef struct Eurydice_arr_31_s { uint8_t data[34U]; } Eurydice_arr_31;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_31\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_56_s { Eurydice_arr_31 data[4U]; } Eurydice_arr_56;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1600size_t\n*/\ntypedef struct Eurydice_arr_14_s { uint8_t data[1600U]; } Eurydice_arr_14;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1600\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_720(const Eurydice_arr_14 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_b50(const Eurydice_arr_d1 *a);\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 1568\n*/\nEurydice_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_d9(const Eurydice_arr_d1 *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1600\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f5(Eurydice_arr_14 *a, size_t r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 1600\n*/\nEurydice_arr_14 libcrux_ml_kem_utils_into_padded_array_49(Eurydice_borrow_slice_u8 slice);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f4(const Eurydice_arr_d1 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d48(const Eurydice_arr_d1 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 3168\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_68(const Eurydice_arr_a8 *a);\n\ntypedef struct Eurydice_borrow_slice_u8_x4_s\n{\n  Eurydice_borrow_slice_u8 fst;\n  Eurydice_borrow_slice_u8 snd;\n  Eurydice_borrow_slice_u8 thd;\n  Eurydice_borrow_slice_u8 f3;\n}\nEurydice_borrow_slice_u8_x4;\n\ntypedef struct Eurydice_borrow_slice_u8_x2_s\n{\n  Eurydice_borrow_slice_u8 fst;\n  Eurydice_borrow_slice_u8 snd;\n}\nEurydice_borrow_slice_u8_x2;\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_e3(Eurydice_borrow_slice_u8 private_key);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 2400\n*/\nEurydice_arr_7d libcrux_ml_kem_types_default_d3_79(void);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f3(const Eurydice_arr_5f *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_to_shared_211(const Eurydice_arr_5f *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 2400\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d47(const Eurydice_arr_7d *a, core_ops_range_Range_87 r);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 1184\n*/\nEurydice_arr_5f libcrux_ml_kem_types_from_51_3d(Eurydice_arr_5f value);\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_types_from_17_bc(Eurydice_arr_7d sk, Eurydice_arr_5f pk);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 2400\n*/\nEurydice_arr_7d libcrux_ml_kem_types_from_b2_79(Eurydice_arr_7d value);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1152size_t\n*/\ntypedef struct Eurydice_arr_0e_s { uint8_t data[1152U]; } Eurydice_arr_0e;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1152\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_f4(const Eurydice_arr_0e *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 2400\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d416(Eurydice_arr_7d *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1152\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_f4(Eurydice_arr_0e *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f4(Eurydice_arr_5f *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d415(Eurydice_arr_5f *a, core_ops_range_Range_87 r);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 1088\n*/\nEurydice_arr_2b libcrux_ml_kem_types_from_19_52(Eurydice_arr_2b value);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 1184\n*/\nconst Eurydice_arr_5f *libcrux_ml_kem_types_as_slice_e6_3d(const Eurydice_arr_5f *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_ff(const Eurydice_arr_5f *a);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 1088\n*/\nconst Eurydice_arr_2b *libcrux_ml_kem_types_as_slice_a9_52(const Eurydice_arr_2b *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f3(Eurydice_arr_2b *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d414(Eurydice_arr_2b *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_89\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_58_s { Eurydice_arr_89 data[3U]; } Eurydice_arr_58;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_fa\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_801_s { Eurydice_arr_fa data[3U]; } Eurydice_arr_801;\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 3\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_78(Eurydice_arr_801 *prf_inputs, uint8_t domain_separator);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c5\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_2c_s { Eurydice_arr_c5 data[3U]; } Eurydice_arr_2c;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_5b\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_b1_s { Eurydice_arr_5b data[3U]; } Eurydice_arr_b1;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_eb0_s { size_t data[3U]; } Eurydice_arr_eb0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_79\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_7e_s { Eurydice_arr_79 data[3U]; } Eurydice_arr_7e;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_31\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_81_s { Eurydice_arr_31 data[3U]; } Eurydice_arr_81;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1120size_t\n*/\ntypedef struct Eurydice_arr_af_s { uint8_t data[1120U]; } Eurydice_arr_af;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1120\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_81(const Eurydice_arr_af *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_06(const Eurydice_arr_2b *a);\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 1088\n*/\nEurydice_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_52(const Eurydice_arr_2b *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1120\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f2(Eurydice_arr_af *a, size_t r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 1120\n*/\nEurydice_arr_af libcrux_ml_kem_utils_into_padded_array_66(Eurydice_borrow_slice_u8 slice);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f2(const Eurydice_arr_2b *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d46(const Eurydice_arr_2b *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2400\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_51(const Eurydice_arr_7d *a);\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_64(Eurydice_borrow_slice_u8 private_key);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d44(Eurydice_arr_ec *a, core_ops_range_Range_87 r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 32\n*/\nEurydice_arr_ec libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_borrow_slice_u8 slice);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 1632\n*/\nEurydice_arr_ab0 libcrux_ml_kem_types_default_d3_be(void);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f1(const Eurydice_arr_03 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_to_shared_210(const Eurydice_arr_03 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1632\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d45(const Eurydice_arr_ab0 *a, core_ops_range_Range_87 r);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 800\n*/\nEurydice_arr_03 libcrux_ml_kem_types_from_51_df(Eurydice_arr_03 value);\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_types_from_17_d6(Eurydice_arr_ab0 sk, Eurydice_arr_03 pk);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 1632\n*/\nEurydice_arr_ab0 libcrux_ml_kem_types_from_b2_be(Eurydice_arr_ab0 value);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1632\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d412(Eurydice_arr_ab0 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_27(Eurydice_arr_d2 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 24\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_ed(const Eurydice_arr_94 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $384size_t\n*/\ntypedef struct Eurydice_arr_b20_s { uint8_t data[384U]; } Eurydice_arr_b20;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 384\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d411(Eurydice_arr_b20 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 384\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_a9(const Eurydice_arr_b20 *a);\n\n#define core_result_Ok 0\n#define core_result_Err 1\n\ntypedef uint8_t core_result_Result_07_tags;\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_arr_ec, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_07_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_arr_ec case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_07;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$32size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_ec core_result_unwrap_26_39(core_result_Result_07 self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f0(const Eurydice_arr_c7 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d44(const Eurydice_arr_c7 *a, core_ops_range_Range_87 r);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 768\n*/\nEurydice_arr_d2 libcrux_ml_kem_types_from_19_80(Eurydice_arr_d2 value);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 800\n*/\nconst Eurydice_arr_03 *libcrux_ml_kem_types_as_slice_e6_df(const Eurydice_arr_03 *self);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 768\n*/\nconst Eurydice_arr_d2 *libcrux_ml_kem_types_as_slice_a9_80(const Eurydice_arr_d2 *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f1(Eurydice_arr_d2 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 10\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_30(const Eurydice_arr_6d *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d410(Eurydice_arr_d2 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 22\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_98(const Eurydice_arr_80 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 20\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_8f(const Eurydice_arr_fc *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $320size_t\n*/\ntypedef struct Eurydice_arr_b0_s { uint8_t data[320U]; } Eurydice_arr_b0;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 320\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d49(Eurydice_arr_b0 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 320\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_56(const Eurydice_arr_b0 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 128\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_78(const Eurydice_arr_89 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_89\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_f3_s { Eurydice_arr_89 data[2U]; } Eurydice_arr_f3;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 128\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_78(Eurydice_arr_89 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $192size_t\n*/\ntypedef struct Eurydice_arr_1c_s { uint8_t data[192U]; } Eurydice_arr_1c;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 192\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_d9(const Eurydice_arr_1c *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int16_t\nwith const generics\n- $256size_t\n*/\ntypedef struct Eurydice_arr_04_s { int16_t data[256U]; } Eurydice_arr_04;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types int16_t\nwith const generics\n- N= 256\n*/\nEurydice_borrow_slice_i16 Eurydice_array_to_slice_shared_990(const Eurydice_arr_04 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_1c\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_eb_s { Eurydice_arr_1c data[2U]; } Eurydice_arr_eb;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 192\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_d9(Eurydice_arr_1c *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 33\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_b5(const Eurydice_arr_fa *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_fa\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_4d_s { Eurydice_arr_fa data[2U]; } Eurydice_arr_4d;\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 2\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_af(Eurydice_arr_4d *prf_inputs, uint8_t domain_separator);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 33\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d48(Eurydice_arr_fa *a, core_ops_range_Range_87 r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 33\n*/\nEurydice_arr_fa libcrux_ml_kem_utils_into_padded_array_29(Eurydice_borrow_slice_u8 slice);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 34\n*/\nEurydice_arr_31 libcrux_ml_kem_utils_into_padded_array_de(Eurydice_borrow_slice_u8 slice);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\nwith const generics\n- N= 272\n*/\nEurydice_borrow_slice_i16\nEurydice_array_to_subslice_shared_e70(const Eurydice_arr_5b *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d43(const Eurydice_arr_c5 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c5\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_5b0_s { Eurydice_arr_c5 data[2U]; } Eurydice_arr_5b0;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_2c(Eurydice_arr_c5 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_5b\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_800_s { Eurydice_arr_5b data[2U]; } Eurydice_arr_800;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_85_s { size_t data[2U]; } Eurydice_arr_85;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\nwith const generics\n- N= 272\n*/\nEurydice_mut_borrow_slice_i16\nEurydice_array_to_subslice_mut_e7(Eurydice_arr_5b *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 504\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d42(const Eurydice_arr_79 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_79\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_b8_s { Eurydice_arr_79 data[2U]; } Eurydice_arr_b8;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 504\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_48(Eurydice_arr_79 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_31\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_bf_s { Eurydice_arr_31 data[2U]; } Eurydice_arr_bf;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 34\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_e9(const Eurydice_arr_31 *a);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_borrow_slice_u8\nEurydice_slice_subslice_from_shared_6d(Eurydice_borrow_slice_u8 s, size_t r);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_borrow_slice_u8\nEurydice_slice_subslice_to_shared_72(Eurydice_borrow_slice_u8 s, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_3b(const Eurydice_arr_03 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_27(const Eurydice_arr_d2 *a);\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 768\n*/\nEurydice_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_80(const Eurydice_arr_d2 *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f0(Eurydice_arr_03 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d46(Eurydice_arr_03 *a, core_ops_range_Range_87 r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 800\n*/\nEurydice_arr_03 libcrux_ml_kem_utils_into_padded_array_df(Eurydice_borrow_slice_u8 slice);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_17(const Eurydice_arr_c7 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f(Eurydice_arr_c7 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_01(const Eurydice_arr_ec *a);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 64\n*/\nEurydice_arr_c7 libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_borrow_slice_u8 slice);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_82(const Eurydice_array_u8x2 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f(const Eurydice_arr_d2 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d41(const Eurydice_arr_d2 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1632\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_99(const Eurydice_arr_ab0 *a);\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_e0(Eurydice_borrow_slice_u8 private_key);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\n\n*/\nEurydice_mut_borrow_slice_i16\nEurydice_slice_subslice_mut_a6(Eurydice_mut_borrow_slice_i16 s, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_29(const Eurydice_arr_b2 *a);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_arr_94, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_57_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_arr_94 case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_57;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$24size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_94 core_result_unwrap_26_78(core_result_Result_57 self);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types int16_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_i16 Eurydice_array_to_slice_shared_8a(const Eurydice_arr_d6 *a);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_arr_fc, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_83_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_arr_fc case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_83;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$20size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_fc core_result_unwrap_26_7d(core_result_Result_83 self);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_arr_6d, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_80_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_arr_6d case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_80;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$10size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_6d core_result_unwrap_26_63(core_result_Result_80 self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d40(const Eurydice_arr_b2 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_29(Eurydice_arr_b2 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types int16_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_i16 Eurydice_array_to_slice_mut_8a(Eurydice_arr_d6 *a);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$24size_t]]\n\n*/\nEurydice_arr_94 libcrux_secrets_int_public_integers_declassify_d8_40(Eurydice_arr_94 self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$20size_t]]\n\n*/\nEurydice_arr_fc libcrux_secrets_int_public_integers_declassify_d8_2b(Eurydice_arr_fc self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$10size_t]]\n\n*/\nEurydice_arr_6d libcrux_secrets_int_public_integers_declassify_d8_37(Eurydice_arr_6d self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$8size_t]]\n\n*/\nEurydice_array_u8x8\nlibcrux_secrets_int_public_integers_declassify_d8_52(Eurydice_array_u8x8 self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$2size_t]]\n\n*/\nEurydice_array_u8x2\nlibcrux_secrets_int_public_integers_declassify_d8_75(Eurydice_array_u8x2 self);\n\n/**\n Classify a mutable slice (identity)\n We define a separate function for this because hax has limited support for &mut-returning functions\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_mut_slice\nwith types Eurydice_dst_ref_mut uint8_t size_t\n\n*/\nEurydice_mut_borrow_slice_u8\nlibcrux_secrets_int_public_integers_classify_mut_slice_75(Eurydice_mut_borrow_slice_u8 x);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types Eurydice_arr int16_t[[$16size_t]]\n\n*/\nEurydice_arr_d6 libcrux_secrets_int_public_integers_classify_27_4b(Eurydice_arr_d6 self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr int16_t[[$16size_t]]\n\n*/\nEurydice_arr_d6 libcrux_secrets_int_public_integers_declassify_d8_4b(Eurydice_arr_d6 self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::ClassifyRef<&'a ([T])> for &'a ([T])}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_6d\nwith types uint8_t\n\n*/\nEurydice_borrow_slice_u8\nlibcrux_secrets_int_classify_public_classify_ref_6d_90(Eurydice_borrow_slice_u8 self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$22size_t]]\n\n*/\nEurydice_arr_80 libcrux_secrets_int_public_integers_declassify_d8_0b(Eurydice_arr_80 self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_i16\nEurydice_array_to_subslice_shared_e7(const Eurydice_arr_d6 *a, core_ops_range_Range_87 r);\n\n/**\nThis function found in impl {libcrux_secrets::traits::ClassifyRef<&'a ([T])> for &'a ([T])}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_6d\nwith types int16_t\n\n*/\nEurydice_borrow_slice_i16\nlibcrux_secrets_int_classify_public_classify_ref_6d_39(Eurydice_borrow_slice_i16 self);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_shared\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\n\n*/\nEurydice_borrow_slice_i16\nEurydice_slice_subslice_shared_a6(Eurydice_borrow_slice_i16 s, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_arr_d6, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_ec_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_arr_d6 case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_ec;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr int16_t[[$16size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_d6 core_result_unwrap_26_d3(core_result_Result_ec self);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int16_t\nwith const generics\n- $128size_t\n*/\ntypedef struct Eurydice_arr_34_s { int16_t data[128U]; } Eurydice_arr_34;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c5\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_9c_s { Eurydice_arr_c5 data[4U]; } Eurydice_arr_9c;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d4(const Eurydice_arr_ec *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_ff\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_dc0_s { Eurydice_arr_ff data[4U]; } Eurydice_arr_dc0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_borrow_slice_u8\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_68_s { Eurydice_borrow_slice_u8 data[4U]; } Eurydice_arr_68;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_17(Eurydice_arr_c7 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 48\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_9f(Eurydice_arr_65 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_01(Eurydice_arr_ec *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 28\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_5e(Eurydice_arr_a2 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $104size_t\n*/\ntypedef struct Eurydice_arr_c4_s { uint8_t data[104U]; } Eurydice_arr_c4;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_72(const Eurydice_arr_c4 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d43(Eurydice_arr_c4 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $144size_t\n*/\ntypedef struct Eurydice_arr_f4_s { uint8_t data[144U]; } Eurydice_arr_f4;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_38(const Eurydice_arr_f4 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d42(Eurydice_arr_f4 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_2c(const Eurydice_arr_c5 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d41(Eurydice_arr_c5 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_58(const Eurydice_arr_ff *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d40(Eurydice_arr_ff *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_to_shared_21(const Eurydice_array_u8x8 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_6e(const Eurydice_array_u8x8 *a);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_slice_subslice_mut_c8(Eurydice_mut_borrow_slice_u8 s, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $72size_t\n*/\ntypedef struct Eurydice_arr_ab_s { uint8_t data[72U]; } Eurydice_arr_ab;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_e2(const Eurydice_arr_ab *a);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_array_u8x8, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_8e_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_array_u8x8 case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_8e;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$8size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_array_u8x8 core_result_unwrap_26_e0(core_result_Result_8e self);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_borrow_slice_u8\nEurydice_slice_subslice_shared_c8(Eurydice_borrow_slice_u8 s, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d4(Eurydice_arr_ab *a, core_ops_range_Range_87 r);\n\ntypedef struct libcrux_ml_kem_utils_extraction_helper_Keypair768_s\n{\n  Eurydice_arr_0e fst;\n  Eurydice_arr_5f snd;\n}\nlibcrux_ml_kem_utils_extraction_helper_Keypair768;\n\ntypedef struct libcrux_ml_kem_utils_extraction_helper_Keypair512_s\n{\n  Eurydice_arr_d2 fst;\n  Eurydice_arr_03 snd;\n}\nlibcrux_ml_kem_utils_extraction_helper_Keypair512;\n\ntypedef struct libcrux_ml_kem_utils_extraction_helper_Keypair1024_s\n{\n  Eurydice_arr_df fst;\n  Eurydice_arr_d1 snd;\n}\nlibcrux_ml_kem_utils_extraction_helper_Keypair1024;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_core_H_DEFINED\n#endif /* internal_libcrux_core_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/internal/libcrux_mlkem1024_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem1024_avx2_H\n#define internal_libcrux_mlkem1024_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_avx2.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem1024_avx2.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 1024 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem1024KeyPairUnpacked`]\n and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *private_key,\n  const Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 1024 (unpacked)\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem1024PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n TODO: The F* prefix opens required modules, it should go away when the following issue is resolved:\n <https://github.com/hacspec/hax/issues/770>\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_a8 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_unpacked_public_key(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem1024_avx2_H_DEFINED\n#endif /* internal_libcrux_mlkem1024_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/internal/libcrux_mlkem1024_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem1024_portable_H\n#define internal_libcrux_mlkem1024_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_portable.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem1024_portable.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 1024 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem1024KeyPairUnpacked`]\n and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_portable_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *private_key,\n  const Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 1024 (unpacked)\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem1024PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n TODO: The F* prefix opens required modules, it should go away when the following issue is resolved:\n <https://github.com/hacspec/hax/issues/770>\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_portable_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_portable_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94\nlibcrux_ml_kem_mlkem1024_portable_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_a8 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_unpacked_public_key(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem1024_portable_H_DEFINED\n#endif /* internal_libcrux_mlkem1024_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/internal/libcrux_mlkem512_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem512_avx2_H\n#define internal_libcrux_mlkem512_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_avx2.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem512_avx2.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 512 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem512KeyPairUnpacked`]\n and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_avx2_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *private_key,\n  const Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 512 (unpacked)\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem512PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_avx2_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_avx2_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7\nlibcrux_ml_kem_mlkem512_avx2_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_ab0 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_03\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_unpacked_public_key(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem512_avx2_H_DEFINED\n#endif /* internal_libcrux_mlkem512_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/internal/libcrux_mlkem512_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem512_portable_H\n#define internal_libcrux_mlkem512_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_portable.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem512_portable.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 512 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem512KeyPairUnpacked`]\n and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_portable_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *private_key,\n  const Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 512 (unpacked)\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem512PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_portable_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_portable_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b\nlibcrux_ml_kem_mlkem512_portable_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_ab0 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_03\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_unpacked_public_key(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem512_portable_H_DEFINED\n#endif /* internal_libcrux_mlkem512_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/internal/libcrux_mlkem768_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem768_avx2_H\n#define internal_libcrux_mlkem768_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_avx2.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem768_avx2.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 768 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem768KeyPairUnpacked`]\n and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_avx2_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *private_key,\n  const Eurydice_arr_2b *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 768 (unpacked)\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem768PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_avx2_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_avx2_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_mlkem768_avx2_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_7d *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_public_key(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *pk\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_unpacked_public_key(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem768_avx2_H_DEFINED\n#endif /* internal_libcrux_mlkem768_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/internal/libcrux_mlkem768_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem768_portable_H\n#define internal_libcrux_mlkem768_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_portable.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem768_portable.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 768 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem768KeyPairUnpacked`]\n and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_portable_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *private_key,\n  const Eurydice_arr_2b *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 768 (unpacked)\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem768PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_portable_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_portable_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_mlkem768_portable_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_7d *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_public_key(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *pk\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_unpacked_public_key(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem768_portable_H_DEFINED\n#endif /* internal_libcrux_mlkem768_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/internal/libcrux_mlkem_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem_avx2_H\n#define internal_libcrux_mlkem_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem_avx2.h\"\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_13_s { __m256i data[16U]; } Eurydice_arr_13;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_f6\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_60_s { Eurydice_arr_13 data[3U]; } Eurydice_arr_60;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_60\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_ea_s { Eurydice_arr_60 data[3U]; } Eurydice_arr_ea;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef_s\n{\n  Eurydice_arr_60 t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_ea A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef;\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a1(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_ef_s\n{\n  Eurydice_arr_60 ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_ef;\n\ntypedef struct libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_ef private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef public_key;\n}\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nconst\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\n*libcrux_ml_kem_ind_cca_unpacked_public_key_11_e3(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.clone_d7\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_ind_cca_unpacked_clone_d7_e3(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *self\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_79(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *self,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_79(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_79(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_d4(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_7d *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_d4(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_3e(\n  const Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_ind_cca_unpacked_default_30_e3(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_e3(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db1(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a81(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d91(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  const Eurydice_arr_2b *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_79(const Eurydice_arr_5f *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_a4(const Eurydice_arr_7d *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_d50(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_db1(const Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_encapsulate_a11(\n  const Eurydice_arr_5f *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_661(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_f6\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_3b_s { Eurydice_arr_13 data[4U]; } Eurydice_arr_3b;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_3b\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_cd_s { Eurydice_arr_3b data[4U]; } Eurydice_arr_cd;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4_s\n{\n  Eurydice_arr_3b t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_cd A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4;\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a0(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_d4_s\n{\n  Eurydice_arr_3b ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_d4;\n\ntypedef struct libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_d4 private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 public_key;\n}\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_74(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *self,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_74(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_74(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_f8(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_a8 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_f8(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_b2(\n  const Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4\nlibcrux_ml_kem_ind_cca_unpacked_default_30_5b(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_5b(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db0(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a80(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d90(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_74(const Eurydice_arr_d1 *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_f8(const Eurydice_arr_a8 *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_b3(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_db0(const Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_encapsulate_a10(\n  const Eurydice_arr_d1 *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_660(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_f6\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_ee_s { Eurydice_arr_13 data[2U]; } Eurydice_arr_ee;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_ee\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_e2_s { Eurydice_arr_ee data[2U]; } Eurydice_arr_e2;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7_s\n{\n  Eurydice_arr_ee t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_e2 A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7;\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_c7_s\n{\n  Eurydice_arr_ee ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_c7;\n\ntypedef struct libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_c7 private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 public_key;\n}\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_ce(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *self,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_ce(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_03\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_ce(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_4e(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_ab0 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_4e(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_a4(\n  const Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7\nlibcrux_ml_kem_ind_cca_unpacked_default_30_16(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_16(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a8(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d9(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_ce(const Eurydice_arr_03 *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_37(const Eurydice_arr_ab0 *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_85(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_ind_cca_generate_keypair_db(const Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_encapsulate_a1(\n  const Eurydice_arr_03 *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_66(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem_avx2_H_DEFINED\n#endif /* internal_libcrux_mlkem_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/internal/libcrux_mlkem_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem_portable_H\n#define internal_libcrux_mlkem_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_core.h\"\n#include \"libcrux_sha3_portable.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem_portable.h\"\n\nint16_t libcrux_ml_kem_polynomial_zeta(size_t i);\n\n#define LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT ((size_t)16U)\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_9e_s { Eurydice_arr_d6 data[16U]; } Eurydice_arr_9e;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_1d\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_d20_s { Eurydice_arr_9e data[4U]; } Eurydice_arr_d20;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_d20\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_600_s { Eurydice_arr_d20 data[4U]; } Eurydice_arr_600;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94_s\n{\n  Eurydice_arr_d20 t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_600 A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94;\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_4a\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_23(\n  const Eurydice_arr_56 *input\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_7c0\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_23(\n  Eurydice_arr_4a *self\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_9c\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_23(Eurydice_arr_4a *self);\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_29(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_94_s\n{\n  Eurydice_arr_d20 ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_94;\n\ntypedef struct libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_94 private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 public_key;\n}\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_1c(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *self,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_1c(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_1c(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self\n);\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SERIALIZED_KEY_LEN= 3168\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_4c(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_a8 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_2e(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_a8 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_2e(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_38(\n  const Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94\nlibcrux_ml_kem_ind_cca_unpacked_default_30_ee(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_ee(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b81(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a71(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c1(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_1c(const Eurydice_arr_d1 *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_4c(const Eurydice_arr_a8 *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_79(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_b81(const Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_encapsulate_991(\n  const Eurydice_arr_d1 *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd1(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_1d\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_1e_s { Eurydice_arr_9e data[2U]; } Eurydice_arr_1e;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_1e\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_df0_s { Eurydice_arr_1e data[2U]; } Eurydice_arr_df0;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b_s\n{\n  Eurydice_arr_1e t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_df0 A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b;\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_e3\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_af(\n  const Eurydice_arr_bf *input\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_b8\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_af(\n  Eurydice_arr_e3 *self\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_5b0\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_af(Eurydice_arr_e3 *self);\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_e0(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_3b_s\n{\n  Eurydice_arr_1e ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_3b;\n\ntypedef struct libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_3b private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b public_key;\n}\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_53(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *self,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_53(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_03\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_53(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self\n);\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SERIALIZED_KEY_LEN= 1632\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_e2(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_ab0 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_a3(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_ab0 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_a3(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_71(\n  const Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b\nlibcrux_ml_kem_ind_cca_unpacked_default_30_66(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_66(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b80(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a70(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c0(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_53(const Eurydice_arr_03 *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_e2(const Eurydice_arr_ab0 *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_d5(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_ind_cca_generate_keypair_b80(const Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_encapsulate_990(\n  const Eurydice_arr_03 *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd0(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_1d\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_bb_s { Eurydice_arr_9e data[3U]; } Eurydice_arr_bb;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_bb\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_1d_s { Eurydice_arr_bb data[3U]; } Eurydice_arr_1d;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51_s\n{\n  Eurydice_arr_bb t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_1d A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51;\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_1b\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_78(\n  const Eurydice_arr_81 *input\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_7e\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_78(\n  Eurydice_arr_1b *self\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_2c\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_78(Eurydice_arr_1b *self);\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_22(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51_s\n{\n  Eurydice_arr_bb ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51;\n\ntypedef struct libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51 private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 public_key;\n}\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nconst\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\n*libcrux_ml_kem_ind_cca_unpacked_public_key_11_68(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.clone_d7\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_ind_cca_unpacked_clone_d7_68(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_b6(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_b6(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SERIALIZED_KEY_LEN= 2400\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_7d *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_7d *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_21(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_01(\n  const Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_ind_cca_unpacked_default_30_68(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_68(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b8(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a7(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  const Eurydice_arr_2b *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_b6(const Eurydice_arr_5f *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_52(const Eurydice_arr_7d *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_ba(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_b8(const Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_encapsulate_99(\n  const Eurydice_arr_5f *public_key,\n  const Eurydice_arr_ec *randomness\n);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem_portable_H_DEFINED\n#endif /* internal_libcrux_mlkem_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/internal/libcrux_sha3_internal.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_sha3_internal_H\n#define internal_libcrux_sha3_internal_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n#include \"../libcrux_sha3_internal.h\"\n\ntypedef Eurydice_arr_60 libcrux_sha3_Sha3_256Digest;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_sha3_internal_H_DEFINED\n#endif /* internal_libcrux_sha3_internal_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_core.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_core.h\"\n\n/**\n Return 1 if `value` is not zero and 0 otherwise.\n*/\nstatic KRML_NOINLINE uint8_t inz(uint8_t value)\n{\n  uint16_t value0 = (uint16_t)value;\n  uint8_t result = (uint8_t)((uint32_t)core_num__u16__wrapping_add(~value0, 1U) >> 8U);\n  return (uint32_t)result & 1U;\n}\n\nstatic KRML_NOINLINE uint8_t is_non_zero(uint8_t value)\n{\n  return inz(value);\n}\n\n/**\n Return 1 if the bytes of `lhs` and `rhs` do not exactly\n match and 0 otherwise.\n*/\nstatic KRML_NOINLINE uint8_t\ncompare(Eurydice_borrow_slice_u8 lhs, Eurydice_borrow_slice_u8 rhs)\n{\n  uint8_t r = 0U;\n  for (size_t i = (size_t)0U; i < lhs.meta; i++)\n  {\n    size_t i0 = i;\n    uint8_t nr = (uint32_t)r | ((uint32_t)lhs.ptr[i0] ^ (uint32_t)rhs.ptr[i0]);\n    r = nr;\n  }\n  return is_non_zero(r);\n}\n\nKRML_NOINLINE uint8_t\nlibcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(\n  Eurydice_borrow_slice_u8 lhs,\n  Eurydice_borrow_slice_u8 rhs\n)\n{\n  return compare(lhs, rhs);\n}\n\n/**\n If `selector` is not zero, return the bytes in `rhs`; return the bytes in\n `lhs` otherwise.\n*/\nstatic KRML_NOINLINE Eurydice_arr_ec\nselect_ct(Eurydice_borrow_slice_u8 lhs, Eurydice_borrow_slice_u8 rhs, uint8_t selector)\n{\n  uint8_t mask = core_num__u8__wrapping_sub(is_non_zero(selector), 1U);\n  Eurydice_arr_ec out = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE; i++)\n  {\n    size_t i0 = i;\n    uint8_t\n    outi =\n      ((uint32_t)lhs.ptr[i0] & (uint32_t)mask) | ((uint32_t)rhs.ptr[i0] & (~(uint32_t)mask & 0xFFU));\n    out.data[i0] = outi;\n  }\n  return out;\n}\n\nKRML_NOINLINE Eurydice_arr_ec\nlibcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(\n  Eurydice_borrow_slice_u8 lhs,\n  Eurydice_borrow_slice_u8 rhs,\n  uint8_t selector\n)\n{\n  return select_ct(lhs, rhs, selector);\n}\n\nKRML_NOINLINE Eurydice_arr_ec\nlibcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(\n  Eurydice_borrow_slice_u8 lhs_c,\n  Eurydice_borrow_slice_u8 rhs_c,\n  Eurydice_borrow_slice_u8 lhs_s,\n  Eurydice_borrow_slice_u8 rhs_s\n)\n{\n  uint8_t\n  selector = libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(lhs_c, rhs_c);\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(lhs_s,\n      rhs_s,\n      selector);\n}\n\n/**\n K * BITS_PER_RING_ELEMENT / 8\n\n [eurydice] Note that we can't use const generics here because that breaks\n            C extraction with eurydice.\n*/\nsize_t libcrux_ml_kem_constants_ranked_bytes_per_ring_element(size_t rank)\n{\n  return rank * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types uint8_t\n\n*/\nstatic KRML_MUSTINLINE uint8_t classify_27_90(uint8_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types int16_t\n\n*/\nint16_t libcrux_secrets_int_public_integers_declassify_d8_39(int16_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nuint8_t libcrux_secrets_int_as_u8_f5(int16_t self)\n{\n  return classify_27_90((uint8_t)libcrux_secrets_int_public_integers_declassify_d8_39(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types int16_t\n\n*/\nint16_t libcrux_secrets_int_public_integers_classify_27_39(int16_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types uint8_t\n\n*/\nstatic KRML_MUSTINLINE uint8_t declassify_d8_90(uint8_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u8}\n*/\nint16_t libcrux_secrets_int_as_i16_59(uint8_t self)\n{\n  return libcrux_secrets_int_public_integers_classify_27_39((int16_t)declassify_d8_90(self));\n}\n\n/**\n Construct a public integer (identity)\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.secret\nwith types int16_t\n\n*/\nstatic KRML_MUSTINLINE int16_t secret_39(int16_t x)\n{\n  return x;\n}\n\nint16_t libcrux_secrets_int_I16(int16_t v)\n{\n  return secret_39(v);\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types int32_t\n\n*/\nstatic KRML_MUSTINLINE int32_t classify_27_a8(int32_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nint32_t libcrux_secrets_int_as_i32_f5(int16_t self)\n{\n  return classify_27_a8((int32_t)libcrux_secrets_int_public_integers_declassify_d8_39(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types int32_t\n\n*/\nstatic KRML_MUSTINLINE int32_t declassify_d8_a8(int32_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i32}\n*/\nint16_t libcrux_secrets_int_as_i16_36(int32_t self)\n{\n  return libcrux_secrets_int_public_integers_classify_27_39((int16_t)declassify_d8_a8(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types uint32_t\n\n*/\nstatic KRML_MUSTINLINE uint32_t declassify_d8_df(uint32_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u32}\n*/\nint32_t libcrux_secrets_int_as_i32_b8(uint32_t self)\n{\n  return classify_27_a8((int32_t)declassify_d8_df(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types uint16_t\n\n*/\nstatic KRML_MUSTINLINE uint16_t classify_27_de(uint16_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nuint16_t libcrux_secrets_int_as_u16_f5(int16_t self)\n{\n  return classify_27_de((uint16_t)libcrux_secrets_int_public_integers_declassify_d8_39(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types uint16_t\n\n*/\nstatic KRML_MUSTINLINE uint16_t declassify_d8_de(uint16_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u16}\n*/\nint16_t libcrux_secrets_int_as_i16_ca(uint16_t self)\n{\n  return libcrux_secrets_int_public_integers_classify_27_39((int16_t)declassify_d8_de(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types uint64_t\n\n*/\nstatic KRML_MUSTINLINE uint64_t classify_27_49(uint64_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u16}\n*/\nuint64_t libcrux_secrets_int_as_u64_ca(uint16_t self)\n{\n  return classify_27_49((uint64_t)declassify_d8_de(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types uint32_t\n\n*/\nuint32_t libcrux_secrets_int_public_integers_classify_27_df(uint32_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types uint64_t\n\n*/\nstatic KRML_MUSTINLINE uint64_t declassify_d8_49(uint64_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u64}\n*/\nuint32_t libcrux_secrets_int_as_u32_a3(uint64_t self)\n{\n  return libcrux_secrets_int_public_integers_classify_27_df((uint32_t)declassify_d8_49(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u32}\n*/\nint16_t libcrux_secrets_int_as_i16_b8(uint32_t self)\n{\n  return libcrux_secrets_int_public_integers_classify_27_39((int16_t)declassify_d8_df(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nint16_t libcrux_secrets_int_as_i16_f5(int16_t self)\n{\n  return\n    libcrux_secrets_int_public_integers_classify_27_39(libcrux_secrets_int_public_integers_declassify_d8_39(self));\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 3168\n*/\nEurydice_arr_a8 libcrux_ml_kem_types_default_d3_0e(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_a8){ .data = { 0U } });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_to_shared_212(const Eurydice_arr_d1 *a, size_t r)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 3168\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d49(const Eurydice_arr_a8 *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 libcrux_ml_kem_types_from_51_d9(Eurydice_arr_d1 value)\n{\n  return value;\n}\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_types_from_17_70(Eurydice_arr_a8 sk, Eurydice_arr_d1 pk)\n{\n  return (KRML_CLITERAL(libcrux_ml_kem_mlkem1024_MlKem1024KeyPair){ .sk = sk, .pk = pk });\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 3168\n*/\nEurydice_arr_a8 libcrux_ml_kem_types_from_b2_0e(Eurydice_arr_a8 value)\n{\n  return value;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1536\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_2f(const Eurydice_arr_df *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1536U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 3168\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d420(Eurydice_arr_a8 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1536\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_2f(Eurydice_arr_df *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1536U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 libcrux_ml_kem_types_from_19_d9(Eurydice_arr_d1 value)\n{\n  return value;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 1568\n*/\nconst Eurydice_arr_d1 *libcrux_ml_kem_types_as_slice_e6_d9(const Eurydice_arr_d1 *self)\n{\n  return self;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 1568\n*/\nconst Eurydice_arr_d1 *libcrux_ml_kem_types_as_slice_a9_d9(const Eurydice_arr_d1 *self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f6(Eurydice_arr_d1 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1568U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d419(Eurydice_arr_d1 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 352\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d418(Eurydice_arr_e7 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 352\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_25(const Eurydice_arr_e7 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)352U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 4\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_23(Eurydice_arr_890 *prf_inputs, uint8_t domain_separator)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    prf_inputs->data[i0].data[32U] = domain_separator;\n    domain_separator = (uint32_t)domain_separator + 1U;);\n  return domain_separator;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1600\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_720(const Eurydice_arr_14 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1600U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_b50(const Eurydice_arr_d1 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1568U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 1568\n*/\nEurydice_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_d9(const Eurydice_arr_d1 *self)\n{\n  return Eurydice_array_to_slice_shared_b50(self);\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1600\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f5(Eurydice_arr_14 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1600U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1600\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_mut_d417(Eurydice_arr_14 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 1600\n*/\nEurydice_arr_14 libcrux_ml_kem_utils_into_padded_array_49(Eurydice_borrow_slice_u8 slice)\n{\n  Eurydice_arr_14 out = { .data = { 0U } };\n  Eurydice_slice_copy(array_to_subslice_mut_d417(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f4(const Eurydice_arr_d1 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1568U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d48(const Eurydice_arr_d1 *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 3168\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_68(const Eurydice_arr_a8 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)3168U;\n  return lit;\n}\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_e3(Eurydice_borrow_slice_u8 private_key)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(private_key,\n      (size_t)1536U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 secret_key0 = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(secret_key0,\n      (size_t)1568U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____1.fst;\n  Eurydice_borrow_slice_u8 secret_key = uu____1.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(secret_key,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____2.fst;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____2.snd;\n  return\n    (\n      KRML_CLITERAL(Eurydice_borrow_slice_u8_x4){\n        .fst = ind_cpa_secret_key,\n        .snd = ind_cpa_public_key,\n        .thd = ind_cpa_public_key_hash,\n        .f3 = implicit_rejection_value\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 2400\n*/\nEurydice_arr_7d libcrux_ml_kem_types_default_d3_79(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_7d){ .data = { 0U } });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f3(const Eurydice_arr_5f *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1184U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_to_shared_211(const Eurydice_arr_5f *a, size_t r)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 2400\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d47(const Eurydice_arr_7d *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 1184\n*/\nEurydice_arr_5f libcrux_ml_kem_types_from_51_3d(Eurydice_arr_5f value)\n{\n  return value;\n}\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_types_from_17_bc(Eurydice_arr_7d sk, Eurydice_arr_5f pk)\n{\n  return (KRML_CLITERAL(libcrux_ml_kem_mlkem768_MlKem768KeyPair){ .sk = sk, .pk = pk });\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 2400\n*/\nEurydice_arr_7d libcrux_ml_kem_types_from_b2_79(Eurydice_arr_7d value)\n{\n  return value;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1152\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_f4(const Eurydice_arr_0e *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1152U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 2400\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d416(Eurydice_arr_7d *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1152\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_f4(Eurydice_arr_0e *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1152U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f4(Eurydice_arr_5f *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1184U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d415(Eurydice_arr_5f *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 1088\n*/\nEurydice_arr_2b libcrux_ml_kem_types_from_19_52(Eurydice_arr_2b value)\n{\n  return value;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 1184\n*/\nconst Eurydice_arr_5f *libcrux_ml_kem_types_as_slice_e6_3d(const Eurydice_arr_5f *self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_ff(const Eurydice_arr_5f *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1184U;\n  return lit;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 1088\n*/\nconst Eurydice_arr_2b *libcrux_ml_kem_types_as_slice_a9_52(const Eurydice_arr_2b *self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f3(Eurydice_arr_2b *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1088U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d414(Eurydice_arr_2b *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 3\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_78(Eurydice_arr_801 *prf_inputs, uint8_t domain_separator)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    prf_inputs->data[i0].data[32U] = domain_separator;\n    domain_separator = (uint32_t)domain_separator + 1U;);\n  return domain_separator;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1120\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_81(const Eurydice_arr_af *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1120U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_06(const Eurydice_arr_2b *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1088U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 1088\n*/\nEurydice_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_52(const Eurydice_arr_2b *self)\n{\n  return Eurydice_array_to_slice_shared_06(self);\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1120\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f2(Eurydice_arr_af *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1120U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1120\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_mut_d413(Eurydice_arr_af *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 1120\n*/\nEurydice_arr_af libcrux_ml_kem_utils_into_padded_array_66(Eurydice_borrow_slice_u8 slice)\n{\n  Eurydice_arr_af out = { .data = { 0U } };\n  Eurydice_slice_copy(array_to_subslice_mut_d413(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f2(const Eurydice_arr_2b *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1088U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d46(const Eurydice_arr_2b *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2400\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_51(const Eurydice_arr_7d *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2400U;\n  return lit;\n}\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_64(Eurydice_borrow_slice_u8 private_key)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(private_key,\n      (size_t)1152U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 secret_key0 = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(secret_key0,\n      (size_t)1184U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____1.fst;\n  Eurydice_borrow_slice_u8 secret_key = uu____1.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(secret_key,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____2.fst;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____2.snd;\n  return\n    (\n      KRML_CLITERAL(Eurydice_borrow_slice_u8_x4){\n        .fst = ind_cpa_secret_key,\n        .snd = ind_cpa_public_key,\n        .thd = ind_cpa_public_key_hash,\n        .f3 = implicit_rejection_value\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d44(Eurydice_arr_ec *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 32\n*/\nEurydice_arr_ec libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_borrow_slice_u8 slice)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 1632\n*/\nEurydice_arr_ab0 libcrux_ml_kem_types_default_d3_be(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_ab0){ .data = { 0U } });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f1(const Eurydice_arr_03 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)800U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_to_shared_210(const Eurydice_arr_03 *a, size_t r)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1632\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d45(const Eurydice_arr_ab0 *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 800\n*/\nEurydice_arr_03 libcrux_ml_kem_types_from_51_df(Eurydice_arr_03 value)\n{\n  return value;\n}\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_types_from_17_d6(Eurydice_arr_ab0 sk, Eurydice_arr_03 pk)\n{\n  return (KRML_CLITERAL(libcrux_ml_kem_types_MlKemKeyPair_0d){ .sk = sk, .pk = pk });\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 1632\n*/\nEurydice_arr_ab0 libcrux_ml_kem_types_from_b2_be(Eurydice_arr_ab0 value)\n{\n  return value;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1632\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d412(Eurydice_arr_ab0 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_27(Eurydice_arr_d2 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)768U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 24\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_ed(const Eurydice_arr_94 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)24U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 384\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d411(Eurydice_arr_b20 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 384\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_a9(const Eurydice_arr_b20 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)384U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$32size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_ec core_result_unwrap_26_39(core_result_Result_07 self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f0(const Eurydice_arr_c7 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)64U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d44(const Eurydice_arr_c7 *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 768\n*/\nEurydice_arr_d2 libcrux_ml_kem_types_from_19_80(Eurydice_arr_d2 value)\n{\n  return value;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 800\n*/\nconst Eurydice_arr_03 *libcrux_ml_kem_types_as_slice_e6_df(const Eurydice_arr_03 *self)\n{\n  return self;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 768\n*/\nconst Eurydice_arr_d2 *libcrux_ml_kem_types_as_slice_a9_80(const Eurydice_arr_d2 *self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f1(Eurydice_arr_d2 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)768U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 10\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_30(const Eurydice_arr_6d *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)10U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d410(Eurydice_arr_d2 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 22\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_98(const Eurydice_arr_80 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)22U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 20\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_8f(const Eurydice_arr_fc *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)20U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 320\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d49(Eurydice_arr_b0 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 320\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_56(const Eurydice_arr_b0 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)320U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 128\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_78(const Eurydice_arr_89 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)128U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 128\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_78(Eurydice_arr_89 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)128U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 192\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_d9(const Eurydice_arr_1c *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)192U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types int16_t\nwith const generics\n- N= 256\n*/\nEurydice_borrow_slice_i16 Eurydice_array_to_slice_shared_990(const Eurydice_arr_04 *a)\n{\n  Eurydice_borrow_slice_i16 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)256U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 192\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_d9(Eurydice_arr_1c *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)192U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 33\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_b5(const Eurydice_arr_fa *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)33U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 2\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_af(Eurydice_arr_4d *prf_inputs, uint8_t domain_separator)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    prf_inputs->data[i0].data[32U] = domain_separator;\n    domain_separator = (uint32_t)domain_separator + 1U;);\n  return domain_separator;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 33\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d48(Eurydice_arr_fa *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 33\n*/\nEurydice_arr_fa libcrux_ml_kem_utils_into_padded_array_29(Eurydice_borrow_slice_u8 slice)\n{\n  Eurydice_arr_fa out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d48(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 34\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_mut_d47(Eurydice_arr_31 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 34\n*/\nEurydice_arr_31 libcrux_ml_kem_utils_into_padded_array_de(Eurydice_borrow_slice_u8 slice)\n{\n  Eurydice_arr_31 out = { .data = { 0U } };\n  Eurydice_slice_copy(array_to_subslice_mut_d47(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\nwith const generics\n- N= 272\n*/\nEurydice_borrow_slice_i16\nEurydice_array_to_subslice_shared_e70(const Eurydice_arr_5b *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_i16){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d43(const Eurydice_arr_c5 *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_2c(Eurydice_arr_c5 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)168U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\nwith const generics\n- N= 272\n*/\nEurydice_mut_borrow_slice_i16\nEurydice_array_to_subslice_mut_e7(Eurydice_arr_5b *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_i16){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 504\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d42(const Eurydice_arr_79 *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 504\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_48(Eurydice_arr_79 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)504U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 34\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_e9(const Eurydice_arr_31 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)34U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_borrow_slice_u8\nEurydice_slice_subslice_from_shared_6d(Eurydice_borrow_slice_u8 s, size_t r)\n{\n  return (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = s.ptr + r, .meta = s.meta - r });\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_borrow_slice_u8\nEurydice_slice_subslice_to_shared_72(Eurydice_borrow_slice_u8 s, size_t r)\n{\n  return (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = s.ptr, .meta = r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_3b(const Eurydice_arr_03 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)800U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_27(const Eurydice_arr_d2 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)768U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 768\n*/\nEurydice_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_80(const Eurydice_arr_d2 *self)\n{\n  return Eurydice_array_to_slice_shared_27(self);\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f0(Eurydice_arr_03 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)800U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d46(Eurydice_arr_03 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 800\n*/\nEurydice_arr_03 libcrux_ml_kem_utils_into_padded_array_df(Eurydice_borrow_slice_u8 slice)\n{\n  Eurydice_arr_03 out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d46(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_17(const Eurydice_arr_c7 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)64U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f(Eurydice_arr_c7 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)64U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_01(const Eurydice_arr_ec *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)32U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_mut_d45(Eurydice_arr_c7 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 64\n*/\nEurydice_arr_c7 libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_borrow_slice_u8 slice)\n{\n  Eurydice_arr_c7 out = { .data = { 0U } };\n  Eurydice_slice_copy(array_to_subslice_mut_d45(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 2\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_82(const Eurydice_array_u8x2 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_shared\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_from_shared_5f(const Eurydice_arr_d2 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)768U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d41(const Eurydice_arr_d2 *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 1632\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_99(const Eurydice_arr_ab0 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1632U;\n  return lit;\n}\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_e0(Eurydice_borrow_slice_u8 private_key)\n{\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(private_key,\n      (size_t)768U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 secret_key0 = uu____0.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(secret_key0,\n      (size_t)800U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____1.fst;\n  Eurydice_borrow_slice_u8 secret_key = uu____1.snd;\n  Eurydice_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(secret_key,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____2.fst;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____2.snd;\n  return\n    (\n      KRML_CLITERAL(Eurydice_borrow_slice_u8_x4){\n        .fst = ind_cpa_secret_key,\n        .snd = ind_cpa_public_key,\n        .thd = ind_cpa_public_key_hash,\n        .f3 = implicit_rejection_value\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\n\n*/\nEurydice_mut_borrow_slice_i16\nEurydice_slice_subslice_mut_a6(Eurydice_mut_borrow_slice_i16 s, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_i16){\n        .ptr = s.ptr + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_29(const Eurydice_arr_b2 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$24size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_94 core_result_unwrap_26_78(core_result_Result_57 self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types int16_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_i16 Eurydice_array_to_slice_shared_8a(const Eurydice_arr_d6 *a)\n{\n  Eurydice_borrow_slice_i16 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$20size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_fc core_result_unwrap_26_7d(core_result_Result_83 self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$10size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_6d core_result_unwrap_26_63(core_result_Result_80 self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d40(const Eurydice_arr_b2 *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_29(Eurydice_arr_b2 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types int16_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_i16 Eurydice_array_to_slice_mut_8a(Eurydice_arr_d6 *a)\n{\n  Eurydice_mut_borrow_slice_i16 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$24size_t]]\n\n*/\nEurydice_arr_94 libcrux_secrets_int_public_integers_declassify_d8_40(Eurydice_arr_94 self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$20size_t]]\n\n*/\nEurydice_arr_fc libcrux_secrets_int_public_integers_declassify_d8_2b(Eurydice_arr_fc self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$10size_t]]\n\n*/\nEurydice_arr_6d libcrux_secrets_int_public_integers_declassify_d8_37(Eurydice_arr_6d self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$8size_t]]\n\n*/\nEurydice_array_u8x8\nlibcrux_secrets_int_public_integers_declassify_d8_52(Eurydice_array_u8x8 self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$2size_t]]\n\n*/\nEurydice_array_u8x2\nlibcrux_secrets_int_public_integers_declassify_d8_75(Eurydice_array_u8x2 self)\n{\n  return self;\n}\n\n/**\n Classify a mutable slice (identity)\n We define a separate function for this because hax has limited support for &mut-returning functions\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_mut_slice\nwith types Eurydice_dst_ref_mut uint8_t size_t\n\n*/\nEurydice_mut_borrow_slice_u8\nlibcrux_secrets_int_public_integers_classify_mut_slice_75(Eurydice_mut_borrow_slice_u8 x)\n{\n  return x;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types Eurydice_arr int16_t[[$16size_t]]\n\n*/\nEurydice_arr_d6 libcrux_secrets_int_public_integers_classify_27_4b(Eurydice_arr_d6 self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr int16_t[[$16size_t]]\n\n*/\nEurydice_arr_d6 libcrux_secrets_int_public_integers_declassify_d8_4b(Eurydice_arr_d6 self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::ClassifyRef<&'a ([T])> for &'a ([T])}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_6d\nwith types uint8_t\n\n*/\nEurydice_borrow_slice_u8\nlibcrux_secrets_int_classify_public_classify_ref_6d_90(Eurydice_borrow_slice_u8 self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$22size_t]]\n\n*/\nEurydice_arr_80 libcrux_secrets_int_public_integers_declassify_d8_0b(Eurydice_arr_80 self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\nwith const generics\n- N= 16\n*/\nEurydice_borrow_slice_i16\nEurydice_array_to_subslice_shared_e7(const Eurydice_arr_d6 *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_i16){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::ClassifyRef<&'a ([T])> for &'a ([T])}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_6d\nwith types int16_t\n\n*/\nEurydice_borrow_slice_i16\nlibcrux_secrets_int_classify_public_classify_ref_6d_39(Eurydice_borrow_slice_i16 self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_shared\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\n\n*/\nEurydice_borrow_slice_i16\nEurydice_slice_subslice_shared_a6(Eurydice_borrow_slice_i16 s, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_i16){ .ptr = s.ptr + r.start, .meta = r.end - r.start });\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr int16_t[[$16size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_d6 core_result_unwrap_26_d3(core_result_Result_ec self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_shared_d4(const Eurydice_arr_ec *a, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = a->data + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_17(Eurydice_arr_c7 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)64U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 48\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_9f(Eurydice_arr_65 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)48U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_01(Eurydice_arr_ec *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)32U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 28\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_5e(Eurydice_arr_a2 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)28U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_72(const Eurydice_arr_c4 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)104U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d43(Eurydice_arr_c4 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_38(const Eurydice_arr_f4 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)144U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d42(Eurydice_arr_f4 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_2c(const Eurydice_arr_c5 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)168U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d41(Eurydice_arr_c5 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_58(const Eurydice_arr_ff *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)136U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d40(Eurydice_arr_ff *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_shared\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_borrow_slice_u8\nEurydice_array_to_subslice_to_shared_21(const Eurydice_array_u8x8 *a, size_t r)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_6e(const Eurydice_array_u8x8 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_slice_subslice_mut_c8(Eurydice_mut_borrow_slice_u8 s, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = s.ptr + r.start, .meta = r.end - r.start }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_borrow_slice_u8 Eurydice_array_to_slice_shared_e2(const Eurydice_arr_ab *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)72U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$8size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_array_u8x8 core_result_unwrap_26_e0(core_result_Result_8e self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_shared\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_borrow_slice_u8\nEurydice_slice_subslice_shared_c8(Eurydice_borrow_slice_u8 s, core_ops_range_Range_87 r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_borrow_slice_u8){ .ptr = s.ptr + r.start, .meta = r.end - r.start });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d4(Eurydice_arr_ab *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_core.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_core_H\n#define libcrux_core_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE ((size_t)32U)\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $32size_t\n*/\ntypedef struct Eurydice_arr_ec_s { uint8_t data[32U]; } Eurydice_arr_ec;\n\n#define LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT ((size_t)12U)\n\n#define LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT ((size_t)256U)\n\n#define LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)12U)\n\n#define LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE ((size_t)32U)\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $3168size_t\n*/\ntypedef struct Eurydice_arr_a8_s { uint8_t data[3168U]; } Eurydice_arr_a8;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1568size_t\n*/\ntypedef struct Eurydice_arr_d1_s { uint8_t data[1568U]; } Eurydice_arr_d1;\n\ntypedef struct libcrux_ml_kem_mlkem1024_MlKem1024KeyPair_s\n{\n  Eurydice_arr_a8 sk;\n  Eurydice_arr_d1 pk;\n}\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair;\n\n/**\nA monomorphic instance of n-tuple\nwith types libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext, Eurydice_arr_ec\n\n*/\ntypedef struct tuple_25_s\n{\n  Eurydice_arr_d1 fst;\n  Eurydice_arr_ec snd;\n}\ntuple_25;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $2400size_t\n*/\ntypedef struct Eurydice_arr_7d_s { uint8_t data[2400U]; } Eurydice_arr_7d;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1184size_t\n*/\ntypedef struct Eurydice_arr_5f_s { uint8_t data[1184U]; } Eurydice_arr_5f;\n\ntypedef struct libcrux_ml_kem_mlkem768_MlKem768KeyPair_s\n{\n  Eurydice_arr_7d sk;\n  Eurydice_arr_5f pk;\n}\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1088size_t\n*/\ntypedef struct Eurydice_arr_2b_s { uint8_t data[1088U]; } Eurydice_arr_2b;\n\n/**\nA monomorphic instance of n-tuple\nwith types libcrux_ml_kem_mlkem768_MlKem768Ciphertext, Eurydice_arr_ec\n\n*/\ntypedef struct tuple_f4_s\n{\n  Eurydice_arr_2b fst;\n  Eurydice_arr_ec snd;\n}\ntuple_f4;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $168size_t\n*/\ntypedef struct Eurydice_arr_c5_s { uint8_t data[168U]; } Eurydice_arr_c5;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1632size_t\n*/\ntypedef struct Eurydice_arr_ab0_s { uint8_t data[1632U]; } Eurydice_arr_ab0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $800size_t\n*/\ntypedef struct Eurydice_arr_03_s { uint8_t data[800U]; } Eurydice_arr_03;\n\n/**\nA monomorphic instance of libcrux_ml_kem.types.MlKemKeyPair\nwith const generics\n- $1632size_t\n- $800size_t\n*/\ntypedef struct libcrux_ml_kem_types_MlKemKeyPair_0d_s\n{\n  Eurydice_arr_ab0 sk;\n  Eurydice_arr_03 pk;\n}\nlibcrux_ml_kem_types_MlKemKeyPair_0d;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $768size_t\n*/\ntypedef struct Eurydice_arr_d2_s { uint8_t data[768U]; } Eurydice_arr_d2;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $24size_t\n*/\ntypedef struct Eurydice_arr_94_s { uint8_t data[24U]; } Eurydice_arr_94;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $64size_t\n*/\ntypedef struct Eurydice_arr_c7_s { uint8_t data[64U]; } Eurydice_arr_c7;\n\n/**\nA monomorphic instance of n-tuple\nwith types libcrux_ml_kem_types_MlKemCiphertext_6e, Eurydice_arr_ec\n\n*/\ntypedef struct tuple_ab_s\n{\n  Eurydice_arr_d2 fst;\n  Eurydice_arr_ec snd;\n}\ntuple_ab;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $10size_t\n*/\ntypedef struct Eurydice_arr_6d_s { uint8_t data[10U]; } Eurydice_arr_6d;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $22size_t\n*/\ntypedef struct Eurydice_arr_80_s { uint8_t data[22U]; } Eurydice_arr_80;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $20size_t\n*/\ntypedef struct Eurydice_arr_fc_s { uint8_t data[20U]; } Eurydice_arr_fc;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_b2_s { uint8_t data[16U]; } Eurydice_arr_b2;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int16_t\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_d6_s { int16_t data[16U]; } Eurydice_arr_d6;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_b2\nwith const generics\n- $256size_t\n*/\ntypedef struct Eurydice_arr_87_s { Eurydice_arr_b2 data[256U]; } Eurydice_arr_87;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $136size_t\n*/\ntypedef struct Eurydice_arr_ff_s { uint8_t data[136U]; } Eurydice_arr_ff;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_ff\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_0b_s { Eurydice_arr_ff data[1U]; } Eurydice_arr_0b;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c5\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_88_s { Eurydice_arr_c5 data[1U]; } Eurydice_arr_88;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $48size_t\n*/\ntypedef struct Eurydice_arr_65_s { uint8_t data[48U]; } Eurydice_arr_65;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $28size_t\n*/\ntypedef struct Eurydice_arr_a2_s { uint8_t data[28U]; } Eurydice_arr_a2;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint64_t\nwith const generics\n- $5size_t\n*/\ntypedef struct Eurydice_arr_84_s { uint64_t data[5U]; } Eurydice_arr_84;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_borrow_slice_u8\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_dc_s { Eurydice_borrow_slice_u8 data[1U]; } Eurydice_arr_dc;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint64_t\nwith const generics\n- $25size_t\n*/\ntypedef struct Eurydice_arr_7c_s { uint64_t data[25U]; } Eurydice_arr_7c;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint64_t\nwith const generics\n- $24size_t\n*/\ntypedef struct Eurydice_arr_22_s { uint64_t data[24U]; } Eurydice_arr_22;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_core_H_DEFINED\n#endif /* libcrux_core_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem1024.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem1024_H\n#define libcrux_mlkem1024_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n#define LIBCRUX_ML_KEM_MLKEM1024_VECTOR_U_COMPRESSION_FACTOR ((size_t)11U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_C1_BLOCK_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM1024_VECTOR_U_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_RANK ((size_t)4U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_C1_SIZE (LIBCRUX_ML_KEM_MLKEM1024_C1_BLOCK_SIZE * LIBCRUX_ML_KEM_MLKEM1024_RANK)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_VECTOR_V_COMPRESSION_FACTOR ((size_t)5U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_C2_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM1024_VECTOR_V_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_CIPHERTEXT_SIZE (LIBCRUX_ML_KEM_MLKEM1024_C1_SIZE + LIBCRUX_ML_KEM_MLKEM1024_C2_SIZE)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_T_AS_NTT_ENCODED_SIZE (LIBCRUX_ML_KEM_MLKEM1024_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_PUBLIC_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM1024_T_AS_NTT_ENCODED_SIZE + (size_t)32U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM1024_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_ETA1 ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_ETA1_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM1024_ETA1 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_ETA2 ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_ETA2_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM1024_ETA2 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_IMPLICIT_REJECTION_HASH_INPUT_SIZE (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE + LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_CIPHERTEXT_SIZE)\n\ntypedef Eurydice_arr_a8 libcrux_ml_kem_mlkem1024_MlKem1024PrivateKey;\n\ntypedef Eurydice_arr_d1 libcrux_ml_kem_mlkem1024_MlKem1024PublicKey;\n\n#define LIBCRUX_ML_KEM_MLKEM1024_RANKED_BYTES_PER_RING_ELEMENT (LIBCRUX_ML_KEM_MLKEM1024_RANK * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_SECRET_KEY_SIZE + LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_PUBLIC_KEY_SIZE + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE)\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem1024_H_DEFINED\n#endif /* libcrux_mlkem1024_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem1024_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem1024_avx2.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_avx2.h\"\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate_avx2\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_85(const Eurydice_arr_a8 *private_key, const Eurydice_arr_d1 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_660(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic Eurydice_arr_ec\ndecapsulate_85(const Eurydice_arr_a8 *private_key, const Eurydice_arr_d1 *ciphertext)\n{\n  return decapsulate_avx2_85(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 1024\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem1024PrivateKey`] and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_avx2_decapsulate(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  return decapsulate_85(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate_avx2\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_25\nencapsulate_avx2_07(const Eurydice_arr_d1 *public_key, const Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_a10(public_key, randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_25\nencapsulate_07(const Eurydice_arr_d1 *public_key, const Eurydice_arr_ec *randomness)\n{\n  return encapsulate_avx2_07(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 1024\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem1024PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_avx2_encapsulate(\n  const Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_07(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair_avx2\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem1024_MlKem1024KeyPair\ngenerate_keypair_avx2_b3(const Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_db0(randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem1024_MlKem1024KeyPair\ngenerate_keypair_b3(const Eurydice_arr_c7 *randomness)\n{\n  return generate_keypair_avx2_b3(randomness);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_mlkem1024_avx2_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_b3(&randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_avx2\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nstatic bool\nvalidate_private_key_avx2_43(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_b3(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nstatic bool\nvalidate_private_key_43(const Eurydice_arr_a8 *private_key, const Eurydice_arr_d1 *ciphertext)\n{\n  return validate_private_key_avx2_43(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_avx2_validate_private_key(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  return validate_private_key_43(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_only\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_f5(const Eurydice_arr_a8 *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_f8(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_avx2_validate_private_key_only(const Eurydice_arr_a8 *private_key)\n{\n  return validate_private_key_only_f5(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key_avx2\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic bool validate_public_key_avx2_f5(const Eurydice_arr_d1 *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_74(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic bool validate_public_key_f5(const Eurydice_arr_d1 *public_key)\n{\n  return validate_public_key_avx2_f5(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_avx2_validate_public_key(const Eurydice_arr_d1 *public_key)\n{\n  return validate_public_key_f5(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate_avx2\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_850(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_d90(key_pair, ciphertext);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic Eurydice_arr_ec\ndecapsulate_850(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  return decapsulate_avx2_850(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 1024 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem1024KeyPairUnpacked`]\n and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *private_key,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  return decapsulate_850(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate_avx2\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_25\nencapsulate_avx2_070(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a80(public_key, randomness);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_25\nencapsulate_070(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  return encapsulate_avx2_070(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 1024 (unpacked)\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem1024PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n TODO: The F* prefix opens required modules, it should go away when the following issue is resolved:\n <https://github.com/hacspec/hax/issues/770>\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_070(public_key, &randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair_avx2\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic void\ngenerate_keypair_avx2_b30(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_db0(randomness, out);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic void\ngenerate_keypair_b30(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *out\n)\n{\n  generate_keypair_avx2_b30(randomness, out);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_b30(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_5b();\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_5b();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_5b();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.keypair_from_private_key\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_39(\n  const Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_b2(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_39(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_f8(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_a8 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_f8(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_74(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_74(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_74(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key_avx2\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic void\nunpack_public_key_avx2_43(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a0(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic void\nunpack_public_key_43(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  unpack_public_key_avx2_43(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_unpacked_public_key(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  unpack_public_key_43(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem1024_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem1024_avx2_H\n#define libcrux_mlkem1024_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 1024\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem1024PrivateKey`] and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_avx2_decapsulate(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 1024\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem1024PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_avx2_encapsulate(\n  const Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 1024 Key Pair\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_mlkem1024_avx2_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_avx2_validate_private_key(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_avx2_validate_private_key_only(const Eurydice_arr_a8 *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_avx2_validate_public_key(const Eurydice_arr_d1 *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem1024_avx2_H_DEFINED\n#endif /* libcrux_mlkem1024_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem1024_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem1024_portable.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_portable.h\"\n\n/**\n Portable decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.decapsulate\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic Eurydice_arr_ec\ndecapsulate_85(const Eurydice_arr_a8 *private_key, const Eurydice_arr_d1 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_fd1(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 1024\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem1024PrivateKey`] and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_portable_decapsulate(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  return decapsulate_85(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.encapsulate\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_25\nencapsulate_07(const Eurydice_arr_d1 *public_key, const Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_991(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 1024\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem1024PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_portable_encapsulate(\n  const Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_07(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.generate_keypair\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem1024_MlKem1024KeyPair\ngenerate_keypair_b3(const Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_b81(randomness);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_mlkem1024_portable_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_b3(&randomness);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE bool\nvalidate_private_key_43(const Eurydice_arr_a8 *private_key, const Eurydice_arr_d1 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_79(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_portable_validate_private_key(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  return validate_private_key_43(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key_only\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_f5(const Eurydice_arr_a8 *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_4c(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_portable_validate_private_key_only(const Eurydice_arr_a8 *private_key)\n{\n  return validate_private_key_only_f5(private_key);\n}\n\n/**\n Public key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_public_key\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE bool validate_public_key_f5(const Eurydice_arr_d1 *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_1c(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_portable_validate_public_key(const Eurydice_arr_d1 *public_key)\n{\n  return validate_public_key_f5(public_key);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.decapsulate\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecapsulate_850(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_0c1(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 1024 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem1024KeyPairUnpacked`]\n and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_portable_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *private_key,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  return decapsulate_850(private_key, ciphertext);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.encapsulate\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_25\nencapsulate_070(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a71(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 1024 (unpacked)\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem1024PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n TODO: The F* prefix opens required modules, it should go away when the following issue is resolved:\n <https://github.com/hacspec/hax/issues/770>\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_portable_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_070(public_key, &randomness);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.generate_keypair\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_b30(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_b81(randomness, out);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_b30(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_ee();\n  libcrux_ml_kem_mlkem1024_portable_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_portable_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_ee();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94\nlibcrux_ml_kem_mlkem1024_portable_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_ee();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.keypair_from_private_key\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_39(\n  const Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_38(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_39(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_2e(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_a8 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_2e(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_1c(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_1c(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_1c(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.unpack_public_key\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE void\nunpack_public_key_43(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_29(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_unpacked_public_key(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *unpacked_public_key\n)\n{\n  unpack_public_key_43(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem1024_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem1024_portable_H\n#define libcrux_mlkem1024_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 1024\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem1024PrivateKey`] and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_portable_decapsulate(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 1024\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem1024PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_portable_encapsulate(\n  const Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 1024 Key Pair\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_mlkem1024_portable_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_portable_validate_private_key(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_portable_validate_private_key_only(const Eurydice_arr_a8 *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_portable_validate_public_key(const Eurydice_arr_d1 *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem1024_portable_H_DEFINED\n#endif /* libcrux_mlkem1024_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem512.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem512_H\n#define libcrux_mlkem512_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n#define LIBCRUX_ML_KEM_MLKEM512_VECTOR_U_COMPRESSION_FACTOR ((size_t)10U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_C1_BLOCK_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM512_VECTOR_U_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_RANK ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_C1_SIZE (LIBCRUX_ML_KEM_MLKEM512_C1_BLOCK_SIZE * LIBCRUX_ML_KEM_MLKEM512_RANK)\n\n#define LIBCRUX_ML_KEM_MLKEM512_VECTOR_V_COMPRESSION_FACTOR ((size_t)4U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_C2_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM512_VECTOR_V_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_CIPHERTEXT_SIZE (LIBCRUX_ML_KEM_MLKEM512_C1_SIZE + LIBCRUX_ML_KEM_MLKEM512_C2_SIZE)\n\n#define LIBCRUX_ML_KEM_MLKEM512_T_AS_NTT_ENCODED_SIZE (LIBCRUX_ML_KEM_MLKEM512_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_PUBLIC_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM512_T_AS_NTT_ENCODED_SIZE + (size_t)32U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM512_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_ETA1 ((size_t)3U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_ETA1_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM512_ETA1 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_ETA2 ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_ETA2_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM512_ETA2 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_IMPLICIT_REJECTION_HASH_INPUT_SIZE (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE + LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_CIPHERTEXT_SIZE)\n\ntypedef Eurydice_arr_d2 libcrux_ml_kem_mlkem512_MlKem512Ciphertext;\n\ntypedef libcrux_ml_kem_types_MlKemKeyPair_0d libcrux_ml_kem_mlkem512_MlKem512KeyPair;\n\ntypedef Eurydice_arr_ab0 libcrux_ml_kem_mlkem512_MlKem512PrivateKey;\n\ntypedef Eurydice_arr_03 libcrux_ml_kem_mlkem512_MlKem512PublicKey;\n\n#define LIBCRUX_ML_KEM_MLKEM512_RANKED_BYTES_PER_RING_ELEMENT (LIBCRUX_ML_KEM_MLKEM512_RANK * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_SECRET_KEY_SIZE + LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_PUBLIC_KEY_SIZE + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE)\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem512_H_DEFINED\n#endif /* libcrux_mlkem512_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem512_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem512_avx2.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_avx2.h\"\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate_avx2\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_37(const Eurydice_arr_ab0 *private_key, const Eurydice_arr_d2 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_66(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic Eurydice_arr_ec\ndecapsulate_37(const Eurydice_arr_ab0 *private_key, const Eurydice_arr_d2 *ciphertext)\n{\n  return decapsulate_avx2_37(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 512\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem512PrivateKey`] and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_avx2_decapsulate(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  return decapsulate_37(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate_avx2\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_ab\nencapsulate_avx2_80(const Eurydice_arr_03 *public_key, const Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_a1(public_key, randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_ab\nencapsulate_80(const Eurydice_arr_03 *public_key, const Eurydice_arr_ec *randomness)\n{\n  return encapsulate_avx2_80(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 512\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem512PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_avx2_encapsulate(\n  const Eurydice_arr_03 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_80(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair_avx2\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic libcrux_ml_kem_types_MlKemKeyPair_0d\ngenerate_keypair_avx2_b8(const Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_db(randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic libcrux_ml_kem_types_MlKemKeyPair_0d\ngenerate_keypair_b8(const Eurydice_arr_c7 *randomness)\n{\n  return generate_keypair_avx2_b8(randomness);\n}\n\n/**\n Generate ML-KEM 512 Key Pair\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_mlkem512_avx2_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_b8(&randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_avx2\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nstatic bool\nvalidate_private_key_avx2_25(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_85(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nstatic bool\nvalidate_private_key_25(const Eurydice_arr_ab0 *private_key, const Eurydice_arr_d2 *ciphertext)\n{\n  return validate_private_key_avx2_25(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_avx2_validate_private_key(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  return validate_private_key_25(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_only\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_d5(const Eurydice_arr_ab0 *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_37(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_avx2_validate_private_key_only(const Eurydice_arr_ab0 *private_key)\n{\n  return validate_private_key_only_d5(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key_avx2\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic bool validate_public_key_avx2_d5(const Eurydice_arr_03 *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_ce(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic bool validate_public_key_d5(const Eurydice_arr_03 *public_key)\n{\n  return validate_public_key_avx2_d5(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_avx2_validate_public_key(const Eurydice_arr_03 *public_key)\n{\n  return validate_public_key_d5(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate_avx2\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_370(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_d9(key_pair, ciphertext);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic Eurydice_arr_ec\ndecapsulate_370(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  return decapsulate_avx2_370(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 512 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem512KeyPairUnpacked`]\n and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_avx2_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *private_key,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  return decapsulate_370(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate_avx2\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_ab\nencapsulate_avx2_800(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a8(public_key, randomness);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_ab\nencapsulate_800(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  return encapsulate_avx2_800(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 512 (unpacked)\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem512PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_avx2_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_800(public_key, &randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair_avx2\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic void\ngenerate_keypair_avx2_b80(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_db(randomness, out);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic void\ngenerate_keypair_b80(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *out\n)\n{\n  generate_keypair_avx2_b80(randomness, out);\n}\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_b80(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_16();\n  libcrux_ml_kem_mlkem512_avx2_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_avx2_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_16();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7\nlibcrux_ml_kem_mlkem512_avx2_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_16();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.keypair_from_private_key\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_c3(\n  const Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_a4(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_c3(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_4e(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_4e(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_03\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_ce(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_ce(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_ce(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key_avx2\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic void\nunpack_public_key_avx2_25(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic void\nunpack_public_key_25(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  unpack_public_key_avx2_25(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_unpacked_public_key(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  unpack_public_key_25(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem512_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem512_avx2_H\n#define libcrux_mlkem512_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 512\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem512PrivateKey`] and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_avx2_decapsulate(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 512\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem512PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_avx2_encapsulate(\n  const Eurydice_arr_03 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 512 Key Pair\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_mlkem512_avx2_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_avx2_validate_private_key(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_avx2_validate_private_key_only(const Eurydice_arr_ab0 *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_avx2_validate_public_key(const Eurydice_arr_03 *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem512_avx2_H_DEFINED\n#endif /* libcrux_mlkem512_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem512_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem512_portable.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_portable.h\"\n\n/**\n Portable decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.decapsulate\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic Eurydice_arr_ec\ndecapsulate_37(const Eurydice_arr_ab0 *private_key, const Eurydice_arr_d2 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_fd0(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 512\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem512PrivateKey`] and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_portable_decapsulate(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  return decapsulate_37(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.encapsulate\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_ab\nencapsulate_80(const Eurydice_arr_03 *public_key, const Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_990(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 512\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem512PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_portable_encapsulate(\n  const Eurydice_arr_03 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_80(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.generate_keypair\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic libcrux_ml_kem_types_MlKemKeyPair_0d\ngenerate_keypair_b8(const Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_b80(randomness);\n}\n\n/**\n Generate ML-KEM 512 Key Pair\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_mlkem512_portable_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_b8(&randomness);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nstatic KRML_MUSTINLINE bool\nvalidate_private_key_25(const Eurydice_arr_ab0 *private_key, const Eurydice_arr_d2 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_d5(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_portable_validate_private_key(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  return validate_private_key_25(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key_only\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_d5(const Eurydice_arr_ab0 *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_e2(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_portable_validate_private_key_only(const Eurydice_arr_ab0 *private_key)\n{\n  return validate_private_key_only_d5(private_key);\n}\n\n/**\n Public key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_public_key\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE bool validate_public_key_d5(const Eurydice_arr_03 *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_53(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_portable_validate_public_key(const Eurydice_arr_03 *public_key)\n{\n  return validate_public_key_d5(public_key);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.decapsulate\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecapsulate_370(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_0c0(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 512 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem512KeyPairUnpacked`]\n and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_portable_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *private_key,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  return decapsulate_370(private_key, ciphertext);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.encapsulate\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_ab\nencapsulate_800(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a70(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 512 (unpacked)\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem512PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_portable_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_800(public_key, &randomness);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.generate_keypair\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_b80(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_b80(randomness, out);\n}\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_b80(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_66();\n  libcrux_ml_kem_mlkem512_portable_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_portable_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_66();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b\nlibcrux_ml_kem_mlkem512_portable_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_66();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.keypair_from_private_key\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_c3(\n  const Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_71(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_c3(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_a3(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_a3(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_03\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_53(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_53(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_53(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.unpack_public_key\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE void\nunpack_public_key_25(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_e0(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_unpacked_public_key(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *unpacked_public_key\n)\n{\n  unpack_public_key_25(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem512_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem512_portable_H\n#define libcrux_mlkem512_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 512\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem512PrivateKey`] and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_portable_decapsulate(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 512\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem512PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_portable_encapsulate(\n  const Eurydice_arr_03 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 512 Key Pair\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_mlkem512_portable_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_portable_validate_private_key(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_portable_validate_private_key_only(const Eurydice_arr_ab0 *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_portable_validate_public_key(const Eurydice_arr_03 *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem512_portable_H_DEFINED\n#endif /* libcrux_mlkem512_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem768.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem768_H\n#define libcrux_mlkem768_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n#define LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR ((size_t)10U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_RANK ((size_t)3U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_C1_SIZE (LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE * LIBCRUX_ML_KEM_MLKEM768_RANK)\n\n#define LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR ((size_t)4U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_C2_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE (LIBCRUX_ML_KEM_MLKEM768_C1_SIZE + LIBCRUX_ML_KEM_MLKEM768_C2_SIZE)\n\n#define LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE (LIBCRUX_ML_KEM_MLKEM768_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE + (size_t)32U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM768_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_ETA1 ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_ETA1_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM768_ETA1 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_ETA2 ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_ETA2_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM768_ETA2 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_IMPLICIT_REJECTION_HASH_INPUT_SIZE (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE + LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE)\n\ntypedef Eurydice_arr_7d libcrux_ml_kem_mlkem768_MlKem768PrivateKey;\n\ntypedef Eurydice_arr_5f libcrux_ml_kem_mlkem768_MlKem768PublicKey;\n\n#define LIBCRUX_ML_KEM_MLKEM768_RANKED_BYTES_PER_RING_ELEMENT (LIBCRUX_ML_KEM_MLKEM768_RANK * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE + LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE)\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem768_H_DEFINED\n#endif /* libcrux_mlkem768_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem768_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem768_avx2.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_avx2.h\"\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate_avx2\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_19(const Eurydice_arr_7d *private_key, const Eurydice_arr_2b *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_661(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic Eurydice_arr_ec\ndecapsulate_19(const Eurydice_arr_7d *private_key, const Eurydice_arr_2b *ciphertext)\n{\n  return decapsulate_avx2_19(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 768\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem768PrivateKey`] and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_avx2_decapsulate(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  return decapsulate_19(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate_avx2\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_f4\nencapsulate_avx2_26(const Eurydice_arr_5f *public_key, const Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_a11(public_key, randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_f4\nencapsulate_26(const Eurydice_arr_5f *public_key, const Eurydice_arr_ec *randomness)\n{\n  return encapsulate_avx2_26(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 768\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_avx2_encapsulate(\n  const Eurydice_arr_5f *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_26(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair_avx2\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem768_MlKem768KeyPair\ngenerate_keypair_avx2_e9(const Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_db1(randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem768_MlKem768KeyPair\ngenerate_keypair_e9(const Eurydice_arr_c7 *randomness)\n{\n  return generate_keypair_avx2_e9(randomness);\n}\n\n/**\n Generate ML-KEM 768 Key Pair\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_mlkem768_avx2_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_e9(&randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_avx2\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nstatic bool\nvalidate_private_key_avx2_d3(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_d50(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nstatic bool\nvalidate_private_key_d3(const Eurydice_arr_7d *private_key, const Eurydice_arr_2b *ciphertext)\n{\n  return validate_private_key_avx2_d3(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_avx2_validate_private_key(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  return validate_private_key_d3(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_only\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_3b(const Eurydice_arr_7d *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_a4(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_avx2_validate_private_key_only(const Eurydice_arr_7d *private_key)\n{\n  return validate_private_key_only_3b(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key_avx2\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic bool validate_public_key_avx2_3b(const Eurydice_arr_5f *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_79(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic bool validate_public_key_3b(const Eurydice_arr_5f *public_key)\n{\n  return validate_public_key_avx2_3b(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_avx2_validate_public_key(const Eurydice_arr_5f *public_key)\n{\n  return validate_public_key_3b(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate_avx2\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_190(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_d91(key_pair, ciphertext);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic Eurydice_arr_ec\ndecapsulate_190(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  return decapsulate_avx2_190(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 768 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem768KeyPairUnpacked`]\n and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_avx2_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *private_key,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  return decapsulate_190(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate_avx2\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_f4\nencapsulate_avx2_260(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a81(public_key, randomness);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_f4\nencapsulate_260(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  return encapsulate_avx2_260(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 768 (unpacked)\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem768PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_avx2_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_260(public_key, &randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair_avx2\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic void\ngenerate_keypair_avx2_e90(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_db1(randomness, out);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic void\ngenerate_keypair_e90(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *out\n)\n{\n  generate_keypair_avx2_e90(randomness, out);\n}\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_e90(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_e3();\n  libcrux_ml_kem_mlkem768_avx2_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_avx2_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_e3();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_mlkem768_avx2_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_e3();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.keypair_from_private_key\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_71(\n  const Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_3e(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_71(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_d4(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_7d *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_d4(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_79(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_79(key_pair, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_public_key(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *pk\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\n  uu____0 =\n    libcrux_ml_kem_ind_cca_unpacked_clone_d7_e3(libcrux_ml_kem_ind_cca_unpacked_public_key_11_e3(key_pair));\n  pk[0U] = uu____0;\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_79(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key_avx2\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic void\nunpack_public_key_avx2_d3(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a1(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic void\nunpack_public_key_d3(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  unpack_public_key_avx2_d3(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_unpacked_public_key(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  unpack_public_key_d3(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem768_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem768_avx2_H\n#define libcrux_mlkem768_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 768\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem768PrivateKey`] and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_avx2_decapsulate(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 768\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_avx2_encapsulate(\n  const Eurydice_arr_5f *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 768 Key Pair\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_mlkem768_avx2_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_avx2_validate_private_key(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_avx2_validate_private_key_only(const Eurydice_arr_7d *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_avx2_validate_public_key(const Eurydice_arr_5f *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem768_avx2_H_DEFINED\n#endif /* libcrux_mlkem768_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem768_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem768_portable.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_portable.h\"\n\n/**\n Portable decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.decapsulate\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic Eurydice_arr_ec\ndecapsulate_19(const Eurydice_arr_7d *private_key, const Eurydice_arr_2b *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_fd(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 768\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem768PrivateKey`] and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_portable_decapsulate(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  return decapsulate_19(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.encapsulate\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_f4\nencapsulate_26(const Eurydice_arr_5f *public_key, const Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_99(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 768\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_portable_encapsulate(\n  const Eurydice_arr_5f *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_26(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.generate_keypair\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem768_MlKem768KeyPair\ngenerate_keypair_e9(const Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_b8(randomness);\n}\n\n/**\n Generate ML-KEM 768 Key Pair\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_mlkem768_portable_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_e9(&randomness);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nstatic KRML_MUSTINLINE bool\nvalidate_private_key_d3(const Eurydice_arr_7d *private_key, const Eurydice_arr_2b *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_ba(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_portable_validate_private_key(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  return validate_private_key_d3(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key_only\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_3b(const Eurydice_arr_7d *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_52(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_portable_validate_private_key_only(const Eurydice_arr_7d *private_key)\n{\n  return validate_private_key_only_3b(private_key);\n}\n\n/**\n Public key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_public_key\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE bool validate_public_key_3b(const Eurydice_arr_5f *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_b6(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_portable_validate_public_key(const Eurydice_arr_5f *public_key)\n{\n  return validate_public_key_3b(public_key);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.decapsulate\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecapsulate_190(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_0c(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 768 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem768KeyPairUnpacked`]\n and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_portable_unpacked_decapsulate(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *private_key,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  return decapsulate_190(private_key, ciphertext);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.encapsulate\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_f4\nencapsulate_260(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a7(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 768 (unpacked)\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem768PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_portable_unpacked_encapsulate(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_260(public_key, &randomness);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.generate_keypair\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_e90(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_b8(randomness, out);\n}\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_e90(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_68();\n  libcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_portable_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_68();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_mlkem768_portable_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_68();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.keypair_from_private_key\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_71(\n  const Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_01(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_from_private_mut(\n  const Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_71(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_private_key(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_21(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_private_key_mut(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_7d *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_public_key(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_b6(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_public_key_mut(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_b6(key_pair, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_public_key(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *pk\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\n  uu____0 =\n    libcrux_ml_kem_ind_cca_unpacked_clone_d7_68(libcrux_ml_kem_ind_cca_unpacked_public_key_11_68(key_pair));\n  pk[0U] = uu____0;\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_serialized_public_key(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.unpack_public_key\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE void\nunpack_public_key_d3(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_22(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_unpacked_public_key(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key\n)\n{\n  unpack_public_key_d3(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem768_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem768_portable_H\n#define libcrux_mlkem768_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 768\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem768PrivateKey`] and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_portable_decapsulate(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 768\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_portable_encapsulate(\n  const Eurydice_arr_5f *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 768 Key Pair\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_mlkem768_portable_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_portable_validate_private_key(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_portable_validate_private_key_only(const Eurydice_arr_7d *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_portable_validate_public_key(const Eurydice_arr_5f *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem768_portable_H_DEFINED\n#endif /* libcrux_mlkem768_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem_avx2.h\"\n\n#include \"libcrux_sha3_portable.h\"\n#include \"libcrux_sha3_avx2.h\"\n#include \"libcrux_mlkem_portable.h\"\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_portable.h\"\n#include \"internal/libcrux_core.h\"\n\nKRML_MUSTINLINE Eurydice_arr_c7\nlibcrux_ml_kem_hash_functions_avx2_G(Eurydice_borrow_slice_u8 input)\n{\n  Eurydice_arr_c7 digest = { .data = { 0U } };\n  libcrux_sha3_portable_sha512(Eurydice_array_to_slice_mut_17(&digest), input);\n  return digest;\n}\n\nKRML_MUSTINLINE Eurydice_arr_ec\nlibcrux_ml_kem_hash_functions_avx2_H(Eurydice_borrow_slice_u8 input)\n{\n  Eurydice_arr_ec digest = { .data = { 0U } };\n  libcrux_sha3_portable_sha256(Eurydice_array_to_slice_mut_01(&digest), input);\n  return digest;\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_vec_zero(void)\n{\n  return mm256_setzero_si256();\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_ZERO_f5(void)\n{\n  return libcrux_ml_kem_vector_avx2_vec_zero();\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_vec_from_i16_array(Eurydice_borrow_slice_i16 array)\n{\n  return mm256_loadu_si256_i16(array);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_from_i16_array_f5(Eurydice_borrow_slice_i16 array)\n{\n  return libcrux_ml_kem_vector_avx2_vec_from_i16_array(array);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6 libcrux_ml_kem_vector_avx2_vec_to_i16_array(__m256i v)\n{\n  Eurydice_arr_d6 output = { .data = { 0U } };\n  mm256_storeu_si256_i16(Eurydice_array_to_slice_mut_8a(&output), v);\n  return output;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_arr_d6 libcrux_ml_kem_vector_avx2_to_i16_array_f5(__m256i x)\n{\n  return libcrux_ml_kem_vector_avx2_vec_to_i16_array(x);\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_from_bytes(Eurydice_borrow_slice_u8 array)\n{\n  return\n    mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_c8(array,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)32U })));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_from_bytes_f5(Eurydice_borrow_slice_u8 array)\n{\n  return libcrux_ml_kem_vector_avx2_from_bytes(array);\n}\n\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_avx2_to_bytes(__m256i x, Eurydice_mut_borrow_slice_u8 bytes)\n{\n  mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(bytes,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)32U })),\n    x);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_avx2_to_bytes_f5(__m256i x, Eurydice_mut_borrow_slice_u8 bytes)\n{\n  libcrux_ml_kem_vector_avx2_to_bytes(x, bytes);\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_arithmetic_add(__m256i lhs, __m256i rhs)\n{\n  return mm256_add_epi16(lhs, rhs);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_add_f5(__m256i lhs, const __m256i *rhs)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_add(lhs, rhs[0U]);\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_arithmetic_sub(__m256i lhs, __m256i rhs)\n{\n  return mm256_sub_epi16(lhs, rhs);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_sub_f5(__m256i lhs, const __m256i *rhs)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_sub(lhs, rhs[0U]);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_multiply_by_constant(__m256i vector, int16_t constant)\n{\n  __m256i cv = mm256_set1_epi16(constant);\n  return mm256_mullo_epi16(vector, cv);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_multiply_by_constant_f5(__m256i vec, int16_t c)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_multiply_by_constant(vec, c);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_cond_subtract_3329(__m256i vector)\n{\n  __m256i field_modulus = mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i v_minus_field_modulus = mm256_sub_epi16(vector, field_modulus);\n  __m256i sign_mask = mm256_srai_epi16(15, v_minus_field_modulus, __m256i);\n  __m256i conditional_add_field_modulus = mm256_and_si256(sign_mask, field_modulus);\n  return mm256_add_epi16(v_minus_field_modulus, conditional_add_field_modulus);\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_cond_subtract_3329(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_cond_subtract_3329(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_cond_subtract_3329_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_cond_subtract_3329(vector);\n}\n\n/**\n See Section 3.2 of the implementation notes document for an explanation\n of this code.\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_arithmetic_barrett_reduce(__m256i vector)\n{\n  __m256i\n  t0 =\n    mm256_mulhi_epi16(vector,\n      mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_AVX2_ARITHMETIC_BARRETT_MULTIPLIER));\n  __m256i t512 = mm256_set1_epi16(512);\n  __m256i t1 = mm256_add_epi16(t0, t512);\n  __m256i quotient = mm256_srai_epi16(10, t1, __m256i);\n  __m256i\n  quotient_times_field_modulus =\n    mm256_mullo_epi16(quotient,\n      mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n  return mm256_sub_epi16(vector, quotient_times_field_modulus);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_barrett_reduce_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_barrett_reduce(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constant(\n  __m256i vector,\n  int16_t constant\n)\n{\n  __m256i vec_constant = mm256_set1_epi16(constant);\n  __m256i value_low = mm256_mullo_epi16(vector, vec_constant);\n  __m256i\n  k =\n    mm256_mullo_epi16(value_low,\n      mm256_set1_epi16((int16_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));\n  __m256i modulus = mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i k_times_modulus = mm256_mulhi_epi16(k, modulus);\n  __m256i value_high = mm256_mulhi_epi16(vector, vec_constant);\n  return mm256_sub_epi16(value_high, k_times_modulus);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(__m256i vector, int16_t constant)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constant(vector, constant);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_bitwise_and_with_constant(\n  __m256i vector,\n  int16_t constant\n)\n{\n  __m256i cv = mm256_set1_epi16(constant);\n  return mm256_and_si256(vector, cv);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.arithmetic.shift_right\nwith const generics\n- SHIFT_BY= 15\n*/\nstatic KRML_MUSTINLINE __m256i shift_right_ef(__m256i vector)\n{\n  return mm256_srai_epi16(15, vector, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_to_unsigned_representative(__m256i a)\n{\n  __m256i t = shift_right_ef(a);\n  __m256i\n  fm =\n    libcrux_ml_kem_vector_avx2_arithmetic_bitwise_and_with_constant(t,\n      LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  return libcrux_ml_kem_vector_avx2_arithmetic_add(a, fm);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_to_unsigned_representative_f5(__m256i a)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_to_unsigned_representative(a);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_compress_compress_message_coefficient(__m256i vector)\n{\n  __m256i\n  field_modulus_halved = mm256_set1_epi16((LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 2);\n  __m256i\n  field_modulus_quartered =\n    mm256_set1_epi16((LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 4);\n  __m256i shifted = mm256_sub_epi16(field_modulus_halved, vector);\n  __m256i mask = mm256_srai_epi16(15, shifted, __m256i);\n  __m256i shifted_to_positive = mm256_xor_si256(mask, shifted);\n  __m256i\n  shifted_to_positive_in_range = mm256_sub_epi16(shifted_to_positive, field_modulus_quartered);\n  return mm256_srli_epi16(15, shifted_to_positive_in_range, __m256i);\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_compress_1(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_compress_compress_message_coefficient(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_compress_1_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_compress_1(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(__m256i lhs, __m256i rhs)\n{\n  __m256i prod02 = mm256_mul_epu32(lhs, rhs);\n  __m256i\n  prod13 =\n    mm256_mul_epu32(mm256_shuffle_epi32(245, lhs, __m256i),\n      mm256_shuffle_epi32(245, rhs, __m256i));\n  return\n    mm256_unpackhi_epi64(mm256_unpacklo_epi32(prod02, prod13),\n      mm256_unpackhi_epi32(prod02, prod13));\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_compress_decompress_1(__m256i a)\n{\n  __m256i z = mm256_setzero_si256();\n  __m256i s = libcrux_ml_kem_vector_avx2_arithmetic_sub(z, a);\n  return libcrux_ml_kem_vector_avx2_arithmetic_bitwise_and_with_constant(s, 1665);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_decompress_1_f5(__m256i a)\n{\n  return libcrux_ml_kem_vector_avx2_compress_decompress_1(a);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(\n  __m256i vec,\n  __m256i constants\n)\n{\n  __m256i value_low = mm256_mullo_epi16(vec, constants);\n  __m256i\n  k =\n    mm256_mullo_epi16(value_low,\n      mm256_set1_epi16((int16_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));\n  __m256i modulus = mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i k_times_modulus = mm256_mulhi_epi16(k, modulus);\n  __m256i value_high = mm256_mulhi_epi16(vec, constants);\n  return mm256_sub_epi16(value_high, k_times_modulus);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  __m256i\n  zetas =\n    mm256_set_epi16(-zeta3,\n      -zeta3,\n      zeta3,\n      zeta3,\n      -zeta2,\n      -zeta2,\n      zeta2,\n      zeta2,\n      -zeta1,\n      -zeta1,\n      zeta1,\n      zeta1,\n      -zeta0,\n      -zeta0,\n      zeta0,\n      zeta0);\n  __m256i rhs = mm256_shuffle_epi32(245, vector, __m256i);\n  __m256i\n  rhs0 = libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(rhs, zetas);\n  __m256i lhs = mm256_shuffle_epi32(160, vector, __m256i);\n  return mm256_add_epi16(lhs, rhs0);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_ntt_layer_1_step(vector, zeta0, zeta1, zeta2, zeta3);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_1_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_layer_1_step(vector, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1)\n{\n  __m256i\n  zetas =\n    mm256_set_epi16(-zeta1,\n      -zeta1,\n      -zeta1,\n      -zeta1,\n      zeta1,\n      zeta1,\n      zeta1,\n      zeta1,\n      -zeta0,\n      -zeta0,\n      -zeta0,\n      -zeta0,\n      zeta0,\n      zeta0,\n      zeta0,\n      zeta0);\n  __m256i rhs = mm256_shuffle_epi32(238, vector, __m256i);\n  __m256i\n  rhs0 = libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(rhs, zetas);\n  __m256i lhs = mm256_shuffle_epi32(68, vector, __m256i);\n  return mm256_add_epi16(lhs, rhs0);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_ntt_layer_2_step(vector, zeta0, zeta1);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_2_step_f5(__m256i vector, int16_t zeta0, int16_t zeta1)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_layer_2_step(vector, zeta0, zeta1);\n}\n\nKRML_MUSTINLINE __m128i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_m128i_by_constants(\n  __m128i vec,\n  __m128i constants\n)\n{\n  __m128i value_low = mm_mullo_epi16(vec, constants);\n  __m128i\n  k =\n    mm_mullo_epi16(value_low,\n      mm_set1_epi16((int16_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));\n  __m128i modulus = mm_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m128i k_times_modulus = mm_mulhi_epi16(k, modulus);\n  __m128i value_high = mm_mulhi_epi16(vec, constants);\n  return mm_sub_epi16(value_high, k_times_modulus);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_layer_3_step(__m256i vector, int16_t zeta)\n{\n  __m128i rhs = mm256_extracti128_si256(1, vector, __m128i);\n  __m128i\n  rhs0 =\n    libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_m128i_by_constants(rhs,\n      mm_set1_epi16(zeta));\n  __m128i lhs = mm256_castsi256_si128(vector);\n  __m128i lower_coefficients = mm_add_epi16(lhs, rhs0);\n  __m128i upper_coefficients = mm_sub_epi16(lhs, rhs0);\n  __m256i combined = mm256_castsi128_si256(lower_coefficients);\n  return mm256_inserti128_si256(1, combined, upper_coefficients, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_3_step(__m256i vector, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_ntt_layer_3_step(vector, zeta);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_3_step_f5(__m256i vector, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_layer_3_step(vector, zeta);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  __m256i lhs = mm256_shuffle_epi32(245, vector, __m256i);\n  __m256i rhs = mm256_shuffle_epi32(160, vector, __m256i);\n  __m256i\n  rhs0 =\n    mm256_mullo_epi16(rhs,\n      mm256_set_epi16(-1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1));\n  __m256i sum0 = mm256_add_epi16(lhs, rhs0);\n  __m256i\n  sum_times_zetas =\n    libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(sum0,\n      mm256_set_epi16(zeta3,\n        zeta3,\n        0,\n        0,\n        zeta2,\n        zeta2,\n        0,\n        0,\n        zeta1,\n        zeta1,\n        0,\n        0,\n        zeta0,\n        zeta0,\n        0,\n        0));\n  __m256i sum = libcrux_ml_kem_vector_avx2_arithmetic_barrett_reduce(sum0);\n  return mm256_blend_epi16(204, sum, sum_times_zetas, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_1_step(vector, zeta0, zeta1, zeta2, zeta3);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step(vector, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_2_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  __m256i lhs = mm256_permute4x64_epi64(245, vector, __m256i);\n  __m256i rhs = mm256_permute4x64_epi64(160, vector, __m256i);\n  __m256i\n  rhs0 =\n    mm256_mullo_epi16(rhs,\n      mm256_set_epi16(-1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1));\n  __m256i sum = mm256_add_epi16(lhs, rhs0);\n  __m256i\n  sum_times_zetas =\n    libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(sum,\n      mm256_set_epi16(zeta1,\n        zeta1,\n        zeta1,\n        zeta1,\n        0,\n        0,\n        0,\n        0,\n        zeta0,\n        zeta0,\n        zeta0,\n        zeta0,\n        0,\n        0,\n        0,\n        0));\n  return mm256_blend_epi16(240, sum, sum_times_zetas, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_2_step(vector, zeta0, zeta1);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  return libcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step(vector, zeta0, zeta1);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_3_step(__m256i vector, int16_t zeta)\n{\n  __m128i lhs = mm256_extracti128_si256(1, vector, __m128i);\n  __m128i rhs = mm256_castsi256_si128(vector);\n  __m128i lower_coefficients = mm_add_epi16(lhs, rhs);\n  __m128i upper_coefficients = mm_sub_epi16(lhs, rhs);\n  __m128i\n  upper_coefficients0 =\n    libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_m128i_by_constants(upper_coefficients,\n      mm_set1_epi16(zeta));\n  __m256i combined = mm256_castsi128_si256(lower_coefficients);\n  return mm256_inserti128_si256(1, combined, upper_coefficients0, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step(__m256i vector, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_3_step(vector, zeta);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step_f5(__m256i vector, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step(vector, zeta);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_reduce_i32s(__m256i vec)\n{\n  __m256i\n  k =\n    mm256_mullo_epi16(vec,\n      mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));\n  __m256i\n  k_times_modulus =\n    mm256_mulhi_epi16(k,\n      mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n  __m256i value_high = mm256_srli_epi32(16, vec, __m256i);\n  __m256i result = mm256_sub_epi16(value_high, k_times_modulus);\n  __m256i result0 = mm256_slli_epi32(16, result, __m256i);\n  return mm256_srai_epi32(16, result0, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_multiply(\n  __m256i lhs,\n  __m256i rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  __m256i\n  shuffle_with =\n    mm256_set_epi8(15,\n      14,\n      11,\n      10,\n      7,\n      6,\n      3,\n      2,\n      13,\n      12,\n      9,\n      8,\n      5,\n      4,\n      1,\n      0,\n      15,\n      14,\n      11,\n      10,\n      7,\n      6,\n      3,\n      2,\n      13,\n      12,\n      9,\n      8,\n      5,\n      4,\n      1,\n      0);\n  __m256i lhs_shuffled = mm256_shuffle_epi8(lhs, shuffle_with);\n  __m256i lhs_shuffled0 = mm256_permute4x64_epi64(216, lhs_shuffled, __m256i);\n  __m128i lhs_evens = mm256_castsi256_si128(lhs_shuffled0);\n  __m256i lhs_evens0 = mm256_cvtepi16_epi32(lhs_evens);\n  __m128i lhs_odds = mm256_extracti128_si256(1, lhs_shuffled0, __m128i);\n  __m256i lhs_odds0 = mm256_cvtepi16_epi32(lhs_odds);\n  __m256i rhs_shuffled = mm256_shuffle_epi8(rhs, shuffle_with);\n  __m256i rhs_shuffled0 = mm256_permute4x64_epi64(216, rhs_shuffled, __m256i);\n  __m128i rhs_evens = mm256_castsi256_si128(rhs_shuffled0);\n  __m256i rhs_evens0 = mm256_cvtepi16_epi32(rhs_evens);\n  __m128i rhs_odds = mm256_extracti128_si256(1, rhs_shuffled0, __m128i);\n  __m256i rhs_odds0 = mm256_cvtepi16_epi32(rhs_odds);\n  __m256i left = mm256_mullo_epi32(lhs_evens0, rhs_evens0);\n  __m256i right = mm256_mullo_epi32(lhs_odds0, rhs_odds0);\n  __m256i right0 = libcrux_ml_kem_vector_avx2_arithmetic_montgomery_reduce_i32s(right);\n  __m256i\n  right1 =\n    mm256_mullo_epi32(right0,\n      mm256_set_epi32(-(int32_t)zeta3,\n        (int32_t)zeta3,\n        -(int32_t)zeta2,\n        (int32_t)zeta2,\n        -(int32_t)zeta1,\n        (int32_t)zeta1,\n        -(int32_t)zeta0,\n        (int32_t)zeta0));\n  __m256i products_left = mm256_add_epi32(left, right1);\n  __m256i\n  products_left0 = libcrux_ml_kem_vector_avx2_arithmetic_montgomery_reduce_i32s(products_left);\n  __m256i\n  rhs_adjacent_swapped =\n    mm256_shuffle_epi8(rhs,\n      mm256_set_epi8(13,\n        12,\n        15,\n        14,\n        9,\n        8,\n        11,\n        10,\n        5,\n        4,\n        7,\n        6,\n        1,\n        0,\n        3,\n        2,\n        13,\n        12,\n        15,\n        14,\n        9,\n        8,\n        11,\n        10,\n        5,\n        4,\n        7,\n        6,\n        1,\n        0,\n        3,\n        2));\n  __m256i products_right = mm256_madd_epi16(lhs, rhs_adjacent_swapped);\n  __m256i\n  products_right0 = libcrux_ml_kem_vector_avx2_arithmetic_montgomery_reduce_i32s(products_right);\n  __m256i products_right1 = mm256_slli_epi32(16, products_right0, __m256i);\n  return mm256_blend_epi16(170, products_left0, products_right1, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_multiply(\n  const __m256i *lhs,\n  const __m256i *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return\n    libcrux_ml_kem_vector_avx2_ntt_ntt_multiply(lhs[0U],\n      rhs[0U],\n      zeta0,\n      zeta1,\n      zeta2,\n      zeta3);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_multiply_f5(\n  const __m256i *lhs,\n  const __m256i *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_multiply(lhs, rhs, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x2\nlibcrux_ml_kem_vector_avx2_serialize_serialize_1(__m256i vector)\n{\n  __m256i lsb_to_msb = mm256_slli_epi16(15, vector, __m256i);\n  __m128i low_msbs = mm256_castsi256_si128(lsb_to_msb);\n  __m128i high_msbs = mm256_extracti128_si256(1, lsb_to_msb, __m128i);\n  __m128i msbs = mm_packs_epi16(low_msbs, high_msbs);\n  int32_t bits_packed = mm_movemask_epi8(msbs);\n  Eurydice_array_u8x2\n  result = { .data = { (uint8_t)bits_packed, (uint8_t)(bits_packed >> 8U) } };\n  return result;\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x2 libcrux_ml_kem_vector_avx2_serialize_1(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_1(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_array_u8x2 libcrux_ml_kem_vector_avx2_serialize_1_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_1(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_i16s(int16_t a, int16_t b)\n{\n  __m256i coefficients = mm256_set_epi16(b, b, b, b, b, b, b, b, a, a, a, a, a, a, a, a);\n  __m256i\n  coefficients_in_msb =\n    mm256_mullo_epi16(coefficients,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 8U),\n        (int16_t)((uint32_t)1 << 9U),\n        (int16_t)((uint32_t)1 << 10U),\n        (int16_t)((uint32_t)1 << 11U),\n        (int16_t)((uint32_t)1 << 12U),\n        (int16_t)((uint32_t)1 << 13U),\n        (int16_t)((uint32_t)1 << 14U),\n        -32768,\n        (int16_t)((uint32_t)1 << 8U),\n        (int16_t)((uint32_t)1 << 9U),\n        (int16_t)((uint32_t)1 << 10U),\n        (int16_t)((uint32_t)1 << 11U),\n        (int16_t)((uint32_t)1 << 12U),\n        (int16_t)((uint32_t)1 << 13U),\n        (int16_t)((uint32_t)1 << 14U),\n        -32768));\n  return mm256_srli_epi16(15, coefficients_in_msb, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_u8s(uint8_t a, uint8_t b)\n{\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_i16s((int16_t)a,\n      (int16_t)b);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_1(Eurydice_borrow_slice_u8 bytes)\n{\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_u8s(bytes.ptr[0U],\n      bytes.ptr[1U]);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_1(Eurydice_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_1(bytes);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_1_f5(Eurydice_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_deserialize_1(bytes);\n}\n\n/**\n `mm256_concat_pairs_n(n, x)` is then a sequence of 32 bits packets\n of the shape `0b0…0b₁…bₙa₁…aₙ`, if `x` is a sequence of pairs of\n 16 bits, of the shape `(0b0…0a₁…aₙ, 0b0…0b₁…bₙ)` (where the last\n `n` bits are non-zero).\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_mm256_concat_pairs_n(uint8_t n, __m256i x)\n{\n  int16_t n0 = (int16_t)((uint32_t)1 << (uint32_t)n);\n  return\n    mm256_madd_epi16(x,\n      mm256_set_epi16(n0, 1, n0, 1, n0, 1, n0, 1, n0, 1, n0, 1, n0, 1, n0, 1));\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x8\nlibcrux_ml_kem_vector_avx2_serialize_serialize_4(__m256i vector)\n{\n  Eurydice_arr_b2 serialized = { .data = { 0U } };\n  __m256i\n  adjacent_2_combined = libcrux_ml_kem_vector_avx2_serialize_mm256_concat_pairs_n(4U, vector);\n  __m256i\n  adjacent_8_combined =\n    mm256_shuffle_epi8(adjacent_2_combined,\n      mm256_set_epi8(-1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        12,\n        8,\n        4,\n        0,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        12,\n        8,\n        4,\n        0));\n  __m256i\n  combined =\n    mm256_permutevar8x32_epi32(adjacent_8_combined,\n      mm256_set_epi32(0, 0, 0, 0, 0, 0, 4, 0));\n  __m128i combined0 = mm256_castsi256_si128(combined);\n  mm_storeu_bytes_si128(Eurydice_array_to_slice_mut_29(&serialized), combined0);\n  Eurydice_array_u8x8 arr;\n  memcpy(arr.data,\n    Eurydice_array_to_subslice_shared_d40(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })).ptr,\n    (size_t)8U * sizeof (uint8_t));\n  return\n    core_result_unwrap_26_e0((\n        KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x8 libcrux_ml_kem_vector_avx2_serialize_4(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_4(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_array_u8x8 libcrux_ml_kem_vector_avx2_serialize_4_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_4(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_i16s(\n  int16_t b0,\n  int16_t b1,\n  int16_t b2,\n  int16_t b3,\n  int16_t b4,\n  int16_t b5,\n  int16_t b6,\n  int16_t b7\n)\n{\n  __m256i\n  coefficients = mm256_set_epi16(b7, b7, b6, b6, b5, b5, b4, b4, b3, b3, b2, b2, b1, b1, b0, b0);\n  __m256i\n  coefficients_in_msb =\n    mm256_mullo_epi16(coefficients,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U)));\n  __m256i coefficients_in_lsb = mm256_srli_epi16(4, coefficients_in_msb, __m256i);\n  return\n    mm256_and_si256(coefficients_in_lsb,\n      mm256_set1_epi16((int16_t)((uint32_t)1 << 4U) - 1));\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_u8s(\n  uint8_t b0,\n  uint8_t b1,\n  uint8_t b2,\n  uint8_t b3,\n  uint8_t b4,\n  uint8_t b5,\n  uint8_t b6,\n  uint8_t b7\n)\n{\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_i16s((int16_t)b0,\n      (int16_t)b1,\n      (int16_t)b2,\n      (int16_t)b3,\n      (int16_t)b4,\n      (int16_t)b5,\n      (int16_t)b6,\n      (int16_t)b7);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_4(Eurydice_borrow_slice_u8 bytes)\n{\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_u8s(bytes.ptr[0U],\n      bytes.ptr[1U],\n      bytes.ptr[2U],\n      bytes.ptr[3U],\n      bytes.ptr[4U],\n      bytes.ptr[5U],\n      bytes.ptr[6U],\n      bytes.ptr[7U]);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_4(Eurydice_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_4(bytes);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_4_f5(Eurydice_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_deserialize_4(bytes);\n}\n\nKRML_MUSTINLINE Eurydice_arr_6d\nlibcrux_ml_kem_vector_avx2_serialize_serialize_5(__m256i vector)\n{\n  Eurydice_arr_ec serialized = { .data = { 0U } };\n  __m256i\n  adjacent_2_combined =\n    mm256_madd_epi16(vector,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1));\n  __m256i\n  adjacent_4_combined =\n    mm256_sllv_epi32(adjacent_2_combined,\n      mm256_set_epi32(0, 22, 0, 22, 0, 22, 0, 22));\n  __m256i adjacent_4_combined0 = mm256_srli_epi64(22, adjacent_4_combined, __m256i);\n  __m256i adjacent_8_combined = mm256_shuffle_epi32(8, adjacent_4_combined0, __m256i);\n  __m256i\n  adjacent_8_combined0 =\n    mm256_sllv_epi32(adjacent_8_combined,\n      mm256_set_epi32(0, 0, 0, 12, 0, 0, 0, 12));\n  __m256i adjacent_8_combined1 = mm256_srli_epi64(12, adjacent_8_combined0, __m256i);\n  __m128i lower_8 = mm256_castsi256_si128(adjacent_8_combined1);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })),\n    lower_8);\n  __m128i upper_8 = mm256_extracti128_si256(1, adjacent_8_combined1, __m128i);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)5U, .end = (size_t)21U })),\n    upper_8);\n  Eurydice_arr_6d arr;\n  memcpy(arr.data,\n    Eurydice_array_to_subslice_shared_d4(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)10U })).ptr,\n    (size_t)10U * sizeof (uint8_t));\n  return\n    core_result_unwrap_26_63((\n        KRML_CLITERAL(core_result_Result_80){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_arr_6d libcrux_ml_kem_vector_avx2_serialize_5_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_5(vector);\n}\n\n/**\n We cannot model `mm256_inserti128_si256` on its own: it produces a\n Vec256 where the upper 128 bits are undefined. Thus\n `mm256_inserti128_si256` is not pure.\n\n Luckily, we always call `mm256_castsi128_si256` right after\n `mm256_inserti128_si256`: this composition sets the upper bits,\n making the whole computation pure again.\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_mm256_si256_from_two_si128(__m128i lower, __m128i upper)\n{\n  return mm256_inserti128_si256(1, mm256_castsi128_si256(lower), upper, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_5(Eurydice_borrow_slice_u8 bytes)\n{\n  __m128i\n  coefficients =\n    mm_set_epi8((int8_t)bytes.ptr[9U],\n      (int8_t)bytes.ptr[8U],\n      (int8_t)bytes.ptr[8U],\n      (int8_t)bytes.ptr[7U],\n      (int8_t)bytes.ptr[7U],\n      (int8_t)bytes.ptr[6U],\n      (int8_t)bytes.ptr[6U],\n      (int8_t)bytes.ptr[5U],\n      (int8_t)bytes.ptr[4U],\n      (int8_t)bytes.ptr[3U],\n      (int8_t)bytes.ptr[3U],\n      (int8_t)bytes.ptr[2U],\n      (int8_t)bytes.ptr[2U],\n      (int8_t)bytes.ptr[1U],\n      (int8_t)bytes.ptr[1U],\n      (int8_t)bytes.ptr[0U]);\n  __m256i\n  coefficients_loaded =\n    libcrux_ml_kem_vector_avx2_serialize_mm256_si256_from_two_si128(coefficients,\n      coefficients);\n  __m256i\n  coefficients0 =\n    mm256_shuffle_epi8(coefficients_loaded,\n      mm256_set_epi8(15,\n        14,\n        15,\n        14,\n        13,\n        12,\n        13,\n        12,\n        11,\n        10,\n        11,\n        10,\n        9,\n        8,\n        9,\n        8,\n        7,\n        6,\n        7,\n        6,\n        5,\n        4,\n        5,\n        4,\n        3,\n        2,\n        3,\n        2,\n        1,\n        0,\n        1,\n        0));\n  __m256i\n  coefficients1 =\n    mm256_mullo_epi16(coefficients0,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 5U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 7U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 9U),\n        (int16_t)((uint32_t)1 << 6U),\n        (int16_t)((uint32_t)1 << 11U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 5U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 7U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 9U),\n        (int16_t)((uint32_t)1 << 6U),\n        (int16_t)((uint32_t)1 << 11U)));\n  return mm256_srli_epi16(11, coefficients1, __m256i);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_5_f5(Eurydice_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_5(bytes);\n}\n\ncore_core_arch_x86___m128i_x2\nlibcrux_ml_kem_vector_avx2_serialize_serialize_10_serialize_10_vec(__m256i vector)\n{\n  __m256i\n  adjacent_2_combined = libcrux_ml_kem_vector_avx2_serialize_mm256_concat_pairs_n(10U, vector);\n  __m256i\n  adjacent_4_combined =\n    mm256_sllv_epi32(adjacent_2_combined,\n      mm256_set_epi32(0, 12, 0, 12, 0, 12, 0, 12));\n  __m256i adjacent_4_combined0 = mm256_srli_epi64(12, adjacent_4_combined, __m256i);\n  __m256i\n  adjacent_8_combined =\n    mm256_shuffle_epi8(adjacent_4_combined0,\n      mm256_set_epi8(-1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        12,\n        11,\n        10,\n        9,\n        8,\n        4,\n        3,\n        2,\n        1,\n        0,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        12,\n        11,\n        10,\n        9,\n        8,\n        4,\n        3,\n        2,\n        1,\n        0));\n  __m128i lower_8 = mm256_castsi256_si128(adjacent_8_combined);\n  __m128i upper_8 = mm256_extracti128_si256(1, adjacent_8_combined, __m128i);\n  return (KRML_CLITERAL(core_core_arch_x86___m128i_x2){ .fst = lower_8, .snd = upper_8 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_fc\nlibcrux_ml_kem_vector_avx2_serialize_serialize_10(__m256i vector)\n{\n  core_core_arch_x86___m128i_x2\n  uu____0 = libcrux_ml_kem_vector_avx2_serialize_serialize_10_serialize_10_vec(vector);\n  __m128i lower_8 = uu____0.fst;\n  __m128i upper_8 = uu____0.snd;\n  Eurydice_arr_ec serialized = { .data = { 0U } };\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })),\n    lower_8);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)10U, .end = (size_t)26U })),\n    upper_8);\n  Eurydice_arr_fc arr;\n  memcpy(arr.data,\n    Eurydice_array_to_subslice_shared_d4(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)20U })).ptr,\n    (size_t)20U * sizeof (uint8_t));\n  return\n    core_result_unwrap_26_7d((\n        KRML_CLITERAL(core_result_Result_83){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n}\n\nKRML_MUSTINLINE Eurydice_arr_fc libcrux_ml_kem_vector_avx2_serialize_10(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_10(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_arr_fc libcrux_ml_kem_vector_avx2_serialize_10_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_10(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_10_deserialize_10_vec(\n  __m128i lower_coefficients0,\n  __m128i upper_coefficients0\n)\n{\n  __m128i\n  lower_coefficients =\n    mm_shuffle_epi8(lower_coefficients0,\n      mm_set_epi8(9, 8, 8, 7, 7, 6, 6, 5, 4, 3, 3, 2, 2, 1, 1, 0));\n  __m128i\n  upper_coefficients =\n    mm_shuffle_epi8(upper_coefficients0,\n      mm_set_epi8(15, 14, 14, 13, 13, 12, 12, 11, 10, 9, 9, 8, 8, 7, 7, 6));\n  __m256i\n  coefficients =\n    libcrux_ml_kem_vector_avx2_serialize_mm256_si256_from_two_si128(lower_coefficients,\n      upper_coefficients);\n  __m256i\n  coefficients0 =\n    mm256_mullo_epi16(coefficients,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 6U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 6U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 6U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 6U)));\n  __m256i coefficients1 = mm256_srli_epi16(6, coefficients0, __m256i);\n  return mm256_and_si256(coefficients1, mm256_set1_epi16((int16_t)((uint32_t)1 << 10U) - 1));\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_10(Eurydice_borrow_slice_u8 bytes)\n{\n  Eurydice_borrow_slice_u8\n  lower_coefficients =\n    Eurydice_slice_subslice_shared_c8(bytes,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U }));\n  Eurydice_borrow_slice_u8\n  upper_coefficients =\n    Eurydice_slice_subslice_shared_c8(bytes,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)20U }));\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_10_deserialize_10_vec(mm_loadu_si128(lower_coefficients),\n      mm_loadu_si128(upper_coefficients));\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_10(Eurydice_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_10(bytes);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_10_f5(Eurydice_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_deserialize_10(bytes);\n}\n\nKRML_MUSTINLINE Eurydice_arr_80\nlibcrux_ml_kem_vector_avx2_serialize_serialize_11(__m256i vector)\n{\n  Eurydice_arr_d6 array = { .data = { 0U } };\n  mm256_storeu_si256_i16(Eurydice_array_to_slice_mut_8a(&array), vector);\n  Eurydice_arr_d6\n  input =\n    libcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_array_to_slice_shared_8a(&array));\n  return libcrux_ml_kem_vector_portable_serialize_11_b8(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_arr_80 libcrux_ml_kem_vector_avx2_serialize_11_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_11(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_11(Eurydice_borrow_slice_u8 bytes)\n{\n  Eurydice_arr_d6 output = libcrux_ml_kem_vector_portable_deserialize_11_b8(bytes);\n  Eurydice_arr_d6 array = libcrux_ml_kem_vector_portable_to_i16_array_b8(output);\n  return mm256_loadu_si256_i16(Eurydice_array_to_slice_shared_8a(&array));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_11_f5(Eurydice_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_11(bytes);\n}\n\nKRML_MUSTINLINE core_core_arch_x86___m128i_x2\nlibcrux_ml_kem_vector_avx2_serialize_serialize_12_serialize_12_vec(__m256i vector)\n{\n  __m256i\n  adjacent_2_combined = libcrux_ml_kem_vector_avx2_serialize_mm256_concat_pairs_n(12U, vector);\n  __m256i\n  adjacent_4_combined =\n    mm256_sllv_epi32(adjacent_2_combined,\n      mm256_set_epi32(0, 8, 0, 8, 0, 8, 0, 8));\n  __m256i adjacent_4_combined0 = mm256_srli_epi64(8, adjacent_4_combined, __m256i);\n  __m256i\n  adjacent_8_combined =\n    mm256_shuffle_epi8(adjacent_4_combined0,\n      mm256_set_epi8(-1,\n        -1,\n        -1,\n        -1,\n        13,\n        12,\n        11,\n        10,\n        9,\n        8,\n        5,\n        4,\n        3,\n        2,\n        1,\n        0,\n        -1,\n        -1,\n        -1,\n        -1,\n        13,\n        12,\n        11,\n        10,\n        9,\n        8,\n        5,\n        4,\n        3,\n        2,\n        1,\n        0));\n  __m128i lower_8 = mm256_castsi256_si128(adjacent_8_combined);\n  __m128i upper_8 = mm256_extracti128_si256(1, adjacent_8_combined, __m128i);\n  return (KRML_CLITERAL(core_core_arch_x86___m128i_x2){ .fst = lower_8, .snd = upper_8 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_94\nlibcrux_ml_kem_vector_avx2_serialize_serialize_12(__m256i vector)\n{\n  Eurydice_arr_ec serialized = { .data = { 0U } };\n  core_core_arch_x86___m128i_x2\n  uu____0 = libcrux_ml_kem_vector_avx2_serialize_serialize_12_serialize_12_vec(vector);\n  __m128i lower_8 = uu____0.fst;\n  __m128i upper_8 = uu____0.snd;\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })),\n    lower_8);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)28U })),\n    upper_8);\n  Eurydice_arr_94 arr;\n  memcpy(arr.data,\n    Eurydice_array_to_subslice_shared_d4(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)24U })).ptr,\n    (size_t)24U * sizeof (uint8_t));\n  return\n    core_result_unwrap_26_78((\n        KRML_CLITERAL(core_result_Result_57){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n}\n\nKRML_MUSTINLINE Eurydice_arr_94 libcrux_ml_kem_vector_avx2_serialize_12(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_12(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_arr_94 libcrux_ml_kem_vector_avx2_serialize_12_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_12(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_12_deserialize_12_vec(\n  __m128i lower_coefficients0,\n  __m128i upper_coefficients0\n)\n{\n  __m128i\n  lower_coefficients =\n    mm_shuffle_epi8(lower_coefficients0,\n      mm_set_epi8(11, 10, 10, 9, 8, 7, 7, 6, 5, 4, 4, 3, 2, 1, 1, 0));\n  __m128i\n  upper_coefficients =\n    mm_shuffle_epi8(upper_coefficients0,\n      mm_set_epi8(15, 14, 14, 13, 12, 11, 11, 10, 9, 8, 8, 7, 6, 5, 5, 4));\n  __m256i\n  coefficients =\n    libcrux_ml_kem_vector_avx2_serialize_mm256_si256_from_two_si128(lower_coefficients,\n      upper_coefficients);\n  __m256i\n  coefficients0 =\n    mm256_mullo_epi16(coefficients,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U)));\n  __m256i coefficients1 = mm256_srli_epi16(4, coefficients0, __m256i);\n  return mm256_and_si256(coefficients1, mm256_set1_epi16((int16_t)((uint32_t)1 << 12U) - 1));\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_12(Eurydice_borrow_slice_u8 bytes)\n{\n  __m128i\n  lower_coefficients =\n    mm_loadu_si128(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })));\n  __m128i\n  upper_coefficients =\n    mm_loadu_si128(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)24U })));\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_12_deserialize_12_vec(lower_coefficients,\n      upper_coefficients);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_12(Eurydice_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_12(bytes);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_12_f5(Eurydice_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_deserialize_12(bytes);\n}\n\nKRML_MUSTINLINE size_t\nlibcrux_ml_kem_vector_avx2_sampling_rejection_sample(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_i16 output\n)\n{\n  __m256i field_modulus = mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i potential_coefficients = libcrux_ml_kem_vector_avx2_serialize_deserialize_12(input);\n  __m256i compare_with_field_modulus = mm256_cmpgt_epi16(field_modulus, potential_coefficients);\n  Eurydice_array_u8x2\n  good = libcrux_ml_kem_vector_avx2_serialize_serialize_1(compare_with_field_modulus);\n  Eurydice_arr_b2\n  lower_shuffles =\n    LIBCRUX_ML_KEM_VECTOR_REJ_SAMPLE_TABLE_REJECTION_SAMPLE_SHUFFLE_TABLE.data[(size_t)good.data[0U]];\n  __m128i lower_shuffles0 = mm_loadu_si128(Eurydice_array_to_slice_shared_29(&lower_shuffles));\n  __m128i lower_coefficients = mm256_castsi256_si128(potential_coefficients);\n  __m128i lower_coefficients0 = mm_shuffle_epi8(lower_coefficients, lower_shuffles0);\n  mm_storeu_si128(output, lower_coefficients0);\n  size_t sampled_count = (size_t)core_num__u8__count_ones(good.data[0U]);\n  Eurydice_arr_b2\n  upper_shuffles =\n    LIBCRUX_ML_KEM_VECTOR_REJ_SAMPLE_TABLE_REJECTION_SAMPLE_SHUFFLE_TABLE.data[(size_t)good.data[1U]];\n  __m128i upper_shuffles0 = mm_loadu_si128(Eurydice_array_to_slice_shared_29(&upper_shuffles));\n  __m128i upper_coefficients = mm256_extracti128_si256(1, potential_coefficients, __m128i);\n  __m128i upper_coefficients0 = mm_shuffle_epi8(upper_coefficients, upper_shuffles0);\n  mm_storeu_si128(Eurydice_slice_subslice_mut_a6(output,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = sampled_count,\n          .end = sampled_count + (size_t)8U\n        }\n      )),\n    upper_coefficients0);\n  size_t uu____0 = sampled_count;\n  return uu____0 + (size_t)core_num__u8__count_ones(good.data[1U]);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE size_t\nlibcrux_ml_kem_vector_avx2_rej_sample_f5(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_i16 output\n)\n{\n  return libcrux_ml_kem_vector_avx2_sampling_rejection_sample(input, output);\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\ninline __m256i libcrux_ml_kem_vector_avx2_clone_fd(const __m256i *self)\n{\n  return self[0U];\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ZERO_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic Eurydice_arr_13 ZERO_d6_84(void)\n{\n  Eurydice_arr_13 lit;\n  __m256i repeat_expression[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_kem_vector_avx2_ZERO_f5(););\n  memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (__m256i));\n  return lit;\n}\n\n/**\n Only use with public values.\n\n This MUST NOT be used with secret inputs, like its caller `deserialize_ring_elements_reduced`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_reduced_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_to_reduced_ring_element_84(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)24U,\n            .end = i0 * (size_t)24U + (size_t)24U\n          }\n        ));\n    __m256i coefficient = libcrux_ml_kem_vector_avx2_deserialize_12_f5(bytes);\n    re.data[i0] = libcrux_ml_kem_vector_avx2_cond_subtract_3329_f5(coefficient);\n  }\n  return re;\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_e3(\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_arr_60 *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_shared_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_13 uu____0 = deserialize_to_reduced_ring_element_84(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40\nshake128_init_absorb_final_78(const Eurydice_arr_81 *input)\n{\n  Eurydice_arr_c40 state = libcrux_sha3_avx2_x4_incremental_init();\n  libcrux_sha3_avx2_x4_incremental_shake128_absorb_final(&state,\n    Eurydice_array_to_slice_shared_e9(input->data),\n    Eurydice_array_to_slice_shared_e9(&input->data[1U]),\n    Eurydice_array_to_slice_shared_e9(&input->data[2U]),\n    Eurydice_array_to_slice_shared_e9(input->data));\n  return state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final_41\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40\nshake128_init_absorb_final_41_78(const Eurydice_arr_81 *input)\n{\n  return shake128_init_absorb_final_78(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7e\nshake128_squeeze_first_three_blocks_78(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_7e\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_79 out0 = { .data = { 0U } };\n  Eurydice_arr_79 out1 = { .data = { 0U } };\n  Eurydice_arr_79 out2 = { .data = { 0U } };\n  Eurydice_arr_79 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(st,\n    Eurydice_array_to_slice_mut_48(&out0),\n    Eurydice_array_to_slice_mut_48(&out1),\n    Eurydice_array_to_slice_mut_48(&out2),\n    Eurydice_array_to_slice_mut_48(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks_41\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7e\nshake128_squeeze_first_three_blocks_41_78(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_first_three_blocks_78(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_79(\n  const Eurydice_arr_7e *randomness,\n  Eurydice_arr_eb0 *sampled_coefficients,\n  Eurydice_arr_b1 *out\n)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_shared_d42(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2c shake128_squeeze_next_block_78(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_2c\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c5 out0 = { .data = { 0U } };\n  Eurydice_arr_c5 out1 = { .data = { 0U } };\n  Eurydice_arr_c5 out2 = { .data = { 0U } };\n  Eurydice_arr_c5 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(st,\n    Eurydice_array_to_slice_mut_2c(&out0),\n    Eurydice_array_to_slice_mut_2c(&out1),\n    Eurydice_array_to_slice_mut_2c(&out2),\n    Eurydice_array_to_slice_mut_2c(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block_41\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2c\nshake128_squeeze_next_block_41_78(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_next_block_78(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_790(\n  const Eurydice_arr_2c *randomness,\n  Eurydice_arr_eb0 *sampled_coefficients,\n  Eurydice_arr_b1 *out\n)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_shared_d43(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ZERO\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic Eurydice_arr_13 ZERO_84(void)\n{\n  Eurydice_arr_13 lit;\n  __m256i repeat_expression[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_kem_vector_avx2_ZERO_f5(););\n  memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (__m256i));\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13 from_i16_array_84(Eurydice_borrow_slice_i16 a)\n{\n  Eurydice_arr_13 result = ZERO_84();\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    result.data[i0] =\n      libcrux_ml_kem_vector_avx2_from_i16_array_f5(Eurydice_slice_subslice_shared_a6(a,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * (size_t)16U,\n              .end = (i0 + (size_t)1U) * (size_t)16U\n            }\n          )));\n  }\n  return result;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13 from_i16_array_d6_84(Eurydice_borrow_slice_i16 a)\n{\n  return from_i16_array_84(a);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_13 call_mut_0a_281(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_shared_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_60 sample_from_xof_281(const Eurydice_arr_81 *seeds)\n{\n  Eurydice_arr_eb0 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_b1\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c40 xof_state = shake128_init_absorb_final_41_78(seeds);\n  Eurydice_arr_7e randomness0 = shake128_squeeze_first_three_blocks_41_78(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_79(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_2c randomness = shake128_squeeze_next_block_41_78(&xof_state);\n      done = sample_from_uniform_distribution_next_790(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_60 arr_mapped_str;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_281(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_281(Eurydice_arr_ea *A_transpose, const Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_81 seeds;\n    Eurydice_arr_31 repeat_expression[3U];\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_60 sampled = sample_from_xof_281(&seeds);\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.H_41\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec H_41_78(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a1(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  Eurydice_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_shared_211(public_key, (size_t)1152U);\n  deserialize_ring_elements_reduced_e3(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_shared_5f3(public_key,\n        (size_t)1152U));\n  Eurydice_arr_ea *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_shared_5f3(public_key,\n        (size_t)1152U));\n  sample_matrix_A_281(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_41_78(Eurydice_array_to_slice_shared_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nconst\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\n*libcrux_ml_kem_ind_cca_unpacked_public_key_11_e3(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  return &self->public_key;\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.clone_91\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic inline libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef\nclone_91_e3(const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *self)\n{\n  Eurydice_arr_60\n  uu____0 =\n    core_array__core__clone__Clone_for__T__N___clone((size_t)3U,\n      &self->t_as_ntt,\n      Eurydice_arr_13,\n      Eurydice_arr_60);\n  Eurydice_arr_ec\n  uu____1 =\n    core_array__core__clone__Clone_for__T__N___clone((size_t)32U,\n      &self->seed_for_A,\n      uint8_t,\n      Eurydice_arr_ec);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef){\n        .t_as_ntt = uu____0,\n        .seed_for_A = uu____1,\n        .A = core_array__core__clone__Clone_for__T__N___clone((size_t)3U,\n          &self->A,\n          Eurydice_arr_60,\n          Eurydice_arr_ea)\n      }\n    );\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.clone_d7\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_ind_cca_unpacked_clone_d7_e3(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *self\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef\n  uu____0 = clone_91_e3(&self->ind_cpa_public_key);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef){\n        .ind_cpa_public_key = uu____0,\n        .public_key_hash = core_array__core__clone__Clone_for__T__N___clone((size_t)32U,\n          &self->public_key_hash,\n          uint8_t,\n          Eurydice_arr_ec)\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.to_unsigned_field_modulus\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE __m256i to_unsigned_field_modulus_84(__m256i a)\n{\n  return libcrux_ml_kem_vector_avx2_to_unsigned_representative_f5(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.serialize_uncompressed_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b20\nserialize_uncompressed_ring_element_84(const Eurydice_arr_13 *re)\n{\n  Eurydice_arr_b20 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i coefficient = to_unsigned_field_modulus_84(re->data[i0]);\n    Eurydice_arr_94 bytes = libcrux_ml_kem_vector_avx2_serialize_12_f5(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d411(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)24U * i0,\n            .end = (size_t)24U * i0 + (size_t)24U\n          }\n        )),\n      Eurydice_array_to_slice_shared_ed(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_e3(const Eurydice_arr_60 *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_84(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_79(\n  const Eurydice_arr_60 *t_as_ntt,\n  Eurydice_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_5f *serialized\n)\n{\n  serialize_vector_e3(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d415(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f4(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_79(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *self,\n  Eurydice_arr_5f *serialized\n)\n{\n  serialize_public_key_mut_79(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_79(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_79(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5f\nserialize_public_key_79(const Eurydice_arr_60 *t_as_ntt, Eurydice_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_5f public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_79(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5f\nserialized_dd_79(const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_3d(serialize_public_key_79(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_79(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  return serialized_dd_79(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PRIVATE_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair768\nserialize_unpacked_secret_key_15(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *public_key,\n  const Eurydice_arr_60 *private_key\n)\n{\n  Eurydice_arr_5f\n  public_key_serialized =\n    serialize_public_key_79(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&public_key->seed_for_A));\n  Eurydice_arr_0e secret_key_serialized = { .data = { 0U } };\n  serialize_vector_e3(private_key, Eurydice_array_to_slice_mut_f4(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair768){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_d4(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_7d *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair768\n  uu____0 =\n    serialize_unpacked_secret_key_15(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_0e ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_5f ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(Eurydice_array_to_slice_shared_f4(&ind_cpa_private_key),\n    Eurydice_array_to_slice_shared_ff(&ind_cpa_public_key),\n    Eurydice_array_to_slice_shared_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_d4(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_7d sk = libcrux_ml_kem_types_default_d3_79();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_d4(self, &sk);\n  return sk;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_uncompressed_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_to_uncompressed_ring_element_84(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)24U,\n            .end = i0 * (size_t)24U + (size_t)24U\n          }\n        ));\n    re.data[i0] = libcrux_ml_kem_vector_avx2_deserialize_12_f5(bytes);\n  }\n  return re;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_e3(Eurydice_borrow_slice_u8 secret_key, Eurydice_arr_60 *secret_as_ntt)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_84(Eurydice_slice_subslice_shared_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_13 call_mut_0a_7e1(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_shared_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_60 sample_from_xof_7e1(const Eurydice_arr_81 *seeds)\n{\n  Eurydice_arr_eb0 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_b1\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_1b\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_78(seeds);\n  Eurydice_arr_7e\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_78(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_79(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_2c\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_78(&xof_state);\n      done = sample_from_uniform_distribution_next_790(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_60 arr_mapped_str;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_7e1(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_7e1(Eurydice_arr_ea *A_transpose, const Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_81 seeds;\n    Eurydice_arr_31 repeat_expression[3U];\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_60 sampled = sample_from_xof_7e1(&seeds);\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_101(\n  Eurydice_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_e3(Eurydice_slice_subslice_to_shared_72(public_key,\n      (size_t)1152U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_shared_6d(public_key, (size_t)1152U);\n  Eurydice_arr_ea *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_7e1(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_3e(\n  const Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_64(Eurydice_array_to_slice_shared_51(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_e3(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_101(ind_cpa_public_key,\n    &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_shared_6d(ind_cpa_public_key, (size_t)1152U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_60 default_70_e3(void)\n{\n  Eurydice_arr_60 lit;\n  Eurydice_arr_13 repeat_expression[3U];\n  KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n  memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_13));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef default_8b_e3(void)\n{\n  Eurydice_arr_60 uu____0;\n  Eurydice_arr_13 repeat_expression0[3U];\n  KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression0[i] = ZERO_d6_84(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)3U * sizeof (Eurydice_arr_13));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_60 repeat_expression1[3U];\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    Eurydice_arr_60 lit;\n    Eurydice_arr_13 repeat_expression[3U];\n    KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n    memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_13));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)3U * sizeof (Eurydice_arr_60));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_ind_cca_unpacked_default_30_e3(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef){\n        .ind_cpa_public_key = default_8b_e3(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_e3(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_ef\n  uu____0 =\n    { .ind_cpa_private_key = default_70_e3(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_e3()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.G_41\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7 G_41_78(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_b6(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d48(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)3U;\n  return G_41_78(Eurydice_array_to_slice_shared_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_58 PRFxN_3b(const Eurydice_arr_801 *input)\n{\n  Eurydice_arr_58\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_89 out0 = { .data = { 0U } };\n  Eurydice_arr_89 out1 = { .data = { 0U } };\n  Eurydice_arr_89 out2 = { .data = { 0U } };\n  Eurydice_arr_89 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_shake256(Eurydice_array_to_slice_shared_b5(input->data),\n    Eurydice_array_to_slice_shared_b5(&input->data[1U]),\n    Eurydice_array_to_slice_shared_b5(&input->data[2U]),\n    Eurydice_array_to_slice_shared_b5(input->data),\n    Eurydice_array_to_slice_mut_78(&out0),\n    Eurydice_array_to_slice_mut_78(&out1),\n    Eurydice_array_to_slice_mut_78(&out2),\n    Eurydice_array_to_slice_mut_78(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN_41\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_58 PRFxN_41_3b(const Eurydice_arr_801 *input)\n{\n  return PRFxN_3b(input);\n}\n\n/**\n Given a series of uniformly random bytes in `randomness`, for some number `eta`,\n the `sample_from_binomial_distribution_{eta}` functions sample\n a ring element from a binomial distribution centered at 0 that uses two sets\n of `eta` coin flips. If, for example,\n `eta = ETA`, each ring coefficient is a value `v` such\n such that `v ∈ {-ETA, -ETA + 1, ..., 0, ..., ETA + 1, ETA}` and:\n\n ```plaintext\n - If v < 0, Pr[v] = Pr[-v]\n - If v >= 0, Pr[v] = BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2 ^ (2 * ETA)\n ```\n\n The values `v < 0` are mapped to the appropriate `KyberFieldElement`.\n\n The expected value is:\n\n ```plaintext\n E[X] = (-ETA)Pr[-ETA] + (-(ETA - 1))Pr[-(ETA - 1)] + ... + (ETA - 1)Pr[ETA - 1] + (ETA)Pr[ETA]\n      = 0 since Pr[-v] = Pr[v] when v < 0.\n ```\n\n And the variance is:\n\n ```plaintext\n Var(X) = E[(X - E[X])^2]\n        = E[X^2]\n        = sum_(v=-ETA to ETA)v^2 * (BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2^(2 * ETA))\n        = ETA / 2\n ```\n\n This function implements <strong>Algorithm 7</strong> of the NIST FIPS 203 standard, which is\n reproduced below:\n\n ```plaintext\n Input: byte array B ∈ 𝔹^{64η}.\n Output: array f ∈ ℤ₂₅₆.\n\n b ← BytesToBits(B)\n for (i ← 0; i < 256; i++)\n     x ← ∑(j=0 to η - 1) b[2iη + j]\n     y ← ∑(j=0 to η - 1) b[2iη + η + j]\n     f[i] ← x−y mod q\n end for\n return f\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution_2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsample_from_binomial_distribution_2_84(Eurydice_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_04 sampled_i16s = { .data = { 0U } };\n  for (size_t i0 = (size_t)0U; i0 < randomness.meta / (size_t)4U; i0++)\n  {\n    size_t chunk_number = i0;\n    Eurydice_borrow_slice_u8\n    byte_chunk =\n      Eurydice_slice_subslice_shared_c8(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = chunk_number * (size_t)4U,\n            .end = chunk_number * (size_t)4U + (size_t)4U\n          }\n        ));\n    uint32_t\n    random_bits_as_u32 =\n      (((uint32_t)byte_chunk.ptr[0U] | (uint32_t)byte_chunk.ptr[1U] << 8U) |\n        (uint32_t)byte_chunk.ptr[2U] << 16U)\n      | (uint32_t)byte_chunk.ptr[3U] << 24U;\n    uint32_t even_bits = random_bits_as_u32 & 1431655765U;\n    uint32_t odd_bits = random_bits_as_u32 >> 1U & 1431655765U;\n    uint32_t coin_toss_outcomes = even_bits + odd_bits;\n    for (uint32_t i = 0U; i < 32U / 4U; i++)\n    {\n      uint32_t outcome_set = i;\n      uint32_t outcome_set0 = outcome_set * 4U;\n      int16_t outcome_1 = (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 3U);\n      int16_t outcome_2 = (int16_t)(coin_toss_outcomes >> (uint32_t)(outcome_set0 + 2U) & 3U);\n      size_t offset = (size_t)(outcome_set0 >> 2U);\n      sampled_i16s.data[(size_t)8U * chunk_number + offset] = outcome_1 - outcome_2;\n    }\n  }\n  return from_i16_array_d6_84(Eurydice_array_to_slice_shared_990(&sampled_i16s));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution_3\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsample_from_binomial_distribution_3_84(Eurydice_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_04 sampled_i16s = { .data = { 0U } };\n  for (size_t i0 = (size_t)0U; i0 < randomness.meta / (size_t)3U; i0++)\n  {\n    size_t chunk_number = i0;\n    Eurydice_borrow_slice_u8\n    byte_chunk =\n      Eurydice_slice_subslice_shared_c8(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = chunk_number * (size_t)3U,\n            .end = chunk_number * (size_t)3U + (size_t)3U\n          }\n        ));\n    uint32_t\n    random_bits_as_u24 =\n      ((uint32_t)byte_chunk.ptr[0U] | (uint32_t)byte_chunk.ptr[1U] << 8U) |\n        (uint32_t)byte_chunk.ptr[2U] << 16U;\n    uint32_t first_bits = random_bits_as_u24 & 2396745U;\n    uint32_t second_bits = random_bits_as_u24 >> 1U & 2396745U;\n    uint32_t third_bits = random_bits_as_u24 >> 2U & 2396745U;\n    uint32_t coin_toss_outcomes = first_bits + second_bits + third_bits;\n    for (int32_t i = 0; i < 24 / 6; i++)\n    {\n      int32_t outcome_set = i;\n      int32_t outcome_set0 = outcome_set * 6;\n      int16_t outcome_1 = (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 7U);\n      int16_t outcome_2 = (int16_t)(coin_toss_outcomes >> (uint32_t)(outcome_set0 + 3) & 7U);\n      size_t offset = (size_t)(outcome_set0 / 6);\n      sampled_i16s.data[(size_t)4U * chunk_number + offset] = outcome_1 - outcome_2;\n    }\n  }\n  return from_i16_array_d6_84(Eurydice_array_to_slice_shared_990(&sampled_i16s));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- ETA= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsample_from_binomial_distribution_16(Eurydice_borrow_slice_u8 randomness)\n{\n  return sample_from_binomial_distribution_2_84(randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_7\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_7_84(Eurydice_arr_13 *re)\n{\n  size_t step = LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT / (size_t)2U;\n  for (size_t i = (size_t)0U; i < step; i++)\n  {\n    size_t j = i;\n    __m256i t = libcrux_ml_kem_vector_avx2_multiply_by_constant_f5(re->data[j + step], -1600);\n    re->data[j + step] = libcrux_ml_kem_vector_avx2_sub_f5(re->data[j], &t);\n    re->data[j] = libcrux_ml_kem_vector_avx2_add_f5(re->data[j], &t);\n  }\n}\n\ntypedef struct libcrux_ml_kem_vector_avx2_SIMD256Vector_x2_s\n{\n  __m256i fst;\n  __m256i snd;\n}\nlibcrux_ml_kem_vector_avx2_SIMD256Vector_x2;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_layer_int_vec_step\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_vector_avx2_SIMD256Vector_x2\nntt_layer_int_vec_step_84(__m256i a, __m256i b, int16_t zeta_r)\n{\n  __m256i t = libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(b, zeta_r);\n  b = libcrux_ml_kem_vector_avx2_sub_f5(a, &t);\n  a = libcrux_ml_kem_vector_avx2_add_f5(a, &t);\n  return (KRML_CLITERAL(libcrux_ml_kem_vector_avx2_SIMD256Vector_x2){ .fst = a, .snd = b });\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_4_plus\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nntt_at_layer_4_plus_84(size_t *zeta_i, Eurydice_arr_13 *re, size_t layer)\n{\n  size_t step = (size_t)1U << (uint32_t)layer;\n  for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++)\n  {\n    size_t round = i0;\n    zeta_i[0U]++;\n    size_t offset = round * step * (size_t)2U;\n    size_t offset_vec = offset / (size_t)16U;\n    size_t step_vec = step / (size_t)16U;\n    for (size_t i = offset_vec; i < offset_vec + step_vec; i++)\n    {\n      size_t j = i;\n      libcrux_ml_kem_vector_avx2_SIMD256Vector_x2\n      uu____0 =\n        ntt_layer_int_vec_step_84(re->data[j],\n          re->data[j + step_vec],\n          libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n      __m256i x = uu____0.fst;\n      __m256i y = uu____0.snd;\n      re->data[j] = x;\n      re->data[j + step_vec] = y;\n    }\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_3\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_3_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_ntt_layer_3_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U])););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_2_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_ntt_layer_2_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)1U));\n    zeta_i[0U]++;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_1_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_ntt_layer_1_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)3U));\n    zeta_i[0U] += (size_t)3U;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void poly_barrett_reduce_84(Eurydice_arr_13 *myself)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    myself->data[i0] = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(myself->data[i0]);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void poly_barrett_reduce_d6_84(Eurydice_arr_13 *self)\n{\n  poly_barrett_reduce_84(self);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_binomially_sampled_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_binomially_sampled_ring_element_84(Eurydice_arr_13 *re)\n{\n  ntt_at_layer_7_84(re);\n  size_t zeta_i = (size_t)1U;\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_84(&zeta_i, re);\n  ntt_at_layer_2_84(&zeta_i, re);\n  ntt_at_layer_1_84(&zeta_i, re);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- ETA= 2\n- ETA_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_d61(\n  Eurydice_arr_60 *re_as_ntt,\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_801 prf_inputs;\n  Eurydice_arr_fa repeat_expression[3U];\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_78(&prf_inputs, domain_separator);\n  Eurydice_arr_58 prf_outputs = PRFxN_41_3b(&prf_inputs);\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_16(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_84(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_73_ab1(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Given two `KyberPolynomialRingElement`s in their NTT representations,\n compute their product. Given two polynomials in the NTT domain `f^` and `ĵ`,\n the `iᵗʰ` coefficient of the product `k̂` is determined by the calculation:\n\n ```plaintext\n ĥ[2·i] + ĥ[2·i + 1]X = (f^[2·i] + f^[2·i + 1]X)·(ĝ[2·i] + ĝ[2·i + 1]X) mod (X² - ζ^(2·BitRev₇(i) + 1))\n ```\n\n This function almost implements <strong>Algorithm 10</strong> of the\n NIST FIPS 203 standard, which is reproduced below:\n\n ```plaintext\n Input: Two arrays fˆ ∈ ℤ₂₅₆ and ĝ ∈ ℤ₂₅₆.\n Output: An array ĥ ∈ ℤq.\n\n for(i ← 0; i < 128; i++)\n     (ĥ[2i], ĥ[2i+1]) ← BaseCaseMultiply(fˆ[2i], fˆ[2i+1], ĝ[2i], ĝ[2i+1], ζ^(2·BitRev₇(i) + 1))\n end for\n return ĥ\n ```\n We say \"almost\" because the coefficients of the ring element output by\n this function are in the Montgomery domain.\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nntt_multiply_84(const Eurydice_arr_13 *myself, const Eurydice_arr_13 *rhs)\n{\n  Eurydice_arr_13 out = ZERO_84();\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    out.data[i0] =\n      libcrux_ml_kem_vector_avx2_ntt_multiply_f5(&myself->data[i0],\n        &rhs->data[i0],\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)3U));\n  }\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nntt_multiply_d6_84(const Eurydice_arr_13 *self, const Eurydice_arr_13 *rhs)\n{\n  return ntt_multiply_84(self, rhs);\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_e3(Eurydice_arr_13 *myself, const Eurydice_arr_13 *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    myself->data[i0] = libcrux_ml_kem_vector_avx2_add_f5(myself->data[i0], &rhs->data[i0]););\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_e3(Eurydice_arr_13 *self, const Eurydice_arr_13 *rhs)\n{\n  add_to_ring_element_e3(self, rhs);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.to_standard_domain\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE __m256i to_standard_domain_84(__m256i vector)\n{\n  return\n    libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(vector,\n      LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_standard_error_reduce_84(Eurydice_arr_13 *myself, const Eurydice_arr_13 *error)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t j = i;\n    __m256i coefficient_normal_form = to_standard_domain_84(myself->data[j]);\n    __m256i sum = libcrux_ml_kem_vector_avx2_add_f5(coefficient_normal_form, &error->data[j]);\n    __m256i red = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(sum);\n    myself->data[j] = red;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_standard_error_reduce_d6_84(Eurydice_arr_13 *self, const Eurydice_arr_13 *error)\n{\n  add_standard_error_reduce_84(self, error);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_e3(\n  Eurydice_arr_60 *t_as_ntt,\n  const Eurydice_arr_ea *matrix_A,\n  const Eurydice_arr_60 *s_as_ntt,\n  const Eurydice_arr_60 *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    const Eurydice_arr_60 *row = &matrix_A->data[i0];\n    Eurydice_arr_13 uu____0 = ZERO_d6_84();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR3(i1,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i1;\n      const Eurydice_arr_13 *matrix_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_e3(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_84(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_ab1(\n  Eurydice_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_60 *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_b6(key_generation_seed);\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_ea *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_281(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_d61(private_key, &prf_input, 0U);\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_ab1(&lvalue););\n  Eurydice_arr_60 error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_d61(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_e3(&public_key->t_as_ntt, &public_key->A, &private_key[0U], &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_13 call_mut_b4_e3(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_60 call_mut_22_e3(void **_)\n{\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_e3(&lvalue););\n  return arr_struct;\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.clone_c1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic inline Eurydice_arr_13 clone_c1_84(const Eurydice_arr_13 *self)\n{\n  return\n    core_array__core__clone__Clone_for__T__N___clone((size_t)16U,\n      self,\n      __m256i,\n      Eurydice_arr_13);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_ea transpose_a_e3(Eurydice_arr_ea ind_cpa_a)\n{\n  Eurydice_arr_ea arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_e3(&lvalue););\n  Eurydice_arr_ea A = arr_struct;\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 uu____0 = clone_c1_84(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db1(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *out\n)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_ab1(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_ea A = transpose_a_e3(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_5f\n  pk_serialized =\n    serialize_public_key_79(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_41_78(Eurydice_array_to_slice_shared_ff(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_b6(Eurydice_borrow_slice_u8 randomness, Eurydice_borrow_slice_u8 pk_hash)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_41_78(Eurydice_array_to_slice_shared_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_60, libcrux_ml_kem_polynomial_PolynomialRingElement_f6\n\n*/\ntypedef struct tuple_7f_s\n{\n  Eurydice_arr_60 fst;\n  Eurydice_arr_13 snd;\n}\ntuple_7f;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_f1_781(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_dd_781(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_d61(\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_60 *error_1\n)\n{\n  Eurydice_arr_801 prf_inputs;\n  Eurydice_arr_fa repeat_expression[3U];\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_78(&prf_inputs, domain_separator);\n  Eurydice_arr_58 prf_outputs = PRFxN_41_3b(&prf_inputs);\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_16(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF\nwith const generics\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_89 PRF_ec(Eurydice_borrow_slice_u8 input)\n{\n  Eurydice_arr_89 digest = { .data = { 0U } };\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&digest), input);\n  return digest;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_89 PRF_41_3b0(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_13 call_mut_a8_e3(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_1_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)3U));\n    zeta_i[0U] -= (size_t)3U;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_2_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)1U));\n    zeta_i[0U]--;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_3\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_3_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U])););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.inv_ntt_layer_int_vec_step_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_vector_avx2_SIMD256Vector_x2\ninv_ntt_layer_int_vec_step_reduce_84(__m256i a, __m256i b, int16_t zeta_r)\n{\n  __m256i a_minus_b = libcrux_ml_kem_vector_avx2_sub_f5(b, &a);\n  a = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(libcrux_ml_kem_vector_avx2_add_f5(a, &b));\n  b = libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(a_minus_b, zeta_r);\n  return (KRML_CLITERAL(libcrux_ml_kem_vector_avx2_SIMD256Vector_x2){ .fst = a, .snd = b });\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_4_plus\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ninvert_ntt_at_layer_4_plus_84(size_t *zeta_i, Eurydice_arr_13 *re, size_t layer)\n{\n  size_t step = (size_t)1U << (uint32_t)layer;\n  for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++)\n  {\n    size_t round = i0;\n    zeta_i[0U]--;\n    size_t offset = round * step * (size_t)2U;\n    size_t offset_vec = offset / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;\n    size_t step_vec = step / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;\n    for (size_t i = offset_vec; i < offset_vec + step_vec; i++)\n    {\n      size_t j = i;\n      libcrux_ml_kem_vector_avx2_SIMD256Vector_x2\n      uu____0 =\n        inv_ntt_layer_int_vec_step_reduce_84(re->data[j],\n          re->data[j + step_vec],\n          libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n      __m256i x = uu____0.fst;\n      __m256i y = uu____0.snd;\n      re->data[j] = x;\n      re->data[j + step_vec] = y;\n    }\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_e3(Eurydice_arr_13 *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_84(&zeta_i, re);\n  invert_ntt_at_layer_2_84(&zeta_i, re);\n  invert_ntt_at_layer_3_84(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_error_reduce_84(Eurydice_arr_13 *myself, const Eurydice_arr_13 *error)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t j = i;\n    __m256i\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(myself->data[j],\n        1441);\n    __m256i sum = libcrux_ml_kem_vector_avx2_add_f5(coefficient_normal_form, &error->data[j]);\n    __m256i red = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(sum);\n    myself->data[j] = red;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_error_reduce_d6_84(Eurydice_arr_13 *self, const Eurydice_arr_13 *error)\n{\n  add_error_reduce_84(self, error);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_60\ncompute_vector_u_e3(\n  const Eurydice_arr_ea *a_as_ntt,\n  const Eurydice_arr_60 *r_as_ntt,\n  const Eurydice_arr_60 *error_1\n)\n{\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_e3(&lvalue););\n  Eurydice_arr_60 result = arr_struct;\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    const Eurydice_arr_60 *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      const Eurydice_arr_13 *a_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_e3(&result.data[i1], &product););\n    invert_ntt_montgomery_e3(&result.data[i1]);\n    add_error_reduce_d6_84(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.compress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE __m256i compress_ciphertext_coefficient_ef(__m256i vector)\n{\n  __m256i\n  field_modulus_halved =\n    mm256_set1_epi32(((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 2);\n  __m256i compression_factor = mm256_set1_epi32(10321340);\n  __m256i coefficient_bits_mask = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)10) - 1);\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i compressed_low = mm256_slli_epi32(10, coefficients_low0, __m256i);\n  __m256i compressed_low0 = mm256_add_epi32(compressed_low, field_modulus_halved);\n  __m256i\n  compressed_low1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_low0,\n      compression_factor);\n  __m256i compressed_low2 = mm256_srli_epi32(3, compressed_low1, __m256i);\n  __m256i compressed_low3 = mm256_and_si256(compressed_low2, coefficient_bits_mask);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i compressed_high = mm256_slli_epi32(10, coefficients_high0, __m256i);\n  __m256i compressed_high0 = mm256_add_epi32(compressed_high, field_modulus_halved);\n  __m256i\n  compressed_high1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_high0,\n      compression_factor);\n  __m256i compressed_high2 = mm256_srli_epi32(3, compressed_high1, __m256i);\n  __m256i compressed_high3 = mm256_and_si256(compressed_high2, coefficient_bits_mask);\n  __m256i compressed = mm256_packs_epi32(compressed_low3, compressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE __m256i compress_ef(__m256i vector)\n{\n  return compress_ciphertext_coefficient_ef(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress_f5\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE __m256i compress_f5_ef(__m256i vector)\n{\n  return compress_ef(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_10\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- OUT_LEN= 320\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b0 compress_then_serialize_10_03(const Eurydice_arr_13 *re)\n{\n  Eurydice_arr_b0 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i coefficient = compress_f5_ef(to_unsigned_field_modulus_84(re->data[i0]));\n    Eurydice_arr_fc bytes = libcrux_ml_kem_vector_avx2_serialize_10_f5(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d49(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)20U * i0,\n            .end = (size_t)20U * i0 + (size_t)20U\n          }\n        )),\n      Eurydice_array_to_slice_shared_8f(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.compress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE __m256i compress_ciphertext_coefficient_c4(__m256i vector)\n{\n  __m256i\n  field_modulus_halved =\n    mm256_set1_epi32(((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 2);\n  __m256i compression_factor = mm256_set1_epi32(10321340);\n  __m256i coefficient_bits_mask = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)11) - 1);\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i compressed_low = mm256_slli_epi32(11, coefficients_low0, __m256i);\n  __m256i compressed_low0 = mm256_add_epi32(compressed_low, field_modulus_halved);\n  __m256i\n  compressed_low1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_low0,\n      compression_factor);\n  __m256i compressed_low2 = mm256_srli_epi32(3, compressed_low1, __m256i);\n  __m256i compressed_low3 = mm256_and_si256(compressed_low2, coefficient_bits_mask);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i compressed_high = mm256_slli_epi32(11, coefficients_high0, __m256i);\n  __m256i compressed_high0 = mm256_add_epi32(compressed_high, field_modulus_halved);\n  __m256i\n  compressed_high1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_high0,\n      compression_factor);\n  __m256i compressed_high2 = mm256_srli_epi32(3, compressed_high1, __m256i);\n  __m256i compressed_high3 = mm256_and_si256(compressed_high2, coefficient_bits_mask);\n  __m256i compressed = mm256_packs_epi32(compressed_low3, compressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE __m256i compress_c4(__m256i vector)\n{\n  return compress_ciphertext_coefficient_c4(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress_f5\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE __m256i compress_f5_c4(__m256i vector)\n{\n  return compress_c4(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- COMPRESSION_FACTOR= 10\n- OUT_LEN= 320\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b0\ncompress_then_serialize_ring_element_u_81(const Eurydice_arr_13 *re)\n{\n  return compress_then_serialize_10_03(re);\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- OUT_LEN= 960\n- COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_d4(Eurydice_arr_60 input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)960U / (size_t)3U),\n            .end = (i0 + (size_t)1U) * ((size_t)960U / (size_t)3U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b0 lvalue = compress_then_serialize_ring_element_u_81(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_56(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_7f\nencrypt_c1_781(\n  Eurydice_borrow_slice_u8 randomness,\n  const Eurydice_arr_ea *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_60 arr_struct0;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_781(&lvalue););\n  Eurydice_arr_60 r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_d61(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_781(&lvalue););\n  Eurydice_arr_60 error_1 = arr_struct;\n  uint8_t\n  domain_separator = sample_ring_element_cbd_d61(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_41_3b0(Eurydice_array_to_slice_shared_b5(&prf_input));\n  Eurydice_arr_13\n  error_2 = sample_from_binomial_distribution_16(Eurydice_array_to_slice_shared_78(&prf_output));\n  Eurydice_arr_60 u = compute_vector_u_e3(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_d4(u, ciphertext);\n  return (KRML_CLITERAL(tuple_7f){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_message\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_message_84(const Eurydice_arr_ec *serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    __m256i\n    coefficient_compressed =\n      libcrux_ml_kem_vector_avx2_deserialize_1_f5(Eurydice_array_to_subslice_shared_d4(serialized,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = (size_t)2U * i0,\n              .end = (size_t)2U * i0 + (size_t)2U\n            }\n          )));\n    re.data[i0] = libcrux_ml_kem_vector_avx2_decompress_1_f5(coefficient_compressed););\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nadd_message_error_reduce_84(\n  const Eurydice_arr_13 *myself,\n  const Eurydice_arr_13 *message,\n  Eurydice_arr_13 result\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(result.data[i0],\n        1441);\n    __m256i sum1 = libcrux_ml_kem_vector_avx2_add_f5(myself->data[i0], &message->data[i0]);\n    __m256i sum2 = libcrux_ml_kem_vector_avx2_add_f5(coefficient_normal_form, &sum1);\n    __m256i red = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(sum2);\n    result.data[i0] = red;\n  }\n  return result;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nadd_message_error_reduce_d6_84(\n  const Eurydice_arr_13 *self,\n  const Eurydice_arr_13 *message,\n  Eurydice_arr_13 result\n)\n{\n  return add_message_error_reduce_84(self, message, result);\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_ring_element_v_e3(\n  const Eurydice_arr_60 *t_as_ntt,\n  const Eurydice_arr_60 *r_as_ntt,\n  const Eurydice_arr_13 *error_2,\n  const Eurydice_arr_13 *message\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_e3(&result, &product););\n  invert_ntt_montgomery_e3(&result);\n  return add_message_error_reduce_d6_84(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.compress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE __m256i compress_ciphertext_coefficient_d1(__m256i vector)\n{\n  __m256i\n  field_modulus_halved =\n    mm256_set1_epi32(((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 2);\n  __m256i compression_factor = mm256_set1_epi32(10321340);\n  __m256i coefficient_bits_mask = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)4) - 1);\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i compressed_low = mm256_slli_epi32(4, coefficients_low0, __m256i);\n  __m256i compressed_low0 = mm256_add_epi32(compressed_low, field_modulus_halved);\n  __m256i\n  compressed_low1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_low0,\n      compression_factor);\n  __m256i compressed_low2 = mm256_srli_epi32(3, compressed_low1, __m256i);\n  __m256i compressed_low3 = mm256_and_si256(compressed_low2, coefficient_bits_mask);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i compressed_high = mm256_slli_epi32(4, coefficients_high0, __m256i);\n  __m256i compressed_high0 = mm256_add_epi32(compressed_high, field_modulus_halved);\n  __m256i\n  compressed_high1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_high0,\n      compression_factor);\n  __m256i compressed_high2 = mm256_srli_epi32(3, compressed_high1, __m256i);\n  __m256i compressed_high3 = mm256_and_si256(compressed_high2, coefficient_bits_mask);\n  __m256i compressed = mm256_packs_epi32(compressed_low3, compressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE __m256i compress_d1(__m256i vector)\n{\n  return compress_ciphertext_coefficient_d1(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress_f5\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE __m256i compress_f5_d1(__m256i vector)\n{\n  return compress_d1(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_4\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_4_84(Eurydice_arr_13 re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i coefficient = compress_f5_d1(to_unsigned_field_modulus_84(re.data[i0]));\n    Eurydice_array_u8x8 bytes = libcrux_ml_kem_vector_avx2_serialize_4_f5(coefficient);\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)8U * i0,\n            .end = (size_t)8U * i0 + (size_t)8U\n          }\n        )),\n      Eurydice_array_to_slice_shared_6e(&bytes),\n      uint8_t);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.compress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE __m256i compress_ciphertext_coefficient_f4(__m256i vector)\n{\n  __m256i\n  field_modulus_halved =\n    mm256_set1_epi32(((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 2);\n  __m256i compression_factor = mm256_set1_epi32(10321340);\n  __m256i coefficient_bits_mask = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)5) - 1);\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i compressed_low = mm256_slli_epi32(5, coefficients_low0, __m256i);\n  __m256i compressed_low0 = mm256_add_epi32(compressed_low, field_modulus_halved);\n  __m256i\n  compressed_low1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_low0,\n      compression_factor);\n  __m256i compressed_low2 = mm256_srli_epi32(3, compressed_low1, __m256i);\n  __m256i compressed_low3 = mm256_and_si256(compressed_low2, coefficient_bits_mask);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i compressed_high = mm256_slli_epi32(5, coefficients_high0, __m256i);\n  __m256i compressed_high0 = mm256_add_epi32(compressed_high, field_modulus_halved);\n  __m256i\n  compressed_high1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_high0,\n      compression_factor);\n  __m256i compressed_high2 = mm256_srli_epi32(3, compressed_high1, __m256i);\n  __m256i compressed_high3 = mm256_and_si256(compressed_high2, coefficient_bits_mask);\n  __m256i compressed = mm256_packs_epi32(compressed_low3, compressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE __m256i compress_f4(__m256i vector)\n{\n  return compress_ciphertext_coefficient_f4(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress_f5\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE __m256i compress_f5_f4(__m256i vector)\n{\n  return compress_f4(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_5\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_5_84(Eurydice_arr_13 re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i\n    coefficients =\n      compress_f5_f4(libcrux_ml_kem_vector_avx2_to_unsigned_representative_f5(re.data[i0]));\n    Eurydice_arr_6d bytes = libcrux_ml_kem_vector_avx2_serialize_5_f5(coefficients);\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)10U * i0,\n            .end = (size_t)10U * i0 + (size_t)10U\n          }\n        )),\n      Eurydice_array_to_slice_shared_30(&bytes),\n      uint8_t);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- COMPRESSION_FACTOR= 4\n- OUT_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_15(Eurydice_arr_13 re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_4_84(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- V_COMPRESSION_FACTOR= 4\n- C2_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_15(\n  const Eurydice_arr_60 *t_as_ntt,\n  const Eurydice_arr_60 *r_as_ntt,\n  const Eurydice_arr_13 *error_2,\n  const Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_13 message_as_ring_element = deserialize_then_decompress_message_84(message);\n  Eurydice_arr_13\n  v = compute_ring_element_v_e3(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_15(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_LEN= 960\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2b\nencrypt_unpacked_281(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_2b ciphertext = { .data = { 0U } };\n  tuple_7f\n  uu____0 =\n    encrypt_c1_781(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d414(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)960U })));\n  Eurydice_arr_60 r_as_ntt = uu____0.fst;\n  Eurydice_arr_13 error_2 = uu____0.snd;\n  encrypt_c2_15(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f3(&ciphertext, (size_t)960U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a81(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_b6(Eurydice_array_to_slice_shared_01(randomness),\n      Eurydice_array_to_slice_shared_01(&public_key->public_key_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_2b\n  ciphertext =\n    encrypt_unpacked_281(&public_key->ind_cpa_public_key,\n      randomness,\n      pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_f4){\n        .fst = libcrux_ml_kem_types_from_19_52(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic Eurydice_arr_13 call_mut_35_15(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_ef(__m256i vector)\n{\n  __m256i field_modulus = mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i two_pow_coefficient_bits = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)10));\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i decompressed_low = mm256_mullo_epi32(coefficients_low0, field_modulus);\n  __m256i decompressed_low0 = mm256_slli_epi32(1, decompressed_low, __m256i);\n  __m256i decompressed_low1 = mm256_add_epi32(decompressed_low0, two_pow_coefficient_bits);\n  __m256i decompressed_low2 = mm256_srli_epi32(10, decompressed_low1, __m256i);\n  __m256i decompressed_low3 = mm256_srli_epi32(1, decompressed_low2, __m256i);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i decompressed_high = mm256_mullo_epi32(coefficients_high0, field_modulus);\n  __m256i decompressed_high0 = mm256_slli_epi32(1, decompressed_high, __m256i);\n  __m256i decompressed_high1 = mm256_add_epi32(decompressed_high0, two_pow_coefficient_bits);\n  __m256i decompressed_high2 = mm256_srli_epi32(10, decompressed_high1, __m256i);\n  __m256i decompressed_high3 = mm256_srli_epi32(1, decompressed_high2, __m256i);\n  __m256i compressed = mm256_packs_epi32(decompressed_low3, decompressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.decompress_ciphertext_coefficient_f5\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_f5_ef(__m256i vector)\n{\n  return decompress_ciphertext_coefficient_ef(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_10\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_10_84(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)20U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)20U,\n            .end = i0 * (size_t)20U + (size_t)20U\n          }\n        ));\n    __m256i coefficient = libcrux_ml_kem_vector_avx2_deserialize_10_f5(bytes);\n    re.data[i0] = decompress_ciphertext_coefficient_f5_ef(coefficient);\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_c4(__m256i vector)\n{\n  __m256i field_modulus = mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i two_pow_coefficient_bits = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)11));\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i decompressed_low = mm256_mullo_epi32(coefficients_low0, field_modulus);\n  __m256i decompressed_low0 = mm256_slli_epi32(1, decompressed_low, __m256i);\n  __m256i decompressed_low1 = mm256_add_epi32(decompressed_low0, two_pow_coefficient_bits);\n  __m256i decompressed_low2 = mm256_srli_epi32(11, decompressed_low1, __m256i);\n  __m256i decompressed_low3 = mm256_srli_epi32(1, decompressed_low2, __m256i);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i decompressed_high = mm256_mullo_epi32(coefficients_high0, field_modulus);\n  __m256i decompressed_high0 = mm256_slli_epi32(1, decompressed_high, __m256i);\n  __m256i decompressed_high1 = mm256_add_epi32(decompressed_high0, two_pow_coefficient_bits);\n  __m256i decompressed_high2 = mm256_srli_epi32(11, decompressed_high1, __m256i);\n  __m256i decompressed_high3 = mm256_srli_epi32(1, decompressed_high2, __m256i);\n  __m256i compressed = mm256_packs_epi32(decompressed_low3, decompressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.decompress_ciphertext_coefficient_f5\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_f5_c4(__m256i vector)\n{\n  return decompress_ciphertext_coefficient_c4(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_11_84(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)22U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)22U,\n            .end = i0 * (size_t)22U + (size_t)22U\n          }\n        ));\n    __m256i coefficient = libcrux_ml_kem_vector_avx2_deserialize_11_f5(bytes);\n    re.data[i0] = decompress_ciphertext_coefficient_f5_c4(coefficient);\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_ring_element_u_d0(Eurydice_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_10_84(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- VECTOR_U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE void ntt_vector_u_d0(Eurydice_arr_13 *re)\n{\n  size_t zeta_i = (size_t)0U;\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)7U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_84(&zeta_i, re);\n  ntt_at_layer_2_84(&zeta_i, re);\n  ntt_at_layer_1_84(&zeta_i, re);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_60\ndeserialize_then_decompress_u_15(const Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_15(&lvalue););\n  Eurydice_arr_60 u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)1088U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_shared_d46(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_d0(u_bytes);\n    ntt_vector_u_d0(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_d1(__m256i vector)\n{\n  __m256i field_modulus = mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i two_pow_coefficient_bits = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)4));\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i decompressed_low = mm256_mullo_epi32(coefficients_low0, field_modulus);\n  __m256i decompressed_low0 = mm256_slli_epi32(1, decompressed_low, __m256i);\n  __m256i decompressed_low1 = mm256_add_epi32(decompressed_low0, two_pow_coefficient_bits);\n  __m256i decompressed_low2 = mm256_srli_epi32(4, decompressed_low1, __m256i);\n  __m256i decompressed_low3 = mm256_srli_epi32(1, decompressed_low2, __m256i);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i decompressed_high = mm256_mullo_epi32(coefficients_high0, field_modulus);\n  __m256i decompressed_high0 = mm256_slli_epi32(1, decompressed_high, __m256i);\n  __m256i decompressed_high1 = mm256_add_epi32(decompressed_high0, two_pow_coefficient_bits);\n  __m256i decompressed_high2 = mm256_srli_epi32(4, decompressed_high1, __m256i);\n  __m256i decompressed_high3 = mm256_srli_epi32(1, decompressed_high2, __m256i);\n  __m256i compressed = mm256_packs_epi32(decompressed_low3, decompressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.decompress_ciphertext_coefficient_f5\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_f5_d1(__m256i vector)\n{\n  return decompress_ciphertext_coefficient_d1(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_4\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_4_84(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)8U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)8U,\n            .end = i0 * (size_t)8U + (size_t)8U\n          }\n        ));\n    __m256i coefficient = libcrux_ml_kem_vector_avx2_deserialize_4_f5(bytes);\n    re.data[i0] = decompress_ciphertext_coefficient_f5_d1(coefficient);\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_f4(__m256i vector)\n{\n  __m256i field_modulus = mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i two_pow_coefficient_bits = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)5));\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i decompressed_low = mm256_mullo_epi32(coefficients_low0, field_modulus);\n  __m256i decompressed_low0 = mm256_slli_epi32(1, decompressed_low, __m256i);\n  __m256i decompressed_low1 = mm256_add_epi32(decompressed_low0, two_pow_coefficient_bits);\n  __m256i decompressed_low2 = mm256_srli_epi32(5, decompressed_low1, __m256i);\n  __m256i decompressed_low3 = mm256_srli_epi32(1, decompressed_low2, __m256i);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i decompressed_high = mm256_mullo_epi32(coefficients_high0, field_modulus);\n  __m256i decompressed_high0 = mm256_slli_epi32(1, decompressed_high, __m256i);\n  __m256i decompressed_high1 = mm256_add_epi32(decompressed_high0, two_pow_coefficient_bits);\n  __m256i decompressed_high2 = mm256_srli_epi32(5, decompressed_high1, __m256i);\n  __m256i decompressed_high3 = mm256_srli_epi32(1, decompressed_high2, __m256i);\n  __m256i compressed = mm256_packs_epi32(decompressed_low3, decompressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.decompress_ciphertext_coefficient_f5\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_f5_f4(__m256i vector)\n{\n  return decompress_ciphertext_coefficient_f4(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_5\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_5_84(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)10U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)10U,\n            .end = i0 * (size_t)10U + (size_t)10U\n          }\n        ));\n    re.data[i0] = libcrux_ml_kem_vector_avx2_deserialize_5_f5(bytes);\n    re.data[i0] = decompress_ciphertext_coefficient_f5_f4(re.data[i0]);\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_ring_element_v_79(Eurydice_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_4_84(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsubtract_reduce_84(const Eurydice_arr_13 *myself, Eurydice_arr_13 b)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(b.data[i0],\n        1441);\n    __m256i diff = libcrux_ml_kem_vector_avx2_sub_f5(myself->data[i0], &coefficient_normal_form);\n    __m256i red = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(diff);\n    b.data[i0] = red;\n  }\n  return b;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsubtract_reduce_d6_84(const Eurydice_arr_13 *self, Eurydice_arr_13 b)\n{\n  return subtract_reduce_84(self, b);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_message_e3(\n  const Eurydice_arr_13 *v,\n  const Eurydice_arr_60 *secret_as_ntt,\n  const Eurydice_arr_60 *u_as_ntt\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_e3(&result, &product););\n  invert_ntt_montgomery_e3(&result);\n  return subtract_reduce_d6_84(v, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_message\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec compress_then_serialize_message_84(Eurydice_arr_13 re)\n{\n  Eurydice_arr_ec serialized = { .data = { 0U } };\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    __m256i coefficient = to_unsigned_field_modulus_84(re.data[i0]);\n    __m256i coefficient_compressed = libcrux_ml_kem_vector_avx2_compress_1_f5(coefficient);\n    Eurydice_array_u8x2 bytes = libcrux_ml_kem_vector_avx2_serialize_1_f5(coefficient_compressed);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)2U * i0,\n            .end = (size_t)2U * i0 + (size_t)2U\n          }\n        )),\n      Eurydice_array_to_slice_shared_82(&bytes),\n      uint8_t););\n  return serialized;\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_3e(const Eurydice_arr_60 *secret_key, const Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_60 u_as_ntt = deserialize_then_decompress_u_15(ciphertext);\n  Eurydice_arr_13\n  v =\n    deserialize_then_decompress_ring_element_v_79(Eurydice_array_to_subslice_from_shared_5f2(ciphertext,\n        (size_t)960U));\n  Eurydice_arr_13 message = compute_message_e3(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_84(message);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF\nwith const generics\n- LEN= 32\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec PRF_ce(Eurydice_borrow_slice_u8 input)\n{\n  Eurydice_arr_ec digest = { .data = { 0U } };\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_01(&digest), input);\n  return digest;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 3\n- LEN= 32\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec PRF_41_3b(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d91(\n  const libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_3e(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_shared_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_78(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_af\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_66(Eurydice_array_to_slice_shared_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f2(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_52(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_3b(Eurydice_array_to_slice_shared_81(&to_hash));\n  Eurydice_arr_2b\n  expected_ciphertext =\n    encrypt_unpacked_281(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_52(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_shared_06(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_13 call_mut_0b_e3(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_60\ndeserialize_ring_elements_reduced_out_e3(Eurydice_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_e3(&lvalue););\n  Eurydice_arr_60 deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_e3(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_79(const Eurydice_arr_5f *public_key)\n{\n  Eurydice_arr_60\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_e3(Eurydice_array_to_subslice_to_shared_211(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)));\n  Eurydice_arr_5f\n  public_key_serialized =\n    serialize_public_key_79(&deserialized_pk,\n      Eurydice_array_to_subslice_from_shared_5f3(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)));\n  return Eurydice_array_eq((size_t)1184U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_a4(const Eurydice_arr_7d *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_41_78(Eurydice_array_to_subslice_shared_d47(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)3U,\n            .end = (size_t)768U * (size_t)3U + (size_t)32U\n          }\n        )));\n  Eurydice_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_shared_d47(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)3U + (size_t)32U,\n          .end = (size_t)768U * (size_t)3U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_shared((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_d50(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_a4(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- PRIVATE_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair768\ngenerate_keypair_cc1(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_60 private_key = default_70_e3();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef public_key = default_8b_e3();\n  generate_keypair_unpacked_ab1(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_15(&public_key, &private_key);\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SERIALIZED_KEY_LEN= 2400\n*/\nstatic KRML_MUSTINLINE void\nserialize_kem_secret_key_mut_a4(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_7d *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d416(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d416(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d416(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_41_78(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d416(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SERIALIZED_KEY_LEN= 2400\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7d\nserialize_kem_secret_key_a4(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_7d out = { .data = { 0U } };\n  serialize_kem_secret_key_mut_a4(private_key, public_key, implicit_rejection_value, &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_db1(const Eurydice_arr_c7 *randomness)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair768\n  uu____0 = generate_keypair_cc1(ind_cpa_keypair_randomness);\n  Eurydice_arr_0e ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_5f public_key = uu____0.snd;\n  Eurydice_arr_7d\n  secret_key_serialized =\n    serialize_kem_secret_key_a4(Eurydice_array_to_slice_shared_f4(&ind_cpa_private_key),\n      Eurydice_array_to_slice_shared_ff(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_7d private_key = libcrux_ml_kem_types_from_b2_79(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_bc(private_key,\n      libcrux_ml_kem_types_from_51_3d(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_b6(Eurydice_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_911(\n  Eurydice_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_e3(Eurydice_slice_subslice_to_shared_72(public_key,\n      (size_t)1152U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_shared_6d(public_key, (size_t)1152U);\n  Eurydice_arr_ea *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_281(uu____0, &lvalue, false);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef\nbuild_unpacked_public_key_911(Eurydice_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef\n  unpacked_public_key = default_8b_e3();\n  build_unpacked_public_key_mut_911(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_LEN= 960\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2b\nencrypt_281(\n  Eurydice_borrow_slice_u8 public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef\n  unpacked_public_key = build_unpacked_public_key_911(public_key);\n  return encrypt_unpacked_281(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_a4(Eurydice_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_encapsulate_a11(\n  const Eurydice_arr_5f *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_b6(Eurydice_array_to_slice_shared_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_41_78(Eurydice_array_to_slice_shared_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_41_78(Eurydice_array_to_slice_shared_17(&to_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_2b\n  ciphertext =\n    encrypt_281(Eurydice_array_to_slice_shared_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_2b uu____2 = libcrux_ml_kem_types_from_19_52(ciphertext);\n  return (KRML_CLITERAL(tuple_f4){ .fst = uu____2, .snd = kdf_39_a4(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic Eurydice_arr_13 call_mut_0b_3e(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_3e(Eurydice_borrow_slice_u8 secret_key, const Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_3e(&lvalue););\n  Eurydice_arr_60 secret_key_unpacked = arr_struct;\n  deserialize_vector_e3(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_3e(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_661(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_64(Eurydice_array_to_slice_shared_51(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_3e(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_78(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_af to_hash = libcrux_ml_kem_utils_into_padded_array_66(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f2(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_52(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_3b(Eurydice_array_to_slice_shared_81(&to_hash));\n  Eurydice_arr_2b\n  expected_ciphertext = encrypt_281(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_a4(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_a4(shared_secret0);\n  Eurydice_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_52(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_shared_06(&expected_ciphertext),\n      Eurydice_array_to_slice_shared_01(&shared_secret),\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret0));\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_5b(\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_arr_3b *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_shared_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_13 uu____0 = deserialize_to_reduced_ring_element_84(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40\nshake128_init_absorb_final_23(const Eurydice_arr_56 *input)\n{\n  Eurydice_arr_c40 state = libcrux_sha3_avx2_x4_incremental_init();\n  libcrux_sha3_avx2_x4_incremental_shake128_absorb_final(&state,\n    Eurydice_array_to_slice_shared_e9(input->data),\n    Eurydice_array_to_slice_shared_e9(&input->data[1U]),\n    Eurydice_array_to_slice_shared_e9(&input->data[2U]),\n    Eurydice_array_to_slice_shared_e9(&input->data[3U]));\n  return state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final_41\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40\nshake128_init_absorb_final_41_23(const Eurydice_arr_56 *input)\n{\n  return shake128_init_absorb_final_23(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7c0\nshake128_squeeze_first_three_blocks_23(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_7c0\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_79 out0 = { .data = { 0U } };\n  Eurydice_arr_79 out1 = { .data = { 0U } };\n  Eurydice_arr_79 out2 = { .data = { 0U } };\n  Eurydice_arr_79 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(st,\n    Eurydice_array_to_slice_mut_48(&out0),\n    Eurydice_array_to_slice_mut_48(&out1),\n    Eurydice_array_to_slice_mut_48(&out2),\n    Eurydice_array_to_slice_mut_48(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  out.data[3U] = out3;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks_41\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7c0\nshake128_squeeze_first_three_blocks_41_23(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_first_three_blocks_23(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_74(\n  const Eurydice_arr_7c0 *randomness,\n  Eurydice_arr_cc *sampled_coefficients,\n  Eurydice_arr_24 *out\n)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_shared_d42(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9c shake128_squeeze_next_block_23(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_9c\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c5 out0 = { .data = { 0U } };\n  Eurydice_arr_c5 out1 = { .data = { 0U } };\n  Eurydice_arr_c5 out2 = { .data = { 0U } };\n  Eurydice_arr_c5 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(st,\n    Eurydice_array_to_slice_mut_2c(&out0),\n    Eurydice_array_to_slice_mut_2c(&out1),\n    Eurydice_array_to_slice_mut_2c(&out2),\n    Eurydice_array_to_slice_mut_2c(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  out.data[3U] = out3;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block_41\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9c\nshake128_squeeze_next_block_41_23(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_next_block_23(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_740(\n  const Eurydice_arr_9c *randomness,\n  Eurydice_arr_cc *sampled_coefficients,\n  Eurydice_arr_24 *out\n)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_shared_d43(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_13 call_mut_0a_280(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_shared_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b sample_from_xof_280(const Eurydice_arr_56 *seeds)\n{\n  Eurydice_arr_cc sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_24\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c40 xof_state = shake128_init_absorb_final_41_23(seeds);\n  Eurydice_arr_7c0 randomness0 = shake128_squeeze_first_three_blocks_41_23(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_74(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_9c randomness = shake128_squeeze_next_block_41_23(&xof_state);\n      done = sample_from_uniform_distribution_next_740(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_3b arr_mapped_str;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_280(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_280(Eurydice_arr_cd *A_transpose, const Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_56 seeds;\n    Eurydice_arr_31 repeat_expression[4U];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_3b sampled = sample_from_xof_280(&seeds);\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.H_41\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec H_41_23(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a0(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  Eurydice_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_shared_212(public_key, (size_t)1536U);\n  deserialize_ring_elements_reduced_5b(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_shared_5f4(public_key,\n        (size_t)1536U));\n  Eurydice_arr_cd *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_shared_5f4(public_key,\n        (size_t)1536U));\n  sample_matrix_A_280(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_41_23(Eurydice_array_to_slice_shared_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_5b(const Eurydice_arr_3b *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_84(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_74(\n  const Eurydice_arr_3b *t_as_ntt,\n  Eurydice_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_d1 *serialized\n)\n{\n  serialize_vector_5b(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d419(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f6(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_74(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *self,\n  Eurydice_arr_d1 *serialized\n)\n{\n  serialize_public_key_mut_74(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_74(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_74(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nserialize_public_key_74(const Eurydice_arr_3b *t_as_ntt, Eurydice_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_d1 public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_74(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nserialized_dd_74(const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_d9(serialize_public_key_74(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_74(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self\n)\n{\n  return serialized_dd_74(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PRIVATE_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair1024\nserialize_unpacked_secret_key_72(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 *public_key,\n  const Eurydice_arr_3b *private_key\n)\n{\n  Eurydice_arr_d1\n  public_key_serialized =\n    serialize_public_key_74(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&public_key->seed_for_A));\n  Eurydice_arr_df secret_key_serialized = { .data = { 0U } };\n  serialize_vector_5b(private_key, Eurydice_array_to_slice_mut_2f(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair1024){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_f8(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_a8 *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair1024\n  uu____0 =\n    serialize_unpacked_secret_key_72(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_df ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_d1 ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_4c(Eurydice_array_to_slice_shared_2f(&ind_cpa_private_key),\n    Eurydice_array_to_slice_shared_b50(&ind_cpa_public_key),\n    Eurydice_array_to_slice_shared_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_f8(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_a8 sk = libcrux_ml_kem_types_default_d3_0e();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_f8(self, &sk);\n  return sk;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_5b(Eurydice_borrow_slice_u8 secret_key, Eurydice_arr_3b *secret_as_ntt)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_84(Eurydice_slice_subslice_shared_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_13 call_mut_0a_7e0(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_shared_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b sample_from_xof_7e0(const Eurydice_arr_56 *seeds)\n{\n  Eurydice_arr_cc sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_24\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_4a\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_23(seeds);\n  Eurydice_arr_7c0\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_23(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_74(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_9c\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_23(&xof_state);\n      done = sample_from_uniform_distribution_next_740(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_3b arr_mapped_str;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_7e0(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_7e0(Eurydice_arr_cd *A_transpose, const Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_56 seeds;\n    Eurydice_arr_31 repeat_expression[4U];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_3b sampled = sample_from_xof_7e0(&seeds);\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_100(\n  Eurydice_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_5b(Eurydice_slice_subslice_to_shared_72(public_key,\n      (size_t)1536U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_shared_6d(public_key, (size_t)1536U);\n  Eurydice_arr_cd *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_7e0(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_b2(\n  const Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e3(Eurydice_array_to_slice_shared_68(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_5b(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_100(ind_cpa_public_key,\n    &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_shared_6d(ind_cpa_public_key, (size_t)1536U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_3b default_70_5b(void)\n{\n  Eurydice_arr_3b lit;\n  Eurydice_arr_13 repeat_expression[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n  memcpy(lit.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_13));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 default_8b_5b(void)\n{\n  Eurydice_arr_3b uu____0;\n  Eurydice_arr_13 repeat_expression0[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression0[i] = ZERO_d6_84(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)4U * sizeof (Eurydice_arr_13));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_3b repeat_expression1[4U];\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    Eurydice_arr_3b lit;\n    Eurydice_arr_13 repeat_expression[4U];\n    KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n    memcpy(lit.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_13));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)4U * sizeof (Eurydice_arr_3b));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4\nlibcrux_ml_kem_ind_cca_unpacked_default_30_5b(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4){\n        .ind_cpa_public_key = default_8b_5b(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_5b(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_d4\n  uu____0 =\n    { .ind_cpa_private_key = default_70_5b(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_5b()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.G_41\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7 G_41_23(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_39(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d48(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)4U;\n  return G_41_23(Eurydice_array_to_slice_shared_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b0 PRFxN_f5(const Eurydice_arr_890 *input)\n{\n  Eurydice_arr_3b0\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_89 out0 = { .data = { 0U } };\n  Eurydice_arr_89 out1 = { .data = { 0U } };\n  Eurydice_arr_89 out2 = { .data = { 0U } };\n  Eurydice_arr_89 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_shake256(Eurydice_array_to_slice_shared_b5(input->data),\n    Eurydice_array_to_slice_shared_b5(&input->data[1U]),\n    Eurydice_array_to_slice_shared_b5(&input->data[2U]),\n    Eurydice_array_to_slice_shared_b5(&input->data[3U]),\n    Eurydice_array_to_slice_mut_78(&out0),\n    Eurydice_array_to_slice_mut_78(&out1),\n    Eurydice_array_to_slice_mut_78(&out2),\n    Eurydice_array_to_slice_mut_78(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  out.data[3U] = out3;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN_41\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b0 PRFxN_41_f5(const Eurydice_arr_890 *input)\n{\n  return PRFxN_f5(input);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- ETA= 2\n- ETA_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_d60(\n  Eurydice_arr_3b *re_as_ntt,\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_890 prf_inputs;\n  Eurydice_arr_fa repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_23(&prf_inputs, domain_separator);\n  Eurydice_arr_3b0 prf_outputs = PRFxN_41_f5(&prf_inputs);\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_16(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_84(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_73_ab0(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_5b(Eurydice_arr_13 *myself, const Eurydice_arr_13 *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    myself->data[i0] = libcrux_ml_kem_vector_avx2_add_f5(myself->data[i0], &rhs->data[i0]););\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_5b(Eurydice_arr_13 *self, const Eurydice_arr_13 *rhs)\n{\n  add_to_ring_element_5b(self, rhs);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_5b(\n  Eurydice_arr_3b *t_as_ntt,\n  const Eurydice_arr_cd *matrix_A,\n  const Eurydice_arr_3b *s_as_ntt,\n  const Eurydice_arr_3b *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    const Eurydice_arr_3b *row = &matrix_A->data[i0];\n    Eurydice_arr_13 uu____0 = ZERO_d6_84();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR4(i1,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i1;\n      const Eurydice_arr_13 *matrix_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_5b(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_84(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_ab0(\n  Eurydice_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_3b *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_39(key_generation_seed);\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_cd *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_280(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_d60(private_key, &prf_input, 0U);\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_ab0(&lvalue););\n  Eurydice_arr_3b error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_d60(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_5b(&public_key->t_as_ntt, &public_key->A, &private_key[0U], &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_13 call_mut_b4_5b(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_3b call_mut_22_5b(void **_)\n{\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_5b(&lvalue););\n  return arr_struct;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_cd transpose_a_5b(Eurydice_arr_cd ind_cpa_a)\n{\n  Eurydice_arr_cd arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_5b(&lvalue););\n  Eurydice_arr_cd A = arr_struct;\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 uu____0 = clone_c1_84(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db0(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *out\n)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_ab0(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_cd A = transpose_a_5b(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_d1\n  pk_serialized =\n    serialize_public_key_74(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_41_23(Eurydice_array_to_slice_shared_b50(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_39(Eurydice_borrow_slice_u8 randomness, Eurydice_borrow_slice_u8 pk_hash)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_41_23(Eurydice_array_to_slice_shared_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_3b, libcrux_ml_kem_polynomial_PolynomialRingElement_f6\n\n*/\ntypedef struct tuple_03_s\n{\n  Eurydice_arr_3b fst;\n  Eurydice_arr_13 snd;\n}\ntuple_03;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_f1_780(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_dd_780(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_d60(\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_3b *error_1\n)\n{\n  Eurydice_arr_890 prf_inputs;\n  Eurydice_arr_fa repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_23(&prf_inputs, domain_separator);\n  Eurydice_arr_3b0 prf_outputs = PRFxN_41_f5(&prf_inputs);\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_16(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_89 PRF_41_f50(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_13 call_mut_a8_5b(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_5b(Eurydice_arr_13 *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_84(&zeta_i, re);\n  invert_ntt_at_layer_2_84(&zeta_i, re);\n  invert_ntt_at_layer_3_84(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b\ncompute_vector_u_5b(\n  const Eurydice_arr_cd *a_as_ntt,\n  const Eurydice_arr_3b *r_as_ntt,\n  const Eurydice_arr_3b *error_1\n)\n{\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_5b(&lvalue););\n  Eurydice_arr_3b result = arr_struct;\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    const Eurydice_arr_3b *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      const Eurydice_arr_13 *a_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_5b(&result.data[i1], &product););\n    invert_ntt_montgomery_5b(&result.data[i1]);\n    add_error_reduce_d6_84(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- OUT_LEN= 352\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_e7 compress_then_serialize_11_fe(const Eurydice_arr_13 *re)\n{\n  Eurydice_arr_e7 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i\n    coefficient =\n      compress_f5_c4(libcrux_ml_kem_vector_avx2_to_unsigned_representative_f5(re->data[i0]));\n    Eurydice_arr_80 bytes = libcrux_ml_kem_vector_avx2_serialize_11_f5(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d418(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)22U * i0,\n            .end = (size_t)22U * i0 + (size_t)22U\n          }\n        )),\n      Eurydice_array_to_slice_shared_98(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- COMPRESSION_FACTOR= 11\n- OUT_LEN= 352\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_e7\ncompress_then_serialize_ring_element_u_d4(const Eurydice_arr_13 *re)\n{\n  return compress_then_serialize_11_fe(re);\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- OUT_LEN= 1408\n- COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_f8(Eurydice_arr_3b input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)1408U / (size_t)4U),\n            .end = (i0 + (size_t)1U) * ((size_t)1408U / (size_t)4U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_e7 lvalue = compress_then_serialize_ring_element_u_d4(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_25(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_03\nencrypt_c1_780(\n  Eurydice_borrow_slice_u8 randomness,\n  const Eurydice_arr_cd *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_3b arr_struct0;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_780(&lvalue););\n  Eurydice_arr_3b r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_d60(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_780(&lvalue););\n  Eurydice_arr_3b error_1 = arr_struct;\n  uint8_t\n  domain_separator = sample_ring_element_cbd_d60(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_41_f50(Eurydice_array_to_slice_shared_b5(&prf_input));\n  Eurydice_arr_13\n  error_2 = sample_from_binomial_distribution_16(Eurydice_array_to_slice_shared_78(&prf_output));\n  Eurydice_arr_3b u = compute_vector_u_5b(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_f8(u, ciphertext);\n  return (KRML_CLITERAL(tuple_03){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_ring_element_v_5b(\n  const Eurydice_arr_3b *t_as_ntt,\n  const Eurydice_arr_3b *r_as_ntt,\n  const Eurydice_arr_13 *error_2,\n  const Eurydice_arr_13 *message\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_5b(&result, &product););\n  invert_ntt_montgomery_5b(&result);\n  return add_message_error_reduce_d6_84(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- COMPRESSION_FACTOR= 5\n- OUT_LEN= 160\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_72(Eurydice_arr_13 re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_5_84(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- V_COMPRESSION_FACTOR= 5\n- C2_LEN= 160\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_72(\n  const Eurydice_arr_3b *t_as_ntt,\n  const Eurydice_arr_3b *r_as_ntt,\n  const Eurydice_arr_13 *error_2,\n  const Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_13 message_as_ring_element = deserialize_then_decompress_message_84(message);\n  Eurydice_arr_13\n  v = compute_ring_element_v_5b(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_72(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_LEN= 1408\n- C2_LEN= 160\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nencrypt_unpacked_280(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 *public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_d1 ciphertext = { .data = { 0U } };\n  tuple_03\n  uu____0 =\n    encrypt_c1_780(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d419(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)1408U })));\n  Eurydice_arr_3b r_as_ntt = uu____0.fst;\n  Eurydice_arr_13 error_2 = uu____0.snd;\n  encrypt_c2_72(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f6(&ciphertext, (size_t)1408U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a80(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_39(Eurydice_array_to_slice_shared_01(randomness),\n      Eurydice_array_to_slice_shared_01(&public_key->public_key_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_d1\n  ciphertext =\n    encrypt_unpacked_280(&public_key->ind_cpa_public_key,\n      randomness,\n      pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_25){\n        .fst = libcrux_ml_kem_types_from_19_d9(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- U_COMPRESSION_FACTOR= 11\n*/\nstatic Eurydice_arr_13 call_mut_35_72(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_ring_element_u_95(Eurydice_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_11_84(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- VECTOR_U_COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE void ntt_vector_u_95(Eurydice_arr_13 *re)\n{\n  size_t zeta_i = (size_t)0U;\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)7U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_84(&zeta_i, re);\n  ntt_at_layer_2_84(&zeta_i, re);\n  ntt_at_layer_1_84(&zeta_i, re);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- U_COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b\ndeserialize_then_decompress_u_72(const Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_72(&lvalue););\n  Eurydice_arr_3b u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)1568U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_shared_d48(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_95(u_bytes);\n    ntt_vector_u_95(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_ring_element_v_74(Eurydice_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_5_84(serialized);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_message_5b(\n  const Eurydice_arr_13 *v,\n  const Eurydice_arr_3b *secret_as_ntt,\n  const Eurydice_arr_3b *u_as_ntt\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_5b(&result, &product););\n  invert_ntt_montgomery_5b(&result);\n  return subtract_reduce_d6_84(v, result);\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_b2(const Eurydice_arr_3b *secret_key, const Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_3b u_as_ntt = deserialize_then_decompress_u_72(ciphertext);\n  Eurydice_arr_13\n  v =\n    deserialize_then_decompress_ring_element_v_74(Eurydice_array_to_subslice_from_shared_5f4(ciphertext,\n        (size_t)1408U));\n  Eurydice_arr_13 message = compute_message_5b(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_84(message);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 4\n- LEN= 32\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec PRF_41_f5(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d90(\n  const libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_b2(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_shared_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_23(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_14\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_49(Eurydice_array_to_slice_shared_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f5(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_d9(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_f5(Eurydice_array_to_slice_shared_720(&to_hash));\n  Eurydice_arr_d1\n  expected_ciphertext =\n    encrypt_unpacked_280(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_d9(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_shared_b50(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_13 call_mut_0b_5b(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b\ndeserialize_ring_elements_reduced_out_5b(Eurydice_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_5b(&lvalue););\n  Eurydice_arr_3b deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_5b(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_74(const Eurydice_arr_d1 *public_key)\n{\n  Eurydice_arr_3b\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_5b(Eurydice_array_to_subslice_to_shared_212(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)));\n  Eurydice_arr_d1\n  public_key_serialized =\n    serialize_public_key_74(&deserialized_pk,\n      Eurydice_array_to_subslice_from_shared_5f4(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)));\n  return Eurydice_array_eq((size_t)1568U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_f8(const Eurydice_arr_a8 *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_41_23(Eurydice_array_to_subslice_shared_d49(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)4U,\n            .end = (size_t)768U * (size_t)4U + (size_t)32U\n          }\n        )));\n  Eurydice_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_shared_d49(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)4U + (size_t)32U,\n          .end = (size_t)768U * (size_t)4U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_shared((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_b3(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_f8(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- PRIVATE_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair1024\ngenerate_keypair_cc0(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_3b private_key = default_70_5b();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 public_key = default_8b_5b();\n  generate_keypair_unpacked_ab0(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_72(&public_key, &private_key);\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SERIALIZED_KEY_LEN= 3168\n*/\nstatic KRML_MUSTINLINE void\nserialize_kem_secret_key_mut_f8(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_a8 *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d420(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d420(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d420(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_41_23(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d420(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SERIALIZED_KEY_LEN= 3168\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_a8\nserialize_kem_secret_key_f8(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_a8 out = { .data = { 0U } };\n  serialize_kem_secret_key_mut_f8(private_key, public_key, implicit_rejection_value, &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_db0(const Eurydice_arr_c7 *randomness)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair1024\n  uu____0 = generate_keypair_cc0(ind_cpa_keypair_randomness);\n  Eurydice_arr_df ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_d1 public_key = uu____0.snd;\n  Eurydice_arr_a8\n  secret_key_serialized =\n    serialize_kem_secret_key_f8(Eurydice_array_to_slice_shared_2f(&ind_cpa_private_key),\n      Eurydice_array_to_slice_shared_b50(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_a8 private_key = libcrux_ml_kem_types_from_b2_0e(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_70(private_key,\n      libcrux_ml_kem_types_from_51_d9(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_39(Eurydice_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_910(\n  Eurydice_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_5b(Eurydice_slice_subslice_to_shared_72(public_key,\n      (size_t)1536U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_shared_6d(public_key, (size_t)1536U);\n  Eurydice_arr_cd *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_280(uu____0, &lvalue, false);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4\nbuild_unpacked_public_key_910(Eurydice_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4\n  unpacked_public_key = default_8b_5b();\n  build_unpacked_public_key_mut_910(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_LEN= 1408\n- C2_LEN= 160\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nencrypt_280(\n  Eurydice_borrow_slice_u8 public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4\n  unpacked_public_key = build_unpacked_public_key_910(public_key);\n  return encrypt_unpacked_280(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_f8(Eurydice_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_encapsulate_a10(\n  const Eurydice_arr_d1 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_39(Eurydice_array_to_slice_shared_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_41_23(Eurydice_array_to_slice_shared_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_41_23(Eurydice_array_to_slice_shared_17(&to_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_d1\n  ciphertext =\n    encrypt_280(Eurydice_array_to_slice_shared_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_d1 uu____2 = libcrux_ml_kem_types_from_19_d9(ciphertext);\n  return (KRML_CLITERAL(tuple_25){ .fst = uu____2, .snd = kdf_39_f8(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic Eurydice_arr_13 call_mut_0b_b2(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_b2(Eurydice_borrow_slice_u8 secret_key, const Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_b2(&lvalue););\n  Eurydice_arr_3b secret_key_unpacked = arr_struct;\n  deserialize_vector_5b(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_b2(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_660(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e3(Eurydice_array_to_slice_shared_68(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_b2(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_23(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_14 to_hash = libcrux_ml_kem_utils_into_padded_array_49(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f5(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_d9(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_f5(Eurydice_array_to_slice_shared_720(&to_hash));\n  Eurydice_arr_d1\n  expected_ciphertext = encrypt_280(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_f8(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_f8(shared_secret0);\n  Eurydice_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_d9(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_shared_b50(&expected_ciphertext),\n      Eurydice_array_to_slice_shared_01(&shared_secret),\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret0));\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_16(\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_arr_ee *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_shared_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_13 uu____0 = deserialize_to_reduced_ring_element_84(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40\nshake128_init_absorb_final_af(const Eurydice_arr_bf *input)\n{\n  Eurydice_arr_c40 state = libcrux_sha3_avx2_x4_incremental_init();\n  libcrux_sha3_avx2_x4_incremental_shake128_absorb_final(&state,\n    Eurydice_array_to_slice_shared_e9(input->data),\n    Eurydice_array_to_slice_shared_e9(&input->data[1U]),\n    Eurydice_array_to_slice_shared_e9(input->data),\n    Eurydice_array_to_slice_shared_e9(input->data));\n  return state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final_41\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40\nshake128_init_absorb_final_41_af(const Eurydice_arr_bf *input)\n{\n  return shake128_init_absorb_final_af(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b8\nshake128_squeeze_first_three_blocks_af(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_b8 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_79 out0 = { .data = { 0U } };\n  Eurydice_arr_79 out1 = { .data = { 0U } };\n  Eurydice_arr_79 out2 = { .data = { 0U } };\n  Eurydice_arr_79 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(st,\n    Eurydice_array_to_slice_mut_48(&out0),\n    Eurydice_array_to_slice_mut_48(&out1),\n    Eurydice_array_to_slice_mut_48(&out2),\n    Eurydice_array_to_slice_mut_48(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks_41\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b8\nshake128_squeeze_first_three_blocks_41_af(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_first_three_blocks_af(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_ce(\n  const Eurydice_arr_b8 *randomness,\n  Eurydice_arr_85 *sampled_coefficients,\n  Eurydice_arr_800 *out\n)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_shared_d42(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5b0 shake128_squeeze_next_block_af(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_5b0 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c5 out0 = { .data = { 0U } };\n  Eurydice_arr_c5 out1 = { .data = { 0U } };\n  Eurydice_arr_c5 out2 = { .data = { 0U } };\n  Eurydice_arr_c5 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(st,\n    Eurydice_array_to_slice_mut_2c(&out0),\n    Eurydice_array_to_slice_mut_2c(&out1),\n    Eurydice_array_to_slice_mut_2c(&out2),\n    Eurydice_array_to_slice_mut_2c(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block_41\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5b0\nshake128_squeeze_next_block_41_af(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_next_block_af(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_ce0(\n  const Eurydice_arr_5b0 *randomness,\n  Eurydice_arr_85 *sampled_coefficients,\n  Eurydice_arr_800 *out\n)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_shared_d43(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_13 call_mut_0a_28(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_shared_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ee sample_from_xof_28(const Eurydice_arr_bf *seeds)\n{\n  Eurydice_arr_85 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_800 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c40 xof_state = shake128_init_absorb_final_41_af(seeds);\n  Eurydice_arr_b8 randomness0 = shake128_squeeze_first_three_blocks_41_af(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_ce(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_5b0 randomness = shake128_squeeze_next_block_41_af(&xof_state);\n      done = sample_from_uniform_distribution_next_ce0(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_ee arr_mapped_str;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_28(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_28(Eurydice_arr_e2 *A_transpose, const Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_bf seeds;\n    Eurydice_arr_31 repeat_expression[2U];\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_ee sampled = sample_from_xof_28(&seeds);\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.H_41\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec H_41_af(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  Eurydice_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_shared_210(public_key, (size_t)768U);\n  deserialize_ring_elements_reduced_16(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_shared_5f1(public_key,\n        (size_t)768U));\n  Eurydice_arr_e2 *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_shared_5f1(public_key,\n        (size_t)768U));\n  sample_matrix_A_28(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_41_af(Eurydice_array_to_slice_shared_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_16(const Eurydice_arr_ee *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_84(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_ce(\n  const Eurydice_arr_ee *t_as_ntt,\n  Eurydice_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_03 *serialized\n)\n{\n  serialize_vector_16(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d46(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_ce(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *self,\n  Eurydice_arr_03 *serialized\n)\n{\n  serialize_public_key_mut_ce(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_ce(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_ce(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_03\nserialize_public_key_ce(const Eurydice_arr_ee *t_as_ntt, Eurydice_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_03 public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_ce(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_03\nserialized_dd_ce(const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_df(serialize_public_key_ce(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_03\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_ce(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self\n)\n{\n  return serialized_dd_ce(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PRIVATE_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair512\nserialize_unpacked_secret_key_e5(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 *public_key,\n  const Eurydice_arr_ee *private_key\n)\n{\n  Eurydice_arr_03\n  public_key_serialized =\n    serialize_public_key_ce(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&public_key->seed_for_A));\n  Eurydice_arr_d2 secret_key_serialized = { .data = { 0U } };\n  serialize_vector_16(private_key, Eurydice_array_to_slice_mut_27(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair512){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_4e(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair512\n  uu____0 =\n    serialize_unpacked_secret_key_e5(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_d2 ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_03 ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_e2(Eurydice_array_to_slice_shared_27(&ind_cpa_private_key),\n    Eurydice_array_to_slice_shared_3b(&ind_cpa_public_key),\n    Eurydice_array_to_slice_shared_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_4e(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_ab0 sk = libcrux_ml_kem_types_default_d3_be();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_4e(self, &sk);\n  return sk;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_16(Eurydice_borrow_slice_u8 secret_key, Eurydice_arr_ee *secret_as_ntt)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_84(Eurydice_slice_subslice_shared_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_13 call_mut_0a_7e(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_shared_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ee sample_from_xof_7e(const Eurydice_arr_bf *seeds)\n{\n  Eurydice_arr_85 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_800 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_e3\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_af(seeds);\n  Eurydice_arr_b8\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_af(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_ce(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_5b0\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_af(&xof_state);\n      done = sample_from_uniform_distribution_next_ce0(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_ee arr_mapped_str;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_7e(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_7e(Eurydice_arr_e2 *A_transpose, const Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_bf seeds;\n    Eurydice_arr_31 repeat_expression[2U];\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_ee sampled = sample_from_xof_7e(&seeds);\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_10(\n  Eurydice_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_16(Eurydice_slice_subslice_to_shared_72(public_key,\n      (size_t)768U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_shared_6d(public_key, (size_t)768U);\n  Eurydice_arr_e2 *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_7e(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_a4(\n  const Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e0(Eurydice_array_to_slice_shared_99(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_16(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_10(ind_cpa_public_key, &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_shared_6d(ind_cpa_public_key, (size_t)768U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_ee default_70_16(void)\n{\n  Eurydice_arr_ee lit;\n  Eurydice_arr_13 repeat_expression[2U];\n  KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n  memcpy(lit.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_13));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 default_8b_16(void)\n{\n  Eurydice_arr_ee uu____0;\n  Eurydice_arr_13 repeat_expression0[2U];\n  KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression0[i] = ZERO_d6_84(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)2U * sizeof (Eurydice_arr_13));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_ee repeat_expression1[2U];\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    Eurydice_arr_ee lit;\n    Eurydice_arr_13 repeat_expression[2U];\n    KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n    memcpy(lit.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_13));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)2U * sizeof (Eurydice_arr_ee));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7\nlibcrux_ml_kem_ind_cca_unpacked_default_30_16(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7){\n        .ind_cpa_public_key = default_8b_16(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_16(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_c7\n  uu____0 =\n    { .ind_cpa_private_key = default_70_16(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_16()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.G_41\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7 G_41_af(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_b1(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d48(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)2U;\n  return G_41_af(Eurydice_array_to_slice_shared_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN\nwith const generics\n- K= 2\n- LEN= 192\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_eb PRFxN_d5(const Eurydice_arr_4d *input)\n{\n  Eurydice_arr_eb out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_1c out0 = { .data = { 0U } };\n  Eurydice_arr_1c out1 = { .data = { 0U } };\n  Eurydice_arr_1c out2 = { .data = { 0U } };\n  Eurydice_arr_1c out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_shake256(Eurydice_array_to_slice_shared_b5(input->data),\n    Eurydice_array_to_slice_shared_b5(&input->data[1U]),\n    Eurydice_array_to_slice_shared_b5(input->data),\n    Eurydice_array_to_slice_shared_b5(input->data),\n    Eurydice_array_to_slice_mut_d9(&out0),\n    Eurydice_array_to_slice_mut_d9(&out1),\n    Eurydice_array_to_slice_mut_d9(&out2),\n    Eurydice_array_to_slice_mut_d9(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN_41\nwith const generics\n- K= 2\n- LEN= 192\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_eb PRFxN_41_d5(const Eurydice_arr_4d *input)\n{\n  return PRFxN_d5(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- ETA= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsample_from_binomial_distribution_e3(Eurydice_borrow_slice_u8 randomness)\n{\n  return sample_from_binomial_distribution_3_84(randomness);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- ETA= 3\n- ETA_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_d6(\n  Eurydice_arr_ee *re_as_ntt,\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_4d prf_inputs;\n  Eurydice_arr_fa repeat_expression[2U];\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_af(&prf_inputs, domain_separator);\n  Eurydice_arr_eb prf_outputs = PRFxN_41_d5(&prf_inputs);\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_e3(Eurydice_array_to_slice_shared_d9(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_84(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic Eurydice_arr_13 call_mut_73_ab(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_16(Eurydice_arr_13 *myself, const Eurydice_arr_13 *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    myself->data[i0] = libcrux_ml_kem_vector_avx2_add_f5(myself->data[i0], &rhs->data[i0]););\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_16(Eurydice_arr_13 *self, const Eurydice_arr_13 *rhs)\n{\n  add_to_ring_element_16(self, rhs);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_16(\n  Eurydice_arr_ee *t_as_ntt,\n  const Eurydice_arr_e2 *matrix_A,\n  const Eurydice_arr_ee *s_as_ntt,\n  const Eurydice_arr_ee *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    const Eurydice_arr_ee *row = &matrix_A->data[i0];\n    Eurydice_arr_13 uu____0 = ZERO_d6_84();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR2(i1,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i1;\n      const Eurydice_arr_13 *matrix_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_16(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_84(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_ab(\n  Eurydice_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_ee *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_b1(key_generation_seed);\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_e2 *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_28(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_d6(private_key, &prf_input, 0U);\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_ab(&lvalue););\n  Eurydice_arr_ee error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_d6(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_16(&public_key->t_as_ntt, &public_key->A, &private_key[0U], &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_13 call_mut_b4_16(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_ee call_mut_22_16(void **_)\n{\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_16(&lvalue););\n  return arr_struct;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_e2 transpose_a_16(Eurydice_arr_e2 ind_cpa_a)\n{\n  Eurydice_arr_e2 arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_16(&lvalue););\n  Eurydice_arr_e2 A = arr_struct;\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 uu____0 = clone_c1_84(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *out\n)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_ab(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_e2 A = transpose_a_16(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_03\n  pk_serialized =\n    serialize_public_key_ce(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_41_af(Eurydice_array_to_slice_shared_3b(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_b1(Eurydice_borrow_slice_u8 randomness, Eurydice_borrow_slice_u8 pk_hash)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_41_af(Eurydice_array_to_slice_shared_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_ee, libcrux_ml_kem_polynomial_PolynomialRingElement_f6\n\n*/\ntypedef struct tuple_91_s\n{\n  Eurydice_arr_ee fst;\n  Eurydice_arr_13 snd;\n}\ntuple_91;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_f1_78(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_dd_78(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_f3 PRFxN_d50(const Eurydice_arr_4d *input)\n{\n  Eurydice_arr_f3 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_89 out0 = { .data = { 0U } };\n  Eurydice_arr_89 out1 = { .data = { 0U } };\n  Eurydice_arr_89 out2 = { .data = { 0U } };\n  Eurydice_arr_89 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_shake256(Eurydice_array_to_slice_shared_b5(input->data),\n    Eurydice_array_to_slice_shared_b5(&input->data[1U]),\n    Eurydice_array_to_slice_shared_b5(input->data),\n    Eurydice_array_to_slice_shared_b5(input->data),\n    Eurydice_array_to_slice_mut_78(&out0),\n    Eurydice_array_to_slice_mut_78(&out1),\n    Eurydice_array_to_slice_mut_78(&out2),\n    Eurydice_array_to_slice_mut_78(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN_41\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_f3 PRFxN_41_d50(const Eurydice_arr_4d *input)\n{\n  return PRFxN_d50(input);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_d6(\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_ee *error_1\n)\n{\n  Eurydice_arr_4d prf_inputs;\n  Eurydice_arr_fa repeat_expression[2U];\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_af(&prf_inputs, domain_separator);\n  Eurydice_arr_f3 prf_outputs = PRFxN_41_d50(&prf_inputs);\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_16(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_89 PRF_41_d50(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_13 call_mut_a8_16(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_16(Eurydice_arr_13 *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_84(&zeta_i, re);\n  invert_ntt_at_layer_2_84(&zeta_i, re);\n  invert_ntt_at_layer_3_84(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ee\ncompute_vector_u_16(\n  const Eurydice_arr_e2 *a_as_ntt,\n  const Eurydice_arr_ee *r_as_ntt,\n  const Eurydice_arr_ee *error_1\n)\n{\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_16(&lvalue););\n  Eurydice_arr_ee result = arr_struct;\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    const Eurydice_arr_ee *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      const Eurydice_arr_13 *a_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_16(&result.data[i1], &product););\n    invert_ntt_montgomery_16(&result.data[i1]);\n    add_error_reduce_d6_84(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- OUT_LEN= 640\n- COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_4e(Eurydice_arr_ee input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)640U / (size_t)2U),\n            .end = (i0 + (size_t)1U) * ((size_t)640U / (size_t)2U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b0 lvalue = compress_then_serialize_ring_element_u_81(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_56(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_91\nencrypt_c1_78(\n  Eurydice_borrow_slice_u8 randomness,\n  const Eurydice_arr_e2 *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_ee arr_struct0;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_78(&lvalue););\n  Eurydice_arr_ee r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_d6(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_78(&lvalue););\n  Eurydice_arr_ee error_1 = arr_struct;\n  uint8_t domain_separator = sample_ring_element_cbd_d6(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_41_d50(Eurydice_array_to_slice_shared_b5(&prf_input));\n  Eurydice_arr_13\n  error_2 = sample_from_binomial_distribution_16(Eurydice_array_to_slice_shared_78(&prf_output));\n  Eurydice_arr_ee u = compute_vector_u_16(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_4e(u, ciphertext);\n  return (KRML_CLITERAL(tuple_91){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_ring_element_v_16(\n  const Eurydice_arr_ee *t_as_ntt,\n  const Eurydice_arr_ee *r_as_ntt,\n  const Eurydice_arr_13 *error_2,\n  const Eurydice_arr_13 *message\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_16(&result, &product););\n  invert_ntt_montgomery_16(&result);\n  return add_message_error_reduce_d6_84(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- COMPRESSION_FACTOR= 4\n- OUT_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_e5(Eurydice_arr_13 re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_4_84(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- V_COMPRESSION_FACTOR= 4\n- C2_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_e5(\n  const Eurydice_arr_ee *t_as_ntt,\n  const Eurydice_arr_ee *r_as_ntt,\n  const Eurydice_arr_13 *error_2,\n  const Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_13 message_as_ring_element = deserialize_then_decompress_message_84(message);\n  Eurydice_arr_13\n  v = compute_ring_element_v_16(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_e5(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_LEN= 640\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d2\nencrypt_unpacked_28(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 *public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_d2 ciphertext = { .data = { 0U } };\n  tuple_91\n  uu____0 =\n    encrypt_c1_78(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d410(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)640U })));\n  Eurydice_arr_ee r_as_ntt = uu____0.fst;\n  Eurydice_arr_13 error_2 = uu____0.snd;\n  encrypt_c2_e5(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f1(&ciphertext, (size_t)640U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a8(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_b1(Eurydice_array_to_slice_shared_01(randomness),\n      Eurydice_array_to_slice_shared_01(&public_key->public_key_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_d2\n  ciphertext = encrypt_unpacked_28(&public_key->ind_cpa_public_key, randomness, pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_ab){\n        .fst = libcrux_ml_kem_types_from_19_80(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic Eurydice_arr_13 call_mut_35_e5(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ee\ndeserialize_then_decompress_u_e5(const Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_e5(&lvalue););\n  Eurydice_arr_ee u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)768U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_shared_d41(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_d0(u_bytes);\n    ntt_vector_u_d0(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_ring_element_v_ce(Eurydice_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_4_84(serialized);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_message_16(\n  const Eurydice_arr_13 *v,\n  const Eurydice_arr_ee *secret_as_ntt,\n  const Eurydice_arr_ee *u_as_ntt\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_16(&result, &product););\n  invert_ntt_montgomery_16(&result);\n  return subtract_reduce_d6_84(v, result);\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_a4(const Eurydice_arr_ee *secret_key, const Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_ee u_as_ntt = deserialize_then_decompress_u_e5(ciphertext);\n  Eurydice_arr_13\n  v =\n    deserialize_then_decompress_ring_element_v_ce(Eurydice_array_to_subslice_from_shared_5f(ciphertext,\n        (size_t)640U));\n  Eurydice_arr_13 message = compute_message_16(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_84(message);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 2\n- LEN= 32\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec PRF_41_d5(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d9(\n  const libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_a4(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_shared_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_af(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_03\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_df(Eurydice_array_to_slice_shared_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_80(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_d5(Eurydice_array_to_slice_shared_3b(&to_hash));\n  Eurydice_arr_d2\n  expected_ciphertext =\n    encrypt_unpacked_28(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_80(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_shared_27(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_13 call_mut_0b_16(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ee\ndeserialize_ring_elements_reduced_out_16(Eurydice_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_16(&lvalue););\n  Eurydice_arr_ee deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_16(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_ce(const Eurydice_arr_03 *public_key)\n{\n  Eurydice_arr_ee\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_16(Eurydice_array_to_subslice_to_shared_210(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)));\n  Eurydice_arr_03\n  public_key_serialized =\n    serialize_public_key_ce(&deserialized_pk,\n      Eurydice_array_to_subslice_from_shared_5f1(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)));\n  return Eurydice_array_eq((size_t)800U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_37(const Eurydice_arr_ab0 *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_41_af(Eurydice_array_to_subslice_shared_d45(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)2U,\n            .end = (size_t)768U * (size_t)2U + (size_t)32U\n          }\n        )));\n  Eurydice_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_shared_d45(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)2U + (size_t)32U,\n          .end = (size_t)768U * (size_t)2U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_shared((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_85(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_37(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- PRIVATE_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair512\ngenerate_keypair_cc(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_ee private_key = default_70_16();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 public_key = default_8b_16();\n  generate_keypair_unpacked_ab(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_e5(&public_key, &private_key);\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SERIALIZED_KEY_LEN= 1632\n*/\nstatic KRML_MUSTINLINE void\nserialize_kem_secret_key_mut_37(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d412(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d412(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d412(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_41_af(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d412(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SERIALIZED_KEY_LEN= 1632\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ab0\nserialize_kem_secret_key_37(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_ab0 out = { .data = { 0U } };\n  serialize_kem_secret_key_mut_37(private_key, public_key, implicit_rejection_value, &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_ind_cca_generate_keypair_db(const Eurydice_arr_c7 *randomness)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair512\n  uu____0 = generate_keypair_cc(ind_cpa_keypair_randomness);\n  Eurydice_arr_d2 ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_03 public_key = uu____0.snd;\n  Eurydice_arr_ab0\n  secret_key_serialized =\n    serialize_kem_secret_key_37(Eurydice_array_to_slice_shared_27(&ind_cpa_private_key),\n      Eurydice_array_to_slice_shared_3b(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_ab0 private_key = libcrux_ml_kem_types_from_b2_be(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_d6(private_key,\n      libcrux_ml_kem_types_from_51_df(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_b1(Eurydice_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_91(\n  Eurydice_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_16(Eurydice_slice_subslice_to_shared_72(public_key,\n      (size_t)768U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_shared_6d(public_key, (size_t)768U);\n  Eurydice_arr_e2 *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_28(uu____0, &lvalue, false);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7\nbuild_unpacked_public_key_91(Eurydice_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7\n  unpacked_public_key = default_8b_16();\n  build_unpacked_public_key_mut_91(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_LEN= 640\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d2\nencrypt_28(\n  Eurydice_borrow_slice_u8 public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7\n  unpacked_public_key = build_unpacked_public_key_91(public_key);\n  return encrypt_unpacked_28(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_37(Eurydice_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_encapsulate_a1(\n  const Eurydice_arr_03 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_b1(Eurydice_array_to_slice_shared_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_41_af(Eurydice_array_to_slice_shared_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_41_af(Eurydice_array_to_slice_shared_17(&to_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_d2\n  ciphertext =\n    encrypt_28(Eurydice_array_to_slice_shared_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_d2 uu____2 = libcrux_ml_kem_types_from_19_80(ciphertext);\n  return (KRML_CLITERAL(tuple_ab){ .fst = uu____2, .snd = kdf_39_37(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic Eurydice_arr_13 call_mut_0b_a4(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_a4(Eurydice_borrow_slice_u8 secret_key, const Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_a4(&lvalue););\n  Eurydice_arr_ee secret_key_unpacked = arr_struct;\n  deserialize_vector_16(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_a4(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_66(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e0(Eurydice_array_to_slice_shared_99(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_a4(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_af(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_03 to_hash = libcrux_ml_kem_utils_into_padded_array_df(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_80(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_d5(Eurydice_array_to_slice_shared_3b(&to_hash));\n  Eurydice_arr_d2\n  expected_ciphertext = encrypt_28(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_37(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_37(shared_secret0);\n  Eurydice_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_80(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_shared_27(&expected_ciphertext),\n      Eurydice_array_to_slice_shared_01(&shared_secret),\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret0));\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem_avx2_H\n#define libcrux_mlkem_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"intrinsics/libcrux_intrinsics_avx2.h\"\n\n#include \"libcrux_sha3_avx2.h\"\n#include \"libcrux_core.h\"\n\nEurydice_arr_c7 libcrux_ml_kem_hash_functions_avx2_G(Eurydice_borrow_slice_u8 input);\n\nEurydice_arr_ec libcrux_ml_kem_hash_functions_avx2_H(Eurydice_borrow_slice_u8 input);\n\ntypedef libcrux_sha3_avx2_x4_incremental_KeccakState\nlibcrux_ml_kem_hash_functions_avx2_Simd256Hash;\n\ntypedef __m256i libcrux_ml_kem_vector_avx2_SIMD256Vector;\n\n__m256i libcrux_ml_kem_vector_avx2_vec_zero(void);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_ZERO_f5(void);\n\n__m256i libcrux_ml_kem_vector_avx2_vec_from_i16_array(Eurydice_borrow_slice_i16 array);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_from_i16_array_f5(Eurydice_borrow_slice_i16 array);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_avx2_vec_to_i16_array(__m256i v);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_avx2_to_i16_array_f5(__m256i x);\n\n__m256i libcrux_ml_kem_vector_avx2_from_bytes(Eurydice_borrow_slice_u8 array);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_from_bytes_f5(Eurydice_borrow_slice_u8 array);\n\nvoid libcrux_ml_kem_vector_avx2_to_bytes(__m256i x, Eurydice_mut_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nvoid libcrux_ml_kem_vector_avx2_to_bytes_f5(__m256i x, Eurydice_mut_borrow_slice_u8 bytes);\n\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_add(__m256i lhs, __m256i rhs);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_add_f5(__m256i lhs, const __m256i *rhs);\n\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_sub(__m256i lhs, __m256i rhs);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_sub_f5(__m256i lhs, const __m256i *rhs);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_multiply_by_constant(__m256i vector, int16_t constant);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_multiply_by_constant_f5(__m256i vec, int16_t c);\n\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_cond_subtract_3329(__m256i vector);\n\n__m256i libcrux_ml_kem_vector_avx2_cond_subtract_3329(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_cond_subtract_3329_f5(__m256i vector);\n\n#define LIBCRUX_ML_KEM_VECTOR_AVX2_ARITHMETIC_BARRETT_MULTIPLIER (20159)\n\n/**\n See Section 3.2 of the implementation notes document for an explanation\n of this code.\n*/\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_barrett_reduce(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_barrett_reduce_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constant(\n  __m256i vector,\n  int16_t constant\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(__m256i vector, int16_t constant);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_bitwise_and_with_constant(\n  __m256i vector,\n  int16_t constant\n);\n\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_to_unsigned_representative(__m256i a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_to_unsigned_representative_f5(__m256i a);\n\n__m256i libcrux_ml_kem_vector_avx2_compress_compress_message_coefficient(__m256i vector);\n\n__m256i libcrux_ml_kem_vector_avx2_compress_1(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_compress_1_f5(__m256i vector);\n\n__m256i libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(__m256i lhs, __m256i rhs);\n\n__m256i libcrux_ml_kem_vector_avx2_compress_decompress_1(__m256i a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_decompress_1_f5(__m256i a);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(\n  __m256i vec,\n  __m256i constants\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_1_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_2_step_f5(__m256i vector, int16_t zeta0, int16_t zeta1);\n\n__m128i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_m128i_by_constants(\n  __m128i vec,\n  __m128i constants\n);\n\n__m256i libcrux_ml_kem_vector_avx2_ntt_ntt_layer_3_step(__m256i vector, int16_t zeta);\n\n__m256i libcrux_ml_kem_vector_avx2_ntt_layer_3_step(__m256i vector, int16_t zeta);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_ntt_layer_3_step_f5(__m256i vector, int16_t zeta);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_2_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\n__m256i libcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_3_step(__m256i vector, int16_t zeta);\n\n__m256i libcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step(__m256i vector, int16_t zeta);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step_f5(__m256i vector, int16_t zeta);\n\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_montgomery_reduce_i32s(__m256i vec);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_multiply(\n  __m256i lhs,\n  __m256i rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_multiply(\n  const __m256i *lhs,\n  const __m256i *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_multiply_f5(\n  const __m256i *lhs,\n  const __m256i *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\nEurydice_array_u8x2 libcrux_ml_kem_vector_avx2_serialize_serialize_1(__m256i vector);\n\nEurydice_array_u8x2 libcrux_ml_kem_vector_avx2_serialize_1(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_array_u8x2 libcrux_ml_kem_vector_avx2_serialize_1_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_i16s(int16_t a, int16_t b);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_u8s(uint8_t a, uint8_t b);\n\n__m256i libcrux_ml_kem_vector_avx2_serialize_deserialize_1(Eurydice_borrow_slice_u8 bytes);\n\n__m256i libcrux_ml_kem_vector_avx2_deserialize_1(Eurydice_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_1_f5(Eurydice_borrow_slice_u8 bytes);\n\n/**\n `mm256_concat_pairs_n(n, x)` is then a sequence of 32 bits packets\n of the shape `0b0…0b₁…bₙa₁…aₙ`, if `x` is a sequence of pairs of\n 16 bits, of the shape `(0b0…0a₁…aₙ, 0b0…0b₁…bₙ)` (where the last\n `n` bits are non-zero).\n*/\n__m256i libcrux_ml_kem_vector_avx2_serialize_mm256_concat_pairs_n(uint8_t n, __m256i x);\n\nEurydice_array_u8x8 libcrux_ml_kem_vector_avx2_serialize_serialize_4(__m256i vector);\n\nEurydice_array_u8x8 libcrux_ml_kem_vector_avx2_serialize_4(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_array_u8x8 libcrux_ml_kem_vector_avx2_serialize_4_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_i16s(\n  int16_t b0,\n  int16_t b1,\n  int16_t b2,\n  int16_t b3,\n  int16_t b4,\n  int16_t b5,\n  int16_t b6,\n  int16_t b7\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_u8s(\n  uint8_t b0,\n  uint8_t b1,\n  uint8_t b2,\n  uint8_t b3,\n  uint8_t b4,\n  uint8_t b5,\n  uint8_t b6,\n  uint8_t b7\n);\n\n__m256i libcrux_ml_kem_vector_avx2_serialize_deserialize_4(Eurydice_borrow_slice_u8 bytes);\n\n__m256i libcrux_ml_kem_vector_avx2_deserialize_4(Eurydice_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_4_f5(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_6d libcrux_ml_kem_vector_avx2_serialize_serialize_5(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_arr_6d libcrux_ml_kem_vector_avx2_serialize_5_f5(__m256i vector);\n\n/**\n We cannot model `mm256_inserti128_si256` on its own: it produces a\n Vec256 where the upper 128 bits are undefined. Thus\n `mm256_inserti128_si256` is not pure.\n\n Luckily, we always call `mm256_castsi128_si256` right after\n `mm256_inserti128_si256`: this composition sets the upper bits,\n making the whole computation pure again.\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_mm256_si256_from_two_si128(__m128i lower, __m128i upper);\n\n__m256i libcrux_ml_kem_vector_avx2_serialize_deserialize_5(Eurydice_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_5_f5(Eurydice_borrow_slice_u8 bytes);\n\ntypedef struct core_core_arch_x86___m128i_x2_s\n{\n  __m128i fst;\n  __m128i snd;\n}\ncore_core_arch_x86___m128i_x2;\n\ncore_core_arch_x86___m128i_x2\nlibcrux_ml_kem_vector_avx2_serialize_serialize_10_serialize_10_vec(__m256i vector);\n\nEurydice_arr_fc libcrux_ml_kem_vector_avx2_serialize_serialize_10(__m256i vector);\n\nEurydice_arr_fc libcrux_ml_kem_vector_avx2_serialize_10(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_arr_fc libcrux_ml_kem_vector_avx2_serialize_10_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_10_deserialize_10_vec(\n  __m128i lower_coefficients0,\n  __m128i upper_coefficients0\n);\n\n__m256i libcrux_ml_kem_vector_avx2_serialize_deserialize_10(Eurydice_borrow_slice_u8 bytes);\n\n__m256i libcrux_ml_kem_vector_avx2_deserialize_10(Eurydice_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_10_f5(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_80 libcrux_ml_kem_vector_avx2_serialize_serialize_11(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_arr_80 libcrux_ml_kem_vector_avx2_serialize_11_f5(__m256i vector);\n\n__m256i libcrux_ml_kem_vector_avx2_serialize_deserialize_11(Eurydice_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_11_f5(Eurydice_borrow_slice_u8 bytes);\n\ncore_core_arch_x86___m128i_x2\nlibcrux_ml_kem_vector_avx2_serialize_serialize_12_serialize_12_vec(__m256i vector);\n\nEurydice_arr_94 libcrux_ml_kem_vector_avx2_serialize_serialize_12(__m256i vector);\n\nEurydice_arr_94 libcrux_ml_kem_vector_avx2_serialize_12(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_arr_94 libcrux_ml_kem_vector_avx2_serialize_12_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_12_deserialize_12_vec(\n  __m128i lower_coefficients0,\n  __m128i upper_coefficients0\n);\n\n__m256i libcrux_ml_kem_vector_avx2_serialize_deserialize_12(Eurydice_borrow_slice_u8 bytes);\n\n__m256i libcrux_ml_kem_vector_avx2_deserialize_12(Eurydice_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_12_f5(Eurydice_borrow_slice_u8 bytes);\n\nsize_t\nlibcrux_ml_kem_vector_avx2_sampling_rejection_sample(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_i16 output\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nsize_t\nlibcrux_ml_kem_vector_avx2_rej_sample_f5(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_i16 output\n);\n\n#define LIBCRUX_ML_KEM_VECTOR_AVX2_NTT_NTT_MULTIPLY_PERMUTE_WITH (216)\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_clone_fd(const __m256i *self);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem_avx2_H_DEFINED\n#endif /* libcrux_mlkem_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem_portable.h\"\n\n#include \"libcrux_sha3_portable.h\"\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_core.h\"\n\ninline Eurydice_arr_c7 libcrux_ml_kem_hash_functions_portable_G(Eurydice_borrow_slice_u8 input)\n{\n  Eurydice_arr_c7 digest = { .data = { 0U } };\n  libcrux_sha3_portable_sha512(Eurydice_array_to_slice_mut_17(&digest), input);\n  return digest;\n}\n\ninline Eurydice_arr_ec libcrux_ml_kem_hash_functions_portable_H(Eurydice_borrow_slice_u8 input)\n{\n  Eurydice_arr_ec digest = { .data = { 0U } };\n  libcrux_sha3_portable_sha256(Eurydice_array_to_slice_mut_01(&digest), input);\n  return digest;\n}\n\n#define ZETAS_TIMES_MONTGOMERY_R ((KRML_CLITERAL(Eurydice_arr_34){ .data = { -1044, -758, -359, -1517, 1493, 1422, 287, 202, -171, 622, 1577, 182, 962, -1202, -1474, 1468, 573, -1325, 264, 383, -829, 1458, -1602, -130, -681, 1017, 732, 608, -1542, 411, -205, -1571, 1223, 652, -552, 1015, -1293, 1491, -282, -1544, 516, -8, -320, -666, -1618, -1162, 126, 1469, -853, -90, -271, 830, 107, -1421, -247, -951, -398, 961, -1508, -725, 448, -1065, 677, -1275, -1103, 430, 555, 843, -1251, 871, 1550, 105, 422, 587, 177, -235, -291, -460, 1574, 1653, -246, 778, 1159, -147, -777, 1483, -602, 1119, -1590, 644, -872, 349, 418, 329, -156, -75, 817, 1097, 603, 610, 1322, -1285, -1465, 384, -1215, -136, 1218, -1335, -874, 220, -1187, -1659, -1185, -1530, -1278, 794, -1510, -854, -870, 478, -108, -308, 996, 991, 958, -1460, 1522, 1628 } }))\n\nint16_t libcrux_ml_kem_polynomial_zeta(size_t i)\n{\n  return ZETAS_TIMES_MONTGOMERY_R.data[i];\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_from_i16_array(Eurydice_borrow_slice_i16 array)\n{\n  Eurydice_arr_d6 arr;\n  memcpy(arr.data,\n    Eurydice_slice_subslice_shared_a6(array,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })).ptr,\n    (size_t)16U * sizeof (int16_t));\n  return\n    core_result_unwrap_26_d3((\n        KRML_CLITERAL(core_result_Result_ec){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_borrow_slice_i16 array)\n{\n  return\n    libcrux_ml_kem_vector_portable_vector_type_from_i16_array(libcrux_secrets_int_classify_public_classify_ref_6d_39(array));\n}\n\nKRML_MUSTINLINE uint8_t_x11\nlibcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_borrow_slice_i16 v)\n{\n  uint8_t r0 = libcrux_secrets_int_as_u8_f5(v.ptr[0U]);\n  uint8_t\n  r1 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U] & 31) << 3U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[0U] >> 8U);\n  uint8_t\n  r2 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U] & 3) << 6U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U] >> 5U);\n  uint8_t r3 = libcrux_secrets_int_as_u8_f5(v.ptr[2U] >> 2U & 255);\n  uint8_t\n  r4 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[3U] & 127) << 1U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U] >> 10U);\n  uint8_t\n  r5 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[4U] & 15) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[3U] >> 7U);\n  uint8_t\n  r6 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[5U] & 1) << 7U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[4U] >> 4U);\n  uint8_t r7 = libcrux_secrets_int_as_u8_f5(v.ptr[5U] >> 1U & 255);\n  uint8_t\n  r8 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[6U] & 63) << 2U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[5U] >> 9U);\n  uint8_t\n  r9 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[7U] & 7) << 5U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[6U] >> 6U);\n  uint8_t r10 = libcrux_secrets_int_as_u8_f5(v.ptr[7U] >> 3U);\n  return\n    (\n      KRML_CLITERAL(uint8_t_x11){\n        .fst = r0,\n        .snd = r1,\n        .thd = r2,\n        .f3 = r3,\n        .f4 = r4,\n        .f5 = r5,\n        .f6 = r6,\n        .f7 = r7,\n        .f8 = r8,\n        .f9 = r9,\n        .f10 = r10\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_80\nlibcrux_ml_kem_vector_portable_serialize_serialize_11(Eurydice_arr_d6 v)\n{\n  uint8_t_x11\n  r0_10 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })));\n  uint8_t_x11\n  r11_21 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_80){\n        .data = {\n          r0_10.fst, r0_10.snd, r0_10.thd, r0_10.f3, r0_10.f4, r0_10.f5, r0_10.f6, r0_10.f7,\n          r0_10.f8, r0_10.f9, r0_10.f10, r11_21.fst, r11_21.snd, r11_21.thd, r11_21.f3, r11_21.f4,\n          r11_21.f5, r11_21.f6, r11_21.f7, r11_21.f8, r11_21.f9, r11_21.f10\n        }\n      }\n    );\n}\n\nEurydice_arr_80 libcrux_ml_kem_vector_portable_serialize_11(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_0b(libcrux_ml_kem_vector_portable_serialize_serialize_11(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_80 libcrux_ml_kem_vector_portable_serialize_11_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_11(a);\n}\n\nKRML_MUSTINLINE int16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_11_int(Eurydice_borrow_slice_u8 bytes)\n{\n  int16_t\n  r0 =\n    (int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[1U]) & 7) << 8U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[0U]);\n  int16_t\n  r1 =\n    (int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[2U]) & 63) << 5U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[1U]) >> 3U;\n  int16_t\n  r2 =\n    ((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[4U]) & 1) << 10U) |\n      (int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[3U]) << 2U))\n    | libcrux_secrets_int_as_i16_59(bytes.ptr[2U]) >> 6U;\n  int16_t\n  r3 =\n    (int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[5U]) & 15) << 7U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[4U]) >> 1U;\n  int16_t\n  r4 =\n    (int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[6U]) & 127) << 4U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[5U]) >> 4U;\n  int16_t\n  r5 =\n    ((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[8U]) & 3) << 9U) |\n      (int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[7U]) << 1U))\n    | libcrux_secrets_int_as_i16_59(bytes.ptr[6U]) >> 7U;\n  int16_t\n  r6 =\n    (int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[9U]) & 31) << 6U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[8U]) >> 2U;\n  int16_t\n  r7 =\n    (int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[10U]) << 3U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[9U]) >> 5U;\n  return\n    (\n      KRML_CLITERAL(int16_t_x8){\n        .fst = r0,\n        .snd = r1,\n        .thd = r2,\n        .f3 = r3,\n        .f4 = r4,\n        .f5 = r5,\n        .f6 = r6,\n        .f7 = r7\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_11(Eurydice_borrow_slice_u8 bytes)\n{\n  int16_t_x8\n  v0_7 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_11_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)11U })));\n  int16_t_x8\n  v8_15 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_11_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)11U, .end = (size_t)22U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, v0_7.f6, v0_7.f7, v8_15.fst,\n          v8_15.snd, v8_15.thd, v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_11(Eurydice_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_11(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_11_b8(Eurydice_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_11(a);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_to_i16_array(Eurydice_arr_d6 x)\n{\n  return x;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_to_i16_array_b8(Eurydice_arr_d6 x)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_4b(libcrux_ml_kem_vector_portable_vector_type_to_i16_array(x));\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6 libcrux_ml_kem_vector_portable_vector_type_zero(void)\n{\n  return\n    libcrux_secrets_int_public_integers_classify_27_4b((\n        KRML_CLITERAL(Eurydice_arr_d6){ .data = { 0U } }\n      ));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_ZERO_b8(void)\n{\n  return libcrux_ml_kem_vector_portable_vector_type_zero();\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_from_bytes(Eurydice_borrow_slice_u8 array)\n{\n  Eurydice_arr_d6 elements;\n  int16_t repeat_expression[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_secrets_int_I16(0););\n  memcpy(elements.data, repeat_expression, (size_t)16U * sizeof (int16_t));\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    elements.data[i0] =\n      (int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(array.ptr[(size_t)2U * i0 + (size_t)1U]) <<\n        8U)\n      | libcrux_secrets_int_as_i16_59(array.ptr[(size_t)2U * i0]);\n  }\n  return elements;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_from_bytes_b8(Eurydice_borrow_slice_u8 array)\n{\n  return\n    libcrux_ml_kem_vector_portable_vector_type_from_bytes(libcrux_secrets_int_classify_public_classify_ref_6d_90(array));\n}\n\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_portable_vector_type_to_bytes(\n  Eurydice_arr_d6 x,\n  Eurydice_mut_borrow_slice_u8 bytes\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    bytes.ptr[(size_t)2U * i0 + (size_t)1U] = libcrux_secrets_int_as_u8_f5(x.data[i0] >> 8U);\n    bytes.ptr[(size_t)2U * i0] = libcrux_secrets_int_as_u8_f5(x.data[i0]);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nvoid\nlibcrux_ml_kem_vector_portable_to_bytes_b8(\n  Eurydice_arr_d6 x,\n  Eurydice_mut_borrow_slice_u8 bytes\n)\n{\n  libcrux_ml_kem_vector_portable_vector_type_to_bytes(x,\n    libcrux_secrets_int_public_integers_classify_mut_slice_75(bytes));\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_add(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    size_t uu____0 = i0;\n    lhs.data[uu____0] += rhs->data[i0];\n  }\n  return lhs;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_add_b8(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_add(lhs, rhs);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_sub(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    size_t uu____0 = i0;\n    lhs.data[uu____0] -= rhs->data[i0];\n  }\n  return lhs;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_sub_b8(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_sub(lhs, rhs);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(Eurydice_arr_d6 vec, int16_t c)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    size_t uu____0 = i0;\n    vec.data[uu____0] *= c;\n  }\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_multiply_by_constant_b8(Eurydice_arr_d6 vec, int16_t c)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(vec, c);\n}\n\n/**\n Note: This function is not secret independent\n Only use with public values.\n*/\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(Eurydice_arr_d6 vec)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    if (libcrux_secrets_int_public_integers_declassify_d8_39(vec.data[i0]) >= 3329)\n    {\n      size_t uu____0 = i0;\n      vec.data[uu____0] -= 3329;\n    }\n  }\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_cond_subtract_3329_b8(Eurydice_arr_d6 v)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(v);\n}\n\n/**\n Signed Barrett Reduction\n\n Given an input `value`, `barrett_reduce` outputs a representative `result`\n such that:\n\n - result ≡ value (mod FIELD_MODULUS)\n - the absolute value of `result` is bound as follows:\n\n `|result| ≤ FIELD_MODULUS / 2 · (|value|/BARRETT_R + 1)\n\n Note: The input bound is 28296 to prevent overflow in the multiplication of quotient by FIELD_MODULUS\n\n*/\nint16_t libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(int16_t value)\n{\n  int32_t\n  t =\n    libcrux_secrets_int_as_i32_f5(value) *\n      LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_MULTIPLIER\n    + (LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_R >> 1U);\n  int16_t\n  quotient =\n    libcrux_secrets_int_as_i16_36(t >> (uint32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT);\n  return value - quotient * LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(Eurydice_arr_d6 vec)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int16_t vi = libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(vec.data[i0]);\n    vec.data[i0] = vi;\n  }\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_barrett_reduce_b8(Eurydice_arr_d6 vector)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(vector);\n}\n\n/**\n Signed Montgomery Reduction\n\n Given an input `value`, `montgomery_reduce` outputs a representative `o`\n such that:\n\n - o ≡ value · MONTGOMERY_R^(-1) (mod FIELD_MODULUS)\n - the absolute value of `o` is bound as follows:\n\n `|result| ≤ ceil(|value| / MONTGOMERY_R) + 1665\n\n In particular, if `|value| ≤ FIELD_MODULUS-1 * FIELD_MODULUS-1`, then `|o| <= FIELD_MODULUS-1`.\n And, if `|value| ≤ pow2 16 * FIELD_MODULUS-1`, then `|o| <= FIELD_MODULUS + 1664\n\n*/\nint16_t libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(int32_t value)\n{\n  int32_t\n  k =\n    libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_as_i16_36(value)) *\n      libcrux_secrets_int_as_i32_b8(libcrux_secrets_int_public_integers_classify_27_df(LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));\n  int32_t\n  k_times_modulus =\n    libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_as_i16_36(k)) *\n      libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n  int16_t\n  c =\n    libcrux_secrets_int_as_i16_36(k_times_modulus >>\n        (uint32_t)LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT);\n  int16_t\n  value_high =\n    libcrux_secrets_int_as_i16_36(value >>\n        (uint32_t)LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT);\n  return value_high - c;\n}\n\n/**\n If `fe` is some field element 'x' of the Kyber field and `fer` is congruent to\n `y · MONTGOMERY_R`, this procedure outputs a value that is congruent to\n `x · y`, as follows:\n\n    `fe · fer ≡ x · y · MONTGOMERY_R (mod FIELD_MODULUS)`\n\n `montgomery_reduce` takes the value `x · y · MONTGOMERY_R` and outputs a representative\n `x · y · MONTGOMERY_R * MONTGOMERY_R^{-1} ≡ x · y (mod FIELD_MODULUS)`.\n*/\nKRML_MUSTINLINE int16_t\nlibcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(\n  int16_t fe,\n  int16_t fer\n)\n{\n  int32_t product = libcrux_secrets_int_as_i32_f5(fe) * libcrux_secrets_int_as_i32_f5(fer);\n  return libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(product);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant(\n  Eurydice_arr_d6 vec,\n  int16_t c\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    vec.data[i0] =\n      libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(vec.data[i0],\n        c);\n  }\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(\n  Eurydice_arr_d6 vector,\n  int16_t constant\n)\n{\n  return\n    libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant(vector,\n      libcrux_secrets_int_public_integers_classify_27_39(constant));\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(\n  Eurydice_arr_d6 vec,\n  int16_t c\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    size_t uu____0 = i0;\n    vec.data[uu____0] &= c;\n  }\n  return vec;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.arithmetic.shift_right\nwith const generics\n- SHIFT_BY= 15\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 shift_right_ef(Eurydice_arr_d6 vec)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    vec.data[i0] >>= (uint32_t)15;\n  }\n  return vec;\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative(Eurydice_arr_d6 a)\n{\n  Eurydice_arr_d6 t = shift_right_ef(a);\n  Eurydice_arr_d6\n  fm =\n    libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(t,\n      LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  return libcrux_ml_kem_vector_portable_arithmetic_add(a, &fm);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative(a);\n}\n\n/**\n The `compress_*` functions implement the `Compress` function specified in the NIST FIPS\n 203 standard (Page 18, Expression 4.5), which is defined as:\n\n ```plaintext\n Compress_d: ℤq -> ℤ_{2ᵈ}\n Compress_d(x) = ⌈(2ᵈ/q)·x⌋\n ```\n\n Since `⌈x⌋ = ⌊x + 1/2⌋` we have:\n\n ```plaintext\n Compress_d(x) = ⌊(2ᵈ/q)·x + 1/2⌋\n               = ⌊(2^{d+1}·x + q) / 2q⌋\n ```\n\n For further information about the function implementations, consult the\n `implementation_notes.pdf` document in this directory.\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\nuint8_t libcrux_ml_kem_vector_portable_compress_compress_message_coefficient(uint16_t fe)\n{\n  int16_t\n  shifted =\n    libcrux_secrets_int_public_integers_classify_27_39(1664) - libcrux_secrets_int_as_i16_ca(fe);\n  int16_t mask = shifted >> 15U;\n  int16_t shifted_to_positive = mask ^ shifted;\n  int16_t shifted_positive_in_range = shifted_to_positive - 832;\n  int16_t r0 = shifted_positive_in_range >> 15U;\n  int16_t r1 = r0 & 1;\n  return libcrux_secrets_int_as_u8_f5(r1);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_compress_compress_1(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    a.data[i0] =\n      libcrux_secrets_int_as_i16_59(libcrux_ml_kem_vector_portable_compress_compress_message_coefficient(libcrux_secrets_int_as_u16_f5(a.data[i0])));\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_1_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_compress_compress_1(a);\n}\n\nKRML_MUSTINLINE uint32_t\nlibcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits(\n  uint8_t n,\n  uint32_t value\n)\n{\n  return value & ((1U << (uint32_t)n) - 1U);\n}\n\nint16_t\nlibcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient(\n  uint8_t coefficient_bits,\n  uint16_t fe\n)\n{\n  uint64_t compressed = libcrux_secrets_int_as_u64_ca(fe) << (uint32_t)coefficient_bits;\n  compressed += 1664ULL;\n  compressed *= 10321340ULL;\n  compressed >>= 35U;\n  return\n    libcrux_secrets_int_as_i16_b8(libcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits(coefficient_bits,\n        libcrux_secrets_int_as_u32_a3(compressed)));\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_compress_decompress_1(Eurydice_arr_d6 a)\n{\n  Eurydice_arr_d6 z = libcrux_ml_kem_vector_portable_vector_type_zero();\n  Eurydice_arr_d6 s = libcrux_ml_kem_vector_portable_arithmetic_sub(z, &a);\n  Eurydice_arr_d6\n  res = libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(s, 1665);\n  return res;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_decompress_1_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_compress_decompress_1(a);\n}\n\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_portable_ntt_ntt_step(\n  Eurydice_arr_d6 *vec,\n  int16_t zeta,\n  size_t i,\n  size_t j\n)\n{\n  int16_t\n  t =\n    libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(vec->data[j],\n      libcrux_secrets_int_public_integers_classify_27_39(zeta));\n  int16_t a_minus_t = vec->data[i] - t;\n  int16_t a_plus_t = vec->data[i] + t;\n  vec->data[j] = a_minus_t;\n  vec->data[i] = a_plus_t;\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)0U, (size_t)2U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)1U, (size_t)3U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)4U, (size_t)6U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)5U, (size_t)7U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta2, (size_t)8U, (size_t)10U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta2, (size_t)9U, (size_t)11U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta3, (size_t)12U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta3, (size_t)13U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_1_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step(a, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)0U, (size_t)4U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)1U, (size_t)5U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)2U, (size_t)6U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)3U, (size_t)7U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)8U, (size_t)12U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)9U, (size_t)13U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)10U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)11U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_2_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  return libcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step(a, zeta0, zeta1);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(Eurydice_arr_d6 vec, int16_t zeta)\n{\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)0U, (size_t)8U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)1U, (size_t)9U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)2U, (size_t)10U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)3U, (size_t)11U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)4U, (size_t)12U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)5U, (size_t)13U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)6U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)7U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_3_step_b8(Eurydice_arr_d6 a, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(a, zeta);\n}\n\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_step(\n  Eurydice_arr_d6 *vec,\n  int16_t zeta,\n  size_t i,\n  size_t j\n)\n{\n  int16_t a_minus_b = vec->data[j] - vec->data[i];\n  int16_t a_plus_b = vec->data[j] + vec->data[i];\n  int16_t o0 = libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(a_plus_b);\n  int16_t\n  o1 =\n    libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(a_minus_b,\n      libcrux_secrets_int_public_integers_classify_27_39(zeta));\n  vec->data[i] = o0;\n  vec->data[j] = o1;\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)0U, (size_t)2U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)1U, (size_t)3U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)4U, (size_t)6U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)5U, (size_t)7U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta2, (size_t)8U, (size_t)10U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta2, (size_t)9U, (size_t)11U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta3, (size_t)12U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta3, (size_t)13U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step(a, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)0U, (size_t)4U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)1U, (size_t)5U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)2U, (size_t)6U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)3U, (size_t)7U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)8U, (size_t)12U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)9U, (size_t)13U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)10U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)11U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step(a, zeta0, zeta1);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(Eurydice_arr_d6 vec, int16_t zeta)\n{\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)0U, (size_t)8U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)1U, (size_t)9U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)2U, (size_t)10U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)3U, (size_t)11U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)4U, (size_t)12U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)5U, (size_t)13U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)6U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)7U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8(Eurydice_arr_d6 a, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(a, zeta);\n}\n\n/**\n Compute the product of two Kyber binomials with respect to the\n modulus `X² - zeta`.\n\n This function almost implements <strong>Algorithm 11</strong> of the\n NIST FIPS 203 standard, which is reproduced below:\n\n ```plaintext\n Input:  a₀, a₁, b₀, b₁ ∈ ℤq.\n Input: γ ∈ ℤq.\n Output: c₀, c₁ ∈ ℤq.\n\n c₀ ← a₀·b₀ + a₁·b₁·γ\n c₁ ← a₀·b₁ + a₁·b₀\n return c₀, c₁\n ```\n We say \"almost\" because the coefficients output by this function are in\n the Montgomery domain (unlike in the specification).\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(\n  const Eurydice_arr_d6 *a,\n  const Eurydice_arr_d6 *b,\n  int16_t zeta,\n  size_t i,\n  Eurydice_arr_d6 *out\n)\n{\n  int16_t ai = a->data[(size_t)2U * i];\n  int16_t bi = b->data[(size_t)2U * i];\n  int16_t aj = a->data[(size_t)2U * i + (size_t)1U];\n  int16_t bj = b->data[(size_t)2U * i + (size_t)1U];\n  int32_t ai_bi = libcrux_secrets_int_as_i32_f5(ai) * libcrux_secrets_int_as_i32_f5(bi);\n  int32_t aj_bj_ = libcrux_secrets_int_as_i32_f5(aj) * libcrux_secrets_int_as_i32_f5(bj);\n  int16_t aj_bj = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(aj_bj_);\n  int32_t\n  aj_bj_zeta = libcrux_secrets_int_as_i32_f5(aj_bj) * libcrux_secrets_int_as_i32_f5(zeta);\n  int32_t ai_bi_aj_bj = ai_bi + aj_bj_zeta;\n  int16_t o0 = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(ai_bi_aj_bj);\n  int32_t ai_bj = libcrux_secrets_int_as_i32_f5(ai) * libcrux_secrets_int_as_i32_f5(bj);\n  int32_t aj_bi = libcrux_secrets_int_as_i32_f5(aj) * libcrux_secrets_int_as_i32_f5(bi);\n  int32_t ai_bj_aj_bi = ai_bj + aj_bi;\n  int16_t o1 = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(ai_bj_aj_bi);\n  out->data[(size_t)2U * i] = o0;\n  out->data[(size_t)2U * i + (size_t)1U] = o1;\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_multiply(\n  const Eurydice_arr_d6 *lhs,\n  const Eurydice_arr_d6 *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  int16_t nzeta0 = -zeta0;\n  int16_t nzeta1 = -zeta1;\n  int16_t nzeta2 = -zeta2;\n  int16_t nzeta3 = -zeta3;\n  Eurydice_arr_d6 out = libcrux_ml_kem_vector_portable_vector_type_zero();\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(zeta0),\n    (size_t)0U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(nzeta0),\n    (size_t)1U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(zeta1),\n    (size_t)2U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(nzeta1),\n    (size_t)3U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(zeta2),\n    (size_t)4U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(nzeta2),\n    (size_t)5U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(zeta3),\n    (size_t)6U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(nzeta3),\n    (size_t)7U,\n    &out);\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_multiply_b8(\n  const Eurydice_arr_d6 *lhs,\n  const Eurydice_arr_d6 *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_portable_ntt_ntt_multiply(lhs, rhs, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x2\nlibcrux_ml_kem_vector_portable_serialize_serialize_1(Eurydice_arr_d6 v)\n{\n  uint8_t\n  result0 =\n    (((((((uint32_t)libcrux_secrets_int_as_u8_f5(v.data[0U]) |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[1U]) << 1U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[2U]) << 2U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[3U]) << 3U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[4U]) << 4U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[5U]) << 5U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[6U]) << 6U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[7U]) << 7U;\n  uint8_t\n  result1 =\n    (((((((uint32_t)libcrux_secrets_int_as_u8_f5(v.data[8U]) |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[9U]) << 1U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[10U]) << 2U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[11U]) << 3U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[12U]) << 4U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[13U]) << 5U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[14U]) << 6U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[15U]) << 7U;\n  return (KRML_CLITERAL(Eurydice_array_u8x2){ .data = { result0, result1 } });\n}\n\nEurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_1(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_75(libcrux_ml_kem_vector_portable_serialize_serialize_1(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_1_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_1(a);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_1(Eurydice_borrow_slice_u8 v)\n{\n  int16_t result0 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] & 1U);\n  int16_t result1 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 1U & 1U);\n  int16_t result2 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 2U & 1U);\n  int16_t result3 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 3U & 1U);\n  int16_t result4 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 4U & 1U);\n  int16_t result5 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 5U & 1U);\n  int16_t result6 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 6U & 1U);\n  int16_t result7 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 7U & 1U);\n  int16_t result8 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] & 1U);\n  int16_t result9 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 1U & 1U);\n  int16_t result10 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 2U & 1U);\n  int16_t result11 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 3U & 1U);\n  int16_t result12 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 4U & 1U);\n  int16_t result13 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 5U & 1U);\n  int16_t result14 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 6U & 1U);\n  int16_t result15 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 7U & 1U);\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          result0, result1, result2, result3, result4, result5, result6, result7, result8, result9,\n          result10, result11, result12, result13, result14, result15\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_1(Eurydice_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_1(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_1_b8(Eurydice_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_1(a);\n}\n\nKRML_MUSTINLINE uint8_t_x4\nlibcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_borrow_slice_i16 v)\n{\n  uint8_t\n  result0 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U]) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[0U]);\n  uint8_t\n  result1 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[3U]) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U]);\n  uint8_t\n  result2 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[5U]) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[4U]);\n  uint8_t\n  result3 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[7U]) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[6U]);\n  return\n    (KRML_CLITERAL(uint8_t_x4){ .fst = result0, .snd = result1, .thd = result2, .f3 = result3 });\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x8\nlibcrux_ml_kem_vector_portable_serialize_serialize_4(Eurydice_arr_d6 v)\n{\n  uint8_t_x4\n  result0_3 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })));\n  uint8_t_x4\n  result4_7 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_array_u8x8){\n        .data = {\n          result0_3.fst, result0_3.snd, result0_3.thd, result0_3.f3, result4_7.fst, result4_7.snd,\n          result4_7.thd, result4_7.f3\n        }\n      }\n    );\n}\n\nEurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_4(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_52(libcrux_ml_kem_vector_portable_serialize_serialize_4(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_4_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_4(a);\n}\n\nKRML_MUSTINLINE int16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_borrow_slice_u8 bytes)\n{\n  int16_t v0 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[0U] & 15U);\n  int16_t v1 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[0U] >> 4U & 15U);\n  int16_t v2 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[1U] & 15U);\n  int16_t v3 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[1U] >> 4U & 15U);\n  int16_t v4 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[2U] & 15U);\n  int16_t v5 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[2U] >> 4U & 15U);\n  int16_t v6 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[3U] & 15U);\n  int16_t v7 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[3U] >> 4U & 15U);\n  return\n    (\n      KRML_CLITERAL(int16_t_x8){\n        .fst = v0,\n        .snd = v1,\n        .thd = v2,\n        .f3 = v3,\n        .f4 = v4,\n        .f5 = v5,\n        .f6 = v6,\n        .f7 = v7\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_4(Eurydice_borrow_slice_u8 bytes)\n{\n  int16_t_x8\n  v0_7 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)4U })));\n  int16_t_x8\n  v8_15 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)8U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, v0_7.f6, v0_7.f7, v8_15.fst,\n          v8_15.snd, v8_15.thd, v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_4(Eurydice_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_4(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_4_b8(Eurydice_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_4(a);\n}\n\nKRML_MUSTINLINE uint8_t_x5\nlibcrux_ml_kem_vector_portable_serialize_serialize_5_int(Eurydice_borrow_slice_i16 v)\n{\n  uint8_t r0 = libcrux_secrets_int_as_u8_f5(v.ptr[0U] | (int16_t)((uint32_t)v.ptr[1U] << 5U));\n  uint8_t\n  r1 =\n    libcrux_secrets_int_as_u8_f5((v.ptr[1U] >> 3U | (int16_t)((uint32_t)v.ptr[2U] << 2U)) |\n        (int16_t)((uint32_t)v.ptr[3U] << 7U));\n  uint8_t\n  r2 = libcrux_secrets_int_as_u8_f5(v.ptr[3U] >> 1U | (int16_t)((uint32_t)v.ptr[4U] << 4U));\n  uint8_t\n  r3 =\n    libcrux_secrets_int_as_u8_f5((v.ptr[4U] >> 4U | (int16_t)((uint32_t)v.ptr[5U] << 1U)) |\n        (int16_t)((uint32_t)v.ptr[6U] << 6U));\n  uint8_t\n  r4 = libcrux_secrets_int_as_u8_f5(v.ptr[6U] >> 2U | (int16_t)((uint32_t)v.ptr[7U] << 3U));\n  return (KRML_CLITERAL(uint8_t_x5){ .fst = r0, .snd = r1, .thd = r2, .f3 = r3, .f4 = r4 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_6d\nlibcrux_ml_kem_vector_portable_serialize_serialize_5(Eurydice_arr_d6 v)\n{\n  uint8_t_x5\n  r0_4 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_5_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })));\n  uint8_t_x5\n  r5_9 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_5_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_6d){\n        .data = {\n          r0_4.fst, r0_4.snd, r0_4.thd, r0_4.f3, r0_4.f4, r5_9.fst, r5_9.snd, r5_9.thd, r5_9.f3,\n          r5_9.f4\n        }\n      }\n    );\n}\n\nEurydice_arr_6d libcrux_ml_kem_vector_portable_serialize_5(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_37(libcrux_ml_kem_vector_portable_serialize_serialize_5(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_6d libcrux_ml_kem_vector_portable_serialize_5_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_5(a);\n}\n\nKRML_MUSTINLINE int16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_5_int(Eurydice_borrow_slice_u8 bytes)\n{\n  int16_t v0 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[0U] & 31U);\n  int16_t\n  v1 =\n    libcrux_secrets_int_as_i16_59(((uint32_t)bytes.ptr[1U] & 3U) << 3U |\n        (uint32_t)bytes.ptr[0U] >> 5U);\n  int16_t v2 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[1U] >> 2U & 31U);\n  int16_t\n  v3 =\n    libcrux_secrets_int_as_i16_59(((uint32_t)bytes.ptr[2U] & 15U) << 1U |\n        (uint32_t)bytes.ptr[1U] >> 7U);\n  int16_t\n  v4 =\n    libcrux_secrets_int_as_i16_59(((uint32_t)bytes.ptr[3U] & 1U) << 4U |\n        (uint32_t)bytes.ptr[2U] >> 4U);\n  int16_t v5 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[3U] >> 1U & 31U);\n  int16_t\n  v6 =\n    libcrux_secrets_int_as_i16_59(((uint32_t)bytes.ptr[4U] & 7U) << 2U |\n        (uint32_t)bytes.ptr[3U] >> 6U);\n  int16_t v7 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[4U] >> 3U);\n  return\n    (\n      KRML_CLITERAL(int16_t_x8){\n        .fst = v0,\n        .snd = v1,\n        .thd = v2,\n        .f3 = v3,\n        .f4 = v4,\n        .f5 = v5,\n        .f6 = v6,\n        .f7 = v7\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_5(Eurydice_borrow_slice_u8 bytes)\n{\n  int16_t_x8\n  v0_7 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_5_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)5U })));\n  int16_t_x8\n  v8_15 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_5_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)5U, .end = (size_t)10U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, v0_7.f6, v0_7.f7, v8_15.fst,\n          v8_15.snd, v8_15.thd, v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_5(Eurydice_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_5(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_5_b8(Eurydice_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_5(a);\n}\n\nKRML_MUSTINLINE uint8_t_x5\nlibcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_borrow_slice_i16 v)\n{\n  uint8_t r0 = libcrux_secrets_int_as_u8_f5(v.ptr[0U] & 255);\n  uint8_t\n  r1 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U] & 63) << 2U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[0U] >> 8U & 3);\n  uint8_t\n  r2 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U] & 15) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U] >> 6U & 15);\n  uint8_t\n  r3 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[3U] & 3) << 6U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U] >> 4U & 63);\n  uint8_t r4 = libcrux_secrets_int_as_u8_f5(v.ptr[3U] >> 2U & 255);\n  return (KRML_CLITERAL(uint8_t_x5){ .fst = r0, .snd = r1, .thd = r2, .f3 = r3, .f4 = r4 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_fc\nlibcrux_ml_kem_vector_portable_serialize_serialize_10(Eurydice_arr_d6 v)\n{\n  uint8_t_x5\n  r0_4 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)4U })));\n  uint8_t_x5\n  r5_9 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)8U })));\n  uint8_t_x5\n  r10_14 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)12U })));\n  uint8_t_x5\n  r15_19 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)16U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_fc){\n        .data = {\n          r0_4.fst, r0_4.snd, r0_4.thd, r0_4.f3, r0_4.f4, r5_9.fst, r5_9.snd, r5_9.thd, r5_9.f3,\n          r5_9.f4, r10_14.fst, r10_14.snd, r10_14.thd, r10_14.f3, r10_14.f4, r15_19.fst, r15_19.snd,\n          r15_19.thd, r15_19.f3, r15_19.f4\n        }\n      }\n    );\n}\n\nEurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_10(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_2b(libcrux_ml_kem_vector_portable_serialize_serialize_10(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_10_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_10(a);\n}\n\nKRML_MUSTINLINE int16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_borrow_slice_u8 bytes)\n{\n  int16_t\n  r0 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[1U])\n      & 3)\n      << 8U)\n      | (libcrux_secrets_int_as_i16_59(bytes.ptr[0U]) & 255));\n  int16_t\n  r1 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[2U])\n      & 15)\n      << 6U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[1U]) >> 2U);\n  int16_t\n  r2 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[3U])\n      & 63)\n      << 4U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[2U]) >> 4U);\n  int16_t\n  r3 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[4U])\n      << 2U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[3U]) >> 6U);\n  int16_t\n  r4 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[6U])\n      & 3)\n      << 8U)\n      | (libcrux_secrets_int_as_i16_59(bytes.ptr[5U]) & 255));\n  int16_t\n  r5 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[7U])\n      & 15)\n      << 6U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[6U]) >> 2U);\n  int16_t\n  r6 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[8U])\n      & 63)\n      << 4U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[7U]) >> 4U);\n  int16_t\n  r7 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[9U])\n      << 2U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[8U]) >> 6U);\n  return\n    (\n      KRML_CLITERAL(int16_t_x8){\n        .fst = r0,\n        .snd = r1,\n        .thd = r2,\n        .f3 = r3,\n        .f4 = r4,\n        .f5 = r5,\n        .f6 = r6,\n        .f7 = r7\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_10(Eurydice_borrow_slice_u8 bytes)\n{\n  int16_t_x8\n  v0_7 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)10U })));\n  int16_t_x8\n  v8_15 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)10U, .end = (size_t)20U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, v0_7.f6, v0_7.f7, v8_15.fst,\n          v8_15.snd, v8_15.thd, v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_10(Eurydice_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_10(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_10_b8(Eurydice_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_10(a);\n}\n\nKRML_MUSTINLINE uint8_t_x3\nlibcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_borrow_slice_i16 v)\n{\n  uint8_t r0 = libcrux_secrets_int_as_u8_f5(v.ptr[0U] & 255);\n  uint8_t\n  r1 =\n    libcrux_secrets_int_as_u8_f5(v.ptr[0U] >> 8U | (int16_t)((uint32_t)(v.ptr[1U] & 15) << 4U));\n  uint8_t r2 = libcrux_secrets_int_as_u8_f5(v.ptr[1U] >> 4U & 255);\n  return (KRML_CLITERAL(uint8_t_x3){ .fst = r0, .snd = r1, .thd = r2 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_94\nlibcrux_ml_kem_vector_portable_serialize_serialize_12(Eurydice_arr_d6 v)\n{\n  uint8_t_x3\n  r0_2 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)2U })));\n  uint8_t_x3\n  r3_5 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)2U, .end = (size_t)4U })));\n  uint8_t_x3\n  r6_8 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)6U })));\n  uint8_t_x3\n  r9_11 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)6U, .end = (size_t)8U })));\n  uint8_t_x3\n  r12_14 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)10U })));\n  uint8_t_x3\n  r15_17 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)10U, .end = (size_t)12U })));\n  uint8_t_x3\n  r18_20 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)14U })));\n  uint8_t_x3\n  r21_23 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_shared_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)14U, .end = (size_t)16U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_94){\n        .data = {\n          r0_2.fst, r0_2.snd, r0_2.thd, r3_5.fst, r3_5.snd, r3_5.thd, r6_8.fst, r6_8.snd, r6_8.thd,\n          r9_11.fst, r9_11.snd, r9_11.thd, r12_14.fst, r12_14.snd, r12_14.thd, r15_17.fst,\n          r15_17.snd, r15_17.thd, r18_20.fst, r18_20.snd, r18_20.thd, r21_23.fst, r21_23.snd,\n          r21_23.thd\n        }\n      }\n    );\n}\n\nEurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_12(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_40(libcrux_ml_kem_vector_portable_serialize_serialize_12(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_12_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_12(a);\n}\n\nKRML_MUSTINLINE int16_t_x2\nlibcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_borrow_slice_u8 bytes)\n{\n  int16_t byte0 = libcrux_secrets_int_as_i16_59(bytes.ptr[0U]);\n  int16_t byte1 = libcrux_secrets_int_as_i16_59(bytes.ptr[1U]);\n  int16_t byte2 = libcrux_secrets_int_as_i16_59(bytes.ptr[2U]);\n  int16_t r0 = (int16_t)((uint32_t)(byte1 & 15) << 8U) | (byte0 & 255);\n  int16_t r1 = (int16_t)((uint32_t)byte2 << 4U) | (byte1 >> 4U & 15);\n  return (KRML_CLITERAL(int16_t_x2){ .fst = r0, .snd = r1 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_12(Eurydice_borrow_slice_u8 bytes)\n{\n  int16_t_x2\n  v0_1 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)3U })));\n  int16_t_x2\n  v2_3 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)3U, .end = (size_t)6U })));\n  int16_t_x2\n  v4_5 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)6U, .end = (size_t)9U })));\n  int16_t_x2\n  v6_7 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)9U, .end = (size_t)12U })));\n  int16_t_x2\n  v8_9 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)15U })));\n  int16_t_x2\n  v10_11 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)15U, .end = (size_t)18U })));\n  int16_t_x2\n  v12_13 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)18U, .end = (size_t)21U })));\n  int16_t_x2\n  v14_15 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_shared_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)21U, .end = (size_t)24U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          v0_1.fst, v0_1.snd, v2_3.fst, v2_3.snd, v4_5.fst, v4_5.snd, v6_7.fst, v6_7.snd, v8_9.fst,\n          v8_9.snd, v10_11.fst, v10_11.snd, v12_13.fst, v12_13.snd, v14_15.fst, v14_15.snd\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_12(Eurydice_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_12_b8(Eurydice_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_12(a);\n}\n\nKRML_MUSTINLINE size_t\nlibcrux_ml_kem_vector_portable_sampling_rej_sample(\n  Eurydice_borrow_slice_u8 a,\n  Eurydice_mut_borrow_slice_i16 result\n)\n{\n  size_t sampled = (size_t)0U;\n  for (size_t i = (size_t)0U; i < a.meta / (size_t)3U; i++)\n  {\n    size_t i0 = i;\n    int16_t b1 = (int16_t)a.ptr[i0 * (size_t)3U + (size_t)0U];\n    int16_t b2 = (int16_t)a.ptr[i0 * (size_t)3U + (size_t)1U];\n    int16_t b3 = (int16_t)a.ptr[i0 * (size_t)3U + (size_t)2U];\n    int16_t d1 = (int16_t)((uint32_t)(b2 & 15) << 8U) | b1;\n    int16_t d2 = (int16_t)((uint32_t)b3 << 4U) | b2 >> 4U;\n    if (d1 < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)\n    {\n      if (sampled < (size_t)16U)\n      {\n        result.ptr[sampled] = d1;\n        sampled++;\n      }\n    }\n    if (d2 < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)\n    {\n      if (sampled < (size_t)16U)\n      {\n        result.ptr[sampled] = d2;\n        sampled++;\n      }\n    }\n  }\n  return sampled;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nsize_t\nlibcrux_ml_kem_vector_portable_rej_sample_b8(\n  Eurydice_borrow_slice_u8 a,\n  Eurydice_mut_borrow_slice_i16 out\n)\n{\n  return libcrux_ml_kem_vector_portable_sampling_rej_sample(a, out);\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\ninline Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_clone_9c(const Eurydice_arr_d6 *self)\n{\n  return self[0U];\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ZERO_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic Eurydice_arr_9e ZERO_d6_ea(void)\n{\n  Eurydice_arr_9e lit;\n  Eurydice_arr_d6 repeat_expression[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_kem_vector_portable_ZERO_b8(););\n  memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (Eurydice_arr_d6));\n  return lit;\n}\n\n/**\n Only use with public values.\n\n This MUST NOT be used with secret inputs, like its caller `deserialize_ring_elements_reduced`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_reduced_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_to_reduced_ring_element_ea(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)24U,\n            .end = i0 * (size_t)24U + (size_t)24U\n          }\n        ));\n    Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_12_b8(bytes);\n    Eurydice_arr_d6 uu____0 = libcrux_ml_kem_vector_portable_cond_subtract_3329_b8(coefficient);\n    re.data[i0] = uu____0;\n  }\n  return re;\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_ee(\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_arr_d20 *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_shared_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_9e uu____0 = deserialize_to_reduced_ring_element_ea(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final\nwith const generics\n- K= 4\n*/\nstatic inline Eurydice_arr_4a shake128_init_absorb_final_23(const Eurydice_arr_56 *input)\n{\n  Eurydice_arr_4a shake128_state;\n  Eurydice_arr_7c repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_sha3_portable_incremental_shake128_init(););\n  memcpy(shake128_state.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_7c));\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_absorb_final(&shake128_state.data[i0],\n      Eurydice_array_to_slice_shared_e9(&input->data[i0])););\n  return shake128_state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_4a\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_23(\n  const Eurydice_arr_56 *input\n)\n{\n  return shake128_init_absorb_final_23(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 4\n*/\nstatic inline Eurydice_arr_7c0 shake128_squeeze_first_three_blocks_23(Eurydice_arr_4a *st)\n{\n  Eurydice_arr_7c0\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(&st->data[i0],\n      Eurydice_array_to_slice_mut_48(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_7c0\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_23(\n  Eurydice_arr_4a *self\n)\n{\n  return shake128_squeeze_first_three_blocks_23(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_1c(\n  const Eurydice_arr_7c0 *randomness,\n  Eurydice_arr_cc *sampled_coefficients,\n  Eurydice_arr_24 *out\n)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_shared_d42(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block\nwith const generics\n- K= 4\n*/\nstatic inline Eurydice_arr_9c shake128_squeeze_next_block_23(Eurydice_arr_4a *st)\n{\n  Eurydice_arr_9c\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&st->data[i0],\n      Eurydice_array_to_slice_mut_2c(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_9c\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_23(Eurydice_arr_4a *self)\n{\n  return shake128_squeeze_next_block_23(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_1c0(\n  const Eurydice_arr_9c *randomness,\n  Eurydice_arr_cc *sampled_coefficients,\n  Eurydice_arr_24 *out\n)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_shared_d43(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ZERO\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic Eurydice_arr_9e ZERO_ea(void)\n{\n  Eurydice_arr_9e lit;\n  Eurydice_arr_d6 repeat_expression[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_kem_vector_portable_ZERO_b8(););\n  memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (Eurydice_arr_d6));\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e from_i16_array_ea(Eurydice_borrow_slice_i16 a)\n{\n  Eurydice_arr_9e result = ZERO_ea();\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    uu____0 =\n      libcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_slice_subslice_shared_a6(a,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * (size_t)16U,\n              .end = (i0 + (size_t)1U) * (size_t)16U\n            }\n          )));\n    result.data[i0] = uu____0;\n  }\n  return result;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e from_i16_array_d6_ea(Eurydice_borrow_slice_i16 a)\n{\n  return from_i16_array_ea(a);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_9e call_mut_0a_911(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_ea(Eurydice_array_to_subslice_shared_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d20 sample_from_xof_911(const Eurydice_arr_56 *seeds)\n{\n  Eurydice_arr_cc sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_24\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_4a\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_23(seeds);\n  Eurydice_arr_7c0\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_23(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_1c(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_9c\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_23(&xof_state);\n      done = sample_from_uniform_distribution_next_1c0(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_d20 arr_mapped_str;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_911(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_911(Eurydice_arr_600 *A_transpose, const Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_56 seeds;\n    Eurydice_arr_31 repeat_expression[4U];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_d20 sampled = sample_from_xof_911(&seeds);\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_4a\nwith const generics\n- K= 4\n*/\nstatic inline Eurydice_arr_ec H_4a_23(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_29(\n  const Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *unpacked_public_key\n)\n{\n  Eurydice_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_shared_212(public_key, (size_t)1536U);\n  deserialize_ring_elements_reduced_ee(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_shared_5f4(public_key,\n        (size_t)1536U));\n  Eurydice_arr_600 *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_shared_5f4(public_key,\n        (size_t)1536U));\n  sample_matrix_A_911(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_4a_23(Eurydice_array_to_slice_shared_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.to_unsigned_field_modulus\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 to_unsigned_field_modulus_ea(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.serialize_uncompressed_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b20\nserialize_uncompressed_ring_element_ea(const Eurydice_arr_9e *re)\n{\n  Eurydice_arr_b20 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6 coefficient = to_unsigned_field_modulus_ea(re->data[i0]);\n    Eurydice_arr_94 bytes = libcrux_ml_kem_vector_portable_serialize_12_b8(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d411(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)24U * i0,\n            .end = (size_t)24U * i0 + (size_t)24U\n          }\n        )),\n      Eurydice_array_to_slice_shared_ed(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_ee(const Eurydice_arr_d20 *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_ea(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_1c(\n  const Eurydice_arr_d20 *t_as_ntt,\n  Eurydice_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_d1 *serialized\n)\n{\n  serialize_vector_ee(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d419(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f6(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_1c(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *self,\n  Eurydice_arr_d1 *serialized\n)\n{\n  serialize_public_key_mut_1c(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_1c(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_1c(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nserialize_public_key_1c(const Eurydice_arr_d20 *t_as_ntt, Eurydice_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_d1 public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_1c(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nserialized_dd_1c(const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_d9(serialize_public_key_1c(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_1c(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self\n)\n{\n  return serialized_dd_1c(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PRIVATE_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair1024\nserialize_unpacked_secret_key_1c(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 *public_key,\n  const Eurydice_arr_d20 *private_key\n)\n{\n  Eurydice_arr_d1\n  public_key_serialized =\n    serialize_public_key_1c(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&public_key->seed_for_A));\n  Eurydice_arr_df secret_key_serialized = { .data = { 0U } };\n  serialize_vector_ee(private_key, Eurydice_array_to_slice_mut_2f(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair1024){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SERIALIZED_KEY_LEN= 3168\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_4c(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_a8 *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d420(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d420(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d420(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_4a_23(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d420(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_2e(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_a8 *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair1024\n  uu____0 =\n    serialize_unpacked_secret_key_1c(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_df ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_d1 ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_4c(Eurydice_array_to_slice_shared_2f(&ind_cpa_private_key),\n    Eurydice_array_to_slice_shared_b50(&ind_cpa_public_key),\n    Eurydice_array_to_slice_shared_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_2e(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_a8 sk = libcrux_ml_kem_types_default_d3_0e();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_2e(self, &sk);\n  return sk;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_uncompressed_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_to_uncompressed_ring_element_ea(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)24U,\n            .end = i0 * (size_t)24U + (size_t)24U\n          }\n        ));\n    Eurydice_arr_d6 uu____0 = libcrux_ml_kem_vector_portable_deserialize_12_b8(bytes);\n    re.data[i0] = uu____0;\n  }\n  return re;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_ee(Eurydice_borrow_slice_u8 secret_key, Eurydice_arr_d20 *secret_as_ntt)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_ea(Eurydice_slice_subslice_shared_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_051(\n  Eurydice_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_ee(Eurydice_slice_subslice_to_shared_72(public_key,\n      (size_t)1536U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_shared_6d(public_key, (size_t)1536U);\n  Eurydice_arr_600 *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_911(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_38(\n  const Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e3(Eurydice_array_to_slice_shared_68(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_ee(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_051(ind_cpa_public_key,\n    &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_shared_6d(ind_cpa_public_key, (size_t)1536U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_d20 default_70_ee(void)\n{\n  Eurydice_arr_d20 lit;\n  Eurydice_arr_9e repeat_expression[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n  memcpy(lit.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_9e));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 default_8b_ee(void)\n{\n  Eurydice_arr_d20 uu____0;\n  Eurydice_arr_9e repeat_expression0[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression0[i] = ZERO_d6_ea(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)4U * sizeof (Eurydice_arr_9e));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_d20 repeat_expression1[4U];\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    Eurydice_arr_d20 lit;\n    Eurydice_arr_9e repeat_expression[4U];\n    KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n    memcpy(lit.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_9e));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)4U * sizeof (Eurydice_arr_d20));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94\nlibcrux_ml_kem_ind_cca_unpacked_default_30_ee(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94){\n        .ind_cpa_public_key = default_8b_ee(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_ee(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_94\n  uu____0 =\n    { .ind_cpa_private_key = default_70_ee(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_ee()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_4a\nwith const generics\n- K= 4\n*/\nstatic inline Eurydice_arr_c7 G_4a_23(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_fe(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d48(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)4U;\n  return G_4a_23(Eurydice_array_to_slice_shared_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic inline Eurydice_arr_3b0 PRFxN_f5(const Eurydice_arr_890 *input)\n{\n  Eurydice_arr_3b0\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&out.data[i0]),\n      Eurydice_array_to_slice_shared_b5(&input->data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic inline Eurydice_arr_3b0 PRFxN_4a_f5(const Eurydice_arr_890 *input)\n{\n  return PRFxN_f5(input);\n}\n\n/**\n Given a series of uniformly random bytes in `randomness`, for some number `eta`,\n the `sample_from_binomial_distribution_{eta}` functions sample\n a ring element from a binomial distribution centered at 0 that uses two sets\n of `eta` coin flips. If, for example,\n `eta = ETA`, each ring coefficient is a value `v` such\n such that `v ∈ {-ETA, -ETA + 1, ..., 0, ..., ETA + 1, ETA}` and:\n\n ```plaintext\n - If v < 0, Pr[v] = Pr[-v]\n - If v >= 0, Pr[v] = BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2 ^ (2 * ETA)\n ```\n\n The values `v < 0` are mapped to the appropriate `KyberFieldElement`.\n\n The expected value is:\n\n ```plaintext\n E[X] = (-ETA)Pr[-ETA] + (-(ETA - 1))Pr[-(ETA - 1)] + ... + (ETA - 1)Pr[ETA - 1] + (ETA)Pr[ETA]\n      = 0 since Pr[-v] = Pr[v] when v < 0.\n ```\n\n And the variance is:\n\n ```plaintext\n Var(X) = E[(X - E[X])^2]\n        = E[X^2]\n        = sum_(v=-ETA to ETA)v^2 * (BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2^(2 * ETA))\n        = ETA / 2\n ```\n\n This function implements <strong>Algorithm 7</strong> of the NIST FIPS 203 standard, which is\n reproduced below:\n\n ```plaintext\n Input: byte array B ∈ 𝔹^{64η}.\n Output: array f ∈ ℤ₂₅₆.\n\n b ← BytesToBits(B)\n for (i ← 0; i < 256; i++)\n     x ← ∑(j=0 to η - 1) b[2iη + j]\n     y ← ∑(j=0 to η - 1) b[2iη + η + j]\n     f[i] ← x−y mod q\n end for\n return f\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution_2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsample_from_binomial_distribution_2_ea(Eurydice_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_04 sampled_i16s = { .data = { 0U } };\n  for (size_t i0 = (size_t)0U; i0 < randomness.meta / (size_t)4U; i0++)\n  {\n    size_t chunk_number = i0;\n    Eurydice_borrow_slice_u8\n    byte_chunk =\n      Eurydice_slice_subslice_shared_c8(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = chunk_number * (size_t)4U,\n            .end = chunk_number * (size_t)4U + (size_t)4U\n          }\n        ));\n    uint32_t\n    random_bits_as_u32 =\n      (((uint32_t)byte_chunk.ptr[0U] | (uint32_t)byte_chunk.ptr[1U] << 8U) |\n        (uint32_t)byte_chunk.ptr[2U] << 16U)\n      | (uint32_t)byte_chunk.ptr[3U] << 24U;\n    uint32_t even_bits = random_bits_as_u32 & 1431655765U;\n    uint32_t odd_bits = random_bits_as_u32 >> 1U & 1431655765U;\n    uint32_t coin_toss_outcomes = even_bits + odd_bits;\n    for (uint32_t i = 0U; i < 32U / 4U; i++)\n    {\n      uint32_t outcome_set = i;\n      uint32_t outcome_set0 = outcome_set * 4U;\n      int16_t outcome_1 = (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 3U);\n      int16_t outcome_2 = (int16_t)(coin_toss_outcomes >> (uint32_t)(outcome_set0 + 2U) & 3U);\n      size_t offset = (size_t)(outcome_set0 >> 2U);\n      sampled_i16s.data[(size_t)8U * chunk_number + offset] = outcome_1 - outcome_2;\n    }\n  }\n  return from_i16_array_d6_ea(Eurydice_array_to_slice_shared_990(&sampled_i16s));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution_3\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsample_from_binomial_distribution_3_ea(Eurydice_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_04 sampled_i16s = { .data = { 0U } };\n  for (size_t i0 = (size_t)0U; i0 < randomness.meta / (size_t)3U; i0++)\n  {\n    size_t chunk_number = i0;\n    Eurydice_borrow_slice_u8\n    byte_chunk =\n      Eurydice_slice_subslice_shared_c8(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = chunk_number * (size_t)3U,\n            .end = chunk_number * (size_t)3U + (size_t)3U\n          }\n        ));\n    uint32_t\n    random_bits_as_u24 =\n      ((uint32_t)byte_chunk.ptr[0U] | (uint32_t)byte_chunk.ptr[1U] << 8U) |\n        (uint32_t)byte_chunk.ptr[2U] << 16U;\n    uint32_t first_bits = random_bits_as_u24 & 2396745U;\n    uint32_t second_bits = random_bits_as_u24 >> 1U & 2396745U;\n    uint32_t third_bits = random_bits_as_u24 >> 2U & 2396745U;\n    uint32_t coin_toss_outcomes = first_bits + second_bits + third_bits;\n    for (int32_t i = 0; i < 24 / 6; i++)\n    {\n      int32_t outcome_set = i;\n      int32_t outcome_set0 = outcome_set * 6;\n      int16_t outcome_1 = (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 7U);\n      int16_t outcome_2 = (int16_t)(coin_toss_outcomes >> (uint32_t)(outcome_set0 + 3) & 7U);\n      size_t offset = (size_t)(outcome_set0 / 6);\n      sampled_i16s.data[(size_t)4U * chunk_number + offset] = outcome_1 - outcome_2;\n    }\n  }\n  return from_i16_array_d6_ea(Eurydice_array_to_slice_shared_990(&sampled_i16s));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- ETA= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsample_from_binomial_distribution_66(Eurydice_borrow_slice_u8 randomness)\n{\n  return sample_from_binomial_distribution_2_ea(randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_7\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_7_ea(Eurydice_arr_9e *re)\n{\n  size_t step = LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT / (size_t)2U;\n  for (size_t i = (size_t)0U; i < step; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d6\n    t = libcrux_ml_kem_vector_portable_multiply_by_constant_b8(re->data[j + step], -1600);\n    re->data[j + step] = libcrux_ml_kem_vector_portable_sub_b8(re->data[j], &t);\n    Eurydice_arr_d6 uu____1 = libcrux_ml_kem_vector_portable_add_b8(re->data[j], &t);\n    re->data[j] = uu____1;\n  }\n}\n\ntypedef struct libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2_s\n{\n  Eurydice_arr_d6 fst;\n  Eurydice_arr_d6 snd;\n}\nlibcrux_ml_kem_vector_portable_vector_type_PortableVector_x2;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_layer_int_vec_step\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2\nntt_layer_int_vec_step_ea(Eurydice_arr_d6 a, Eurydice_arr_d6 b, int16_t zeta_r)\n{\n  Eurydice_arr_d6\n  t = libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(b, zeta_r);\n  b = libcrux_ml_kem_vector_portable_sub_b8(a, &t);\n  a = libcrux_ml_kem_vector_portable_add_b8(a, &t);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){\n        .fst = a,\n        .snd = b\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_4_plus\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nntt_at_layer_4_plus_ea(size_t *zeta_i, Eurydice_arr_9e *re, size_t layer)\n{\n  size_t step = (size_t)1U << (uint32_t)layer;\n  for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++)\n  {\n    size_t round = i0;\n    zeta_i[0U]++;\n    size_t offset = round * step * (size_t)2U;\n    size_t offset_vec = offset / (size_t)16U;\n    size_t step_vec = step / (size_t)16U;\n    for (size_t i = offset_vec; i < offset_vec + step_vec; i++)\n    {\n      size_t j = i;\n      libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2\n      uu____0 =\n        ntt_layer_int_vec_step_ea(re->data[j],\n          re->data[j + step_vec],\n          libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n      Eurydice_arr_d6 x = uu____0.fst;\n      Eurydice_arr_d6 y = uu____0.snd;\n      re->data[j] = x;\n      re->data[j + step_vec] = y;\n    }\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_3\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_3_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    Eurydice_arr_d6\n    uu____0 =\n      libcrux_ml_kem_vector_portable_ntt_layer_3_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n    re->data[round] = uu____0;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_2_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    re->data[round] =\n      libcrux_ml_kem_vector_portable_ntt_layer_2_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)1U));\n    zeta_i[0U]++;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_1_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    re->data[round] =\n      libcrux_ml_kem_vector_portable_ntt_layer_1_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)3U));\n    zeta_i[0U] += (size_t)3U;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void poly_barrett_reduce_ea(Eurydice_arr_9e *myself)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6 uu____0 = libcrux_ml_kem_vector_portable_barrett_reduce_b8(myself->data[i0]);\n    myself->data[i0] = uu____0;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void poly_barrett_reduce_d6_ea(Eurydice_arr_9e *self)\n{\n  poly_barrett_reduce_ea(self);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_binomially_sampled_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_binomially_sampled_ring_element_ea(Eurydice_arr_9e *re)\n{\n  ntt_at_layer_7_ea(re);\n  size_t zeta_i = (size_t)1U;\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_ea(&zeta_i, re);\n  ntt_at_layer_2_ea(&zeta_i, re);\n  ntt_at_layer_1_ea(&zeta_i, re);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- ETA= 2\n- ETA_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_bf1(\n  Eurydice_arr_d20 *re_as_ntt,\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_890 prf_inputs;\n  Eurydice_arr_fa repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_23(&prf_inputs, domain_separator);\n  Eurydice_arr_3b0 prf_outputs = PRFxN_4a_f5(&prf_inputs);\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_ea(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_73_391(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Given two `KyberPolynomialRingElement`s in their NTT representations,\n compute their product. Given two polynomials in the NTT domain `f^` and `ĵ`,\n the `iᵗʰ` coefficient of the product `k̂` is determined by the calculation:\n\n ```plaintext\n ĥ[2·i] + ĥ[2·i + 1]X = (f^[2·i] + f^[2·i + 1]X)·(ĝ[2·i] + ĝ[2·i + 1]X) mod (X² - ζ^(2·BitRev₇(i) + 1))\n ```\n\n This function almost implements <strong>Algorithm 10</strong> of the\n NIST FIPS 203 standard, which is reproduced below:\n\n ```plaintext\n Input: Two arrays fˆ ∈ ℤ₂₅₆ and ĝ ∈ ℤ₂₅₆.\n Output: An array ĥ ∈ ℤq.\n\n for(i ← 0; i < 128; i++)\n     (ĥ[2i], ĥ[2i+1]) ← BaseCaseMultiply(fˆ[2i], fˆ[2i+1], ĝ[2i], ĝ[2i+1], ζ^(2·BitRev₇(i) + 1))\n end for\n return ĥ\n ```\n We say \"almost\" because the coefficients of the ring element output by\n this function are in the Montgomery domain.\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nntt_multiply_ea(const Eurydice_arr_9e *myself, const Eurydice_arr_9e *rhs)\n{\n  Eurydice_arr_9e out = ZERO_ea();\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    uu____0 =\n      libcrux_ml_kem_vector_portable_ntt_multiply_b8(&myself->data[i0],\n        &rhs->data[i0],\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)3U));\n    out.data[i0] = uu____0;\n  }\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nntt_multiply_d6_ea(const Eurydice_arr_9e *self, const Eurydice_arr_9e *rhs)\n{\n  return ntt_multiply_ea(self, rhs);\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_ee(Eurydice_arr_9e *myself, const Eurydice_arr_9e *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d6\n    uu____0 = libcrux_ml_kem_vector_portable_add_b8(myself->data[i0], &rhs->data[i0]);\n    myself->data[i0] = uu____0;);\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_ee(Eurydice_arr_9e *self, const Eurydice_arr_9e *rhs)\n{\n  add_to_ring_element_ee(self, rhs);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.to_standard_domain\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 to_standard_domain_ea(Eurydice_arr_d6 vector)\n{\n  return\n    libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(vector,\n      LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_standard_error_reduce_ea(Eurydice_arr_9e *myself, const Eurydice_arr_9e *error)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d6 coefficient_normal_form = to_standard_domain_ea(myself->data[j]);\n    Eurydice_arr_d6\n    sum = libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, &error->data[j]);\n    Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum);\n    myself->data[j] = red;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_standard_error_reduce_d6_ea(Eurydice_arr_9e *self, const Eurydice_arr_9e *error)\n{\n  add_standard_error_reduce_ea(self, error);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_ee(\n  Eurydice_arr_d20 *t_as_ntt,\n  const Eurydice_arr_600 *matrix_A,\n  const Eurydice_arr_d20 *s_as_ntt,\n  const Eurydice_arr_d20 *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    const Eurydice_arr_d20 *row = &matrix_A->data[i0];\n    Eurydice_arr_9e uu____0 = ZERO_d6_ea();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR4(i1,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i1;\n      const Eurydice_arr_9e *matrix_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_ee(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_ea(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_391(\n  Eurydice_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_d20 *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_fe(key_generation_seed);\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_600 *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_911(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_bf1(private_key, &prf_input, 0U);\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_391(&lvalue););\n  Eurydice_arr_d20 error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_bf1(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_ee(&public_key->t_as_ntt, &public_key->A, &private_key[0U], &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_9e call_mut_b4_ee(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_d20 call_mut_22_ee(void **_)\n{\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_ee(&lvalue););\n  return arr_struct;\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.clone_c1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic inline Eurydice_arr_9e clone_c1_ea(const Eurydice_arr_9e *self)\n{\n  return\n    core_array__core__clone__Clone_for__T__N___clone((size_t)16U,\n      self,\n      Eurydice_arr_d6,\n      Eurydice_arr_9e);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_600 transpose_a_ee(Eurydice_arr_600 ind_cpa_a)\n{\n  Eurydice_arr_600 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_ee(&lvalue););\n  Eurydice_arr_600 A = arr_struct;\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e uu____0 = clone_c1_ea(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b81(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *out\n)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_391(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_600 A = transpose_a_ee(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_d1\n  pk_serialized =\n    serialize_public_key_1c(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_4a_23(Eurydice_array_to_slice_shared_b50(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_fe(Eurydice_borrow_slice_u8 randomness, Eurydice_borrow_slice_u8 pk_hash)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_4a_23(Eurydice_array_to_slice_shared_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_d20, libcrux_ml_kem_polynomial_PolynomialRingElement_1d\n\n*/\ntypedef struct tuple_12_s\n{\n  Eurydice_arr_d20 fst;\n  Eurydice_arr_9e snd;\n}\ntuple_12;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_f1_871(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_dd_871(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_bf1(\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_d20 *error_1\n)\n{\n  Eurydice_arr_890 prf_inputs;\n  Eurydice_arr_fa repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_23(&prf_inputs, domain_separator);\n  Eurydice_arr_3b0 prf_outputs = PRFxN_4a_f5(&prf_inputs);\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF\nwith const generics\n- LEN= 128\n*/\nstatic inline Eurydice_arr_89 PRF_ec(Eurydice_borrow_slice_u8 input)\n{\n  Eurydice_arr_89 digest = { .data = { 0U } };\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&digest), input);\n  return digest;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic inline Eurydice_arr_89 PRF_4a_f50(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_9e call_mut_a8_ee(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_1_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    re->data[round] =\n      libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)3U));\n    zeta_i[0U] -= (size_t)3U;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_2_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    re->data[round] =\n      libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)1U));\n    zeta_i[0U]--;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_3\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_3_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    Eurydice_arr_d6\n    uu____0 =\n      libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n    re->data[round] = uu____0;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.inv_ntt_layer_int_vec_step_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2\ninv_ntt_layer_int_vec_step_reduce_ea(Eurydice_arr_d6 a, Eurydice_arr_d6 b, int16_t zeta_r)\n{\n  Eurydice_arr_d6 a_minus_b = libcrux_ml_kem_vector_portable_sub_b8(b, &a);\n  a =\n    libcrux_ml_kem_vector_portable_barrett_reduce_b8(libcrux_ml_kem_vector_portable_add_b8(a, &b));\n  b = libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(a_minus_b, zeta_r);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){\n        .fst = a,\n        .snd = b\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_4_plus\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ninvert_ntt_at_layer_4_plus_ea(size_t *zeta_i, Eurydice_arr_9e *re, size_t layer)\n{\n  size_t step = (size_t)1U << (uint32_t)layer;\n  for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++)\n  {\n    size_t round = i0;\n    zeta_i[0U]--;\n    size_t offset = round * step * (size_t)2U;\n    size_t offset_vec = offset / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;\n    size_t step_vec = step / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;\n    for (size_t i = offset_vec; i < offset_vec + step_vec; i++)\n    {\n      size_t j = i;\n      libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2\n      uu____0 =\n        inv_ntt_layer_int_vec_step_reduce_ea(re->data[j],\n          re->data[j + step_vec],\n          libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n      Eurydice_arr_d6 x = uu____0.fst;\n      Eurydice_arr_d6 y = uu____0.snd;\n      re->data[j] = x;\n      re->data[j + step_vec] = y;\n    }\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_ee(Eurydice_arr_9e *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_ea(&zeta_i, re);\n  invert_ntt_at_layer_2_ea(&zeta_i, re);\n  invert_ntt_at_layer_3_ea(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_error_reduce_ea(Eurydice_arr_9e *myself, const Eurydice_arr_9e *error)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d6\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(myself->data[j],\n        1441);\n    Eurydice_arr_d6\n    sum = libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, &error->data[j]);\n    Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum);\n    myself->data[j] = red;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_error_reduce_d6_ea(Eurydice_arr_9e *self, const Eurydice_arr_9e *error)\n{\n  add_error_reduce_ea(self, error);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d20\ncompute_vector_u_ee(\n  const Eurydice_arr_600 *a_as_ntt,\n  const Eurydice_arr_d20 *r_as_ntt,\n  const Eurydice_arr_d20 *error_1\n)\n{\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_ee(&lvalue););\n  Eurydice_arr_d20 result = arr_struct;\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    const Eurydice_arr_d20 *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      const Eurydice_arr_9e *a_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_ee(&result.data[i1], &product););\n    invert_ntt_montgomery_ee(&result.data[i1]);\n    add_error_reduce_d6_ea(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 compress_ef(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int16_t\n    uu____0 =\n      libcrux_secrets_int_as_i16_f5(libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient((uint8_t)10,\n          libcrux_secrets_int_as_u16_f5(a.data[i0])));\n    a.data[i0] = uu____0;\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic Eurydice_arr_d6 compress_b8_ef(Eurydice_arr_d6 a)\n{\n  return compress_ef(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 compress_c4(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int16_t\n    uu____0 =\n      libcrux_secrets_int_as_i16_f5(libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient((uint8_t)11,\n          libcrux_secrets_int_as_u16_f5(a.data[i0])));\n    a.data[i0] = uu____0;\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic Eurydice_arr_d6 compress_b8_c4(Eurydice_arr_d6 a)\n{\n  return compress_c4(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- OUT_LEN= 352\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_e7 compress_then_serialize_11_bd(const Eurydice_arr_9e *re)\n{\n  Eurydice_arr_e7 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    coefficient =\n      compress_b8_c4(libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(re->data[i0]));\n    Eurydice_arr_80 bytes = libcrux_ml_kem_vector_portable_serialize_11_b8(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d418(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)22U * i0,\n            .end = (size_t)22U * i0 + (size_t)22U\n          }\n        )),\n      Eurydice_array_to_slice_shared_98(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- COMPRESSION_FACTOR= 11\n- OUT_LEN= 352\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_e7\ncompress_then_serialize_ring_element_u_86(const Eurydice_arr_9e *re)\n{\n  return compress_then_serialize_11_bd(re);\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- OUT_LEN= 1408\n- COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_2e(Eurydice_arr_d20 input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)1408U / (size_t)4U),\n            .end = (i0 + (size_t)1U) * ((size_t)1408U / (size_t)4U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_e7 lvalue = compress_then_serialize_ring_element_u_86(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_25(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_12\nencrypt_c1_871(\n  Eurydice_borrow_slice_u8 randomness,\n  const Eurydice_arr_600 *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_d20 arr_struct0;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_871(&lvalue););\n  Eurydice_arr_d20 r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_bf1(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_871(&lvalue););\n  Eurydice_arr_d20 error_1 = arr_struct;\n  uint8_t\n  domain_separator = sample_ring_element_cbd_bf1(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_4a_f50(Eurydice_array_to_slice_shared_b5(&prf_input));\n  Eurydice_arr_9e\n  error_2 = sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_output));\n  Eurydice_arr_d20 u = compute_vector_u_ee(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_2e(u, ciphertext);\n  return (KRML_CLITERAL(tuple_12){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_message\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_message_ea(const Eurydice_arr_ec *serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d6\n    coefficient_compressed =\n      libcrux_ml_kem_vector_portable_deserialize_1_b8(Eurydice_array_to_subslice_shared_d4(serialized,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = (size_t)2U * i0,\n              .end = (size_t)2U * i0 + (size_t)2U\n            }\n          )));\n    Eurydice_arr_d6\n    uu____0 = libcrux_ml_kem_vector_portable_decompress_1_b8(coefficient_compressed);\n    re.data[i0] = uu____0;);\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nadd_message_error_reduce_ea(\n  const Eurydice_arr_9e *myself,\n  const Eurydice_arr_9e *message,\n  Eurydice_arr_9e result\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(result.data[i0],\n        1441);\n    Eurydice_arr_d6\n    sum1 = libcrux_ml_kem_vector_portable_add_b8(myself->data[i0], &message->data[i0]);\n    Eurydice_arr_d6 sum2 = libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, &sum1);\n    Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum2);\n    result.data[i0] = red;\n  }\n  return result;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nadd_message_error_reduce_d6_ea(\n  const Eurydice_arr_9e *self,\n  const Eurydice_arr_9e *message,\n  Eurydice_arr_9e result\n)\n{\n  return add_message_error_reduce_ea(self, message, result);\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_ring_element_v_ee(\n  const Eurydice_arr_d20 *t_as_ntt,\n  const Eurydice_arr_d20 *r_as_ntt,\n  const Eurydice_arr_9e *error_2,\n  const Eurydice_arr_9e *message\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_ee(&result, &product););\n  invert_ntt_montgomery_ee(&result);\n  return add_message_error_reduce_d6_ea(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 compress_d1(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int16_t\n    uu____0 =\n      libcrux_secrets_int_as_i16_f5(libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient((uint8_t)4,\n          libcrux_secrets_int_as_u16_f5(a.data[i0])));\n    a.data[i0] = uu____0;\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic Eurydice_arr_d6 compress_b8_d1(Eurydice_arr_d6 a)\n{\n  return compress_d1(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_4\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_4_ea(Eurydice_arr_9e re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6 coefficient = compress_b8_d1(to_unsigned_field_modulus_ea(re.data[i0]));\n    Eurydice_array_u8x8 bytes = libcrux_ml_kem_vector_portable_serialize_4_b8(coefficient);\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)8U * i0,\n            .end = (size_t)8U * i0 + (size_t)8U\n          }\n        )),\n      Eurydice_array_to_slice_shared_6e(&bytes),\n      uint8_t);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 compress_f4(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int16_t\n    uu____0 =\n      libcrux_secrets_int_as_i16_f5(libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient((uint8_t)5,\n          libcrux_secrets_int_as_u16_f5(a.data[i0])));\n    a.data[i0] = uu____0;\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic Eurydice_arr_d6 compress_b8_f4(Eurydice_arr_d6 a)\n{\n  return compress_f4(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_5\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_5_ea(Eurydice_arr_9e re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    coefficients =\n      compress_b8_f4(libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(re.data[i0]));\n    Eurydice_arr_6d bytes = libcrux_ml_kem_vector_portable_serialize_5_b8(coefficients);\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)10U * i0,\n            .end = (size_t)10U * i0 + (size_t)10U\n          }\n        )),\n      Eurydice_array_to_slice_shared_30(&bytes),\n      uint8_t);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- COMPRESSION_FACTOR= 5\n- OUT_LEN= 160\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_1c(Eurydice_arr_9e re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_5_ea(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- V_COMPRESSION_FACTOR= 5\n- C2_LEN= 160\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_1c(\n  const Eurydice_arr_d20 *t_as_ntt,\n  const Eurydice_arr_d20 *r_as_ntt,\n  const Eurydice_arr_9e *error_2,\n  const Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_9e message_as_ring_element = deserialize_then_decompress_message_ea(message);\n  Eurydice_arr_9e\n  v = compute_ring_element_v_ee(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_1c(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_LEN= 1408\n- C2_LEN= 160\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nencrypt_unpacked_d51(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 *public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_d1 ciphertext = { .data = { 0U } };\n  tuple_12\n  uu____0 =\n    encrypt_c1_871(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d419(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)1408U })));\n  Eurydice_arr_d20 r_as_ntt = uu____0.fst;\n  Eurydice_arr_9e error_2 = uu____0.snd;\n  encrypt_c2_1c(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f6(&ciphertext, (size_t)1408U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a71(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_fe(Eurydice_array_to_slice_shared_01(randomness),\n      Eurydice_array_to_slice_shared_01(&public_key->public_key_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_d1\n  ciphertext =\n    encrypt_unpacked_d51(&public_key->ind_cpa_public_key,\n      randomness,\n      pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_25){\n        .fst = libcrux_ml_kem_types_from_19_d9(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- U_COMPRESSION_FACTOR= 11\n*/\nstatic Eurydice_arr_9e call_mut_35_1c(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 decompress_ciphertext_coefficient_ef(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int32_t\n    decompressed =\n      libcrux_secrets_int_as_i32_f5(a.data[i0]) *\n        libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n    decompressed = (int32_t)((uint32_t)decompressed << 1U) + (int32_t)((uint32_t)1 << (uint32_t)10);\n    decompressed >>= (uint32_t)(10 + 1);\n    a.data[i0] = libcrux_secrets_int_as_i16_36(decompressed);\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic Eurydice_arr_d6 decompress_ciphertext_coefficient_b8_ef(Eurydice_arr_d6 a)\n{\n  return decompress_ciphertext_coefficient_ef(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_10\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_10_ea(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)20U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)20U,\n            .end = i0 * (size_t)20U + (size_t)20U\n          }\n        ));\n    Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_10_b8(bytes);\n    Eurydice_arr_d6 uu____0 = decompress_ciphertext_coefficient_b8_ef(coefficient);\n    re.data[i0] = uu____0;\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 decompress_ciphertext_coefficient_c4(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int32_t\n    decompressed =\n      libcrux_secrets_int_as_i32_f5(a.data[i0]) *\n        libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n    decompressed = (int32_t)((uint32_t)decompressed << 1U) + (int32_t)((uint32_t)1 << (uint32_t)11);\n    decompressed >>= (uint32_t)(11 + 1);\n    a.data[i0] = libcrux_secrets_int_as_i16_36(decompressed);\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic Eurydice_arr_d6 decompress_ciphertext_coefficient_b8_c4(Eurydice_arr_d6 a)\n{\n  return decompress_ciphertext_coefficient_c4(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_11_ea(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)22U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)22U,\n            .end = i0 * (size_t)22U + (size_t)22U\n          }\n        ));\n    Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_11_b8(bytes);\n    Eurydice_arr_d6 uu____0 = decompress_ciphertext_coefficient_b8_c4(coefficient);\n    re.data[i0] = uu____0;\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_ring_element_u_ee(Eurydice_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_11_ea(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- VECTOR_U_COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE void ntt_vector_u_ee(Eurydice_arr_9e *re)\n{\n  size_t zeta_i = (size_t)0U;\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_ea(&zeta_i, re);\n  ntt_at_layer_2_ea(&zeta_i, re);\n  ntt_at_layer_1_ea(&zeta_i, re);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- U_COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d20\ndeserialize_then_decompress_u_1c(const Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_1c(&lvalue););\n  Eurydice_arr_d20 u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)1568U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_shared_d48(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_ee(u_bytes);\n    ntt_vector_u_ee(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 decompress_ciphertext_coefficient_d1(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int32_t\n    decompressed =\n      libcrux_secrets_int_as_i32_f5(a.data[i0]) *\n        libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n    decompressed = (int32_t)((uint32_t)decompressed << 1U) + (int32_t)((uint32_t)1 << (uint32_t)4);\n    decompressed >>= (uint32_t)(4 + 1);\n    a.data[i0] = libcrux_secrets_int_as_i16_36(decompressed);\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic Eurydice_arr_d6 decompress_ciphertext_coefficient_b8_d1(Eurydice_arr_d6 a)\n{\n  return decompress_ciphertext_coefficient_d1(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_4\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_4_ea(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)8U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)8U,\n            .end = i0 * (size_t)8U + (size_t)8U\n          }\n        ));\n    Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_4_b8(bytes);\n    Eurydice_arr_d6 uu____0 = decompress_ciphertext_coefficient_b8_d1(coefficient);\n    re.data[i0] = uu____0;\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 decompress_ciphertext_coefficient_f4(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int32_t\n    decompressed =\n      libcrux_secrets_int_as_i32_f5(a.data[i0]) *\n        libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n    decompressed = (int32_t)((uint32_t)decompressed << 1U) + (int32_t)((uint32_t)1 << (uint32_t)5);\n    decompressed >>= (uint32_t)(5 + 1);\n    a.data[i0] = libcrux_secrets_int_as_i16_36(decompressed);\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic Eurydice_arr_d6 decompress_ciphertext_coefficient_b8_f4(Eurydice_arr_d6 a)\n{\n  return decompress_ciphertext_coefficient_f4(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_5\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_5_ea(Eurydice_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)10U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_shared_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)10U,\n            .end = i0 * (size_t)10U + (size_t)10U\n          }\n        ));\n    re.data[i0] = libcrux_ml_kem_vector_portable_deserialize_5_b8(bytes);\n    Eurydice_arr_d6 uu____1 = decompress_ciphertext_coefficient_b8_f4(re.data[i0]);\n    re.data[i0] = uu____1;\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_ring_element_v_1c(Eurydice_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_5_ea(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsubtract_reduce_ea(const Eurydice_arr_9e *myself, Eurydice_arr_9e b)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(b.data[i0],\n        1441);\n    Eurydice_arr_d6\n    diff = libcrux_ml_kem_vector_portable_sub_b8(myself->data[i0], &coefficient_normal_form);\n    Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(diff);\n    b.data[i0] = red;\n  }\n  return b;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsubtract_reduce_d6_ea(const Eurydice_arr_9e *self, Eurydice_arr_9e b)\n{\n  return subtract_reduce_ea(self, b);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_message_ee(\n  const Eurydice_arr_9e *v,\n  const Eurydice_arr_d20 *secret_as_ntt,\n  const Eurydice_arr_d20 *u_as_ntt\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_ee(&result, &product););\n  invert_ntt_montgomery_ee(&result);\n  return subtract_reduce_d6_ea(v, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_message\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec compress_then_serialize_message_ea(Eurydice_arr_9e re)\n{\n  Eurydice_arr_ec serialized = { .data = { 0U } };\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d6 coefficient = to_unsigned_field_modulus_ea(re.data[i0]);\n    Eurydice_arr_d6\n    coefficient_compressed = libcrux_ml_kem_vector_portable_compress_1_b8(coefficient);\n    Eurydice_array_u8x2\n    bytes = libcrux_ml_kem_vector_portable_serialize_1_b8(coefficient_compressed);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)2U * i0,\n            .end = (size_t)2U * i0 + (size_t)2U\n          }\n        )),\n      Eurydice_array_to_slice_shared_82(&bytes),\n      uint8_t););\n  return serialized;\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_38(const Eurydice_arr_d20 *secret_key, const Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_d20 u_as_ntt = deserialize_then_decompress_u_1c(ciphertext);\n  Eurydice_arr_9e\n  v =\n    deserialize_then_decompress_ring_element_v_1c(Eurydice_array_to_subslice_from_shared_5f4(ciphertext,\n        (size_t)1408U));\n  Eurydice_arr_9e message = compute_message_ee(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_ea(message);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF\nwith const generics\n- LEN= 32\n*/\nstatic inline Eurydice_arr_ec PRF_ce(Eurydice_borrow_slice_u8 input)\n{\n  Eurydice_arr_ec digest = { .data = { 0U } };\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_01(&digest), input);\n  return digest;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 4\n- LEN= 32\n*/\nstatic inline Eurydice_arr_ec PRF_4a_f5(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c1(\n  const libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_38(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_shared_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_23(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_14\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_49(Eurydice_array_to_slice_shared_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f5(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_d9(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_f5(Eurydice_array_to_slice_shared_720(&to_hash));\n  Eurydice_arr_d1\n  expected_ciphertext =\n    encrypt_unpacked_d51(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_d9(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_shared_b50(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_9e call_mut_0b_ee(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d20\ndeserialize_ring_elements_reduced_out_ee(Eurydice_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_ee(&lvalue););\n  Eurydice_arr_d20 deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_ee(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_1c(const Eurydice_arr_d1 *public_key)\n{\n  Eurydice_arr_d20\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_ee(Eurydice_array_to_subslice_to_shared_212(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)));\n  Eurydice_arr_d1\n  public_key_serialized =\n    serialize_public_key_1c(&deserialized_pk,\n      Eurydice_array_to_subslice_from_shared_5f4(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)));\n  return Eurydice_array_eq((size_t)1568U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_4c(const Eurydice_arr_a8 *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_4a_23(Eurydice_array_to_subslice_shared_d49(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)4U,\n            .end = (size_t)768U * (size_t)4U + (size_t)32U\n          }\n        )));\n  Eurydice_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_shared_d49(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)4U + (size_t)32U,\n          .end = (size_t)768U * (size_t)4U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_shared((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_79(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_4c(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- PRIVATE_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair1024\ngenerate_keypair_301(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_d20 private_key = default_70_ee();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 public_key = default_8b_ee();\n  generate_keypair_unpacked_391(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_1c(&public_key, &private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SERIALIZED_KEY_LEN= 3168\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_a8\nserialize_kem_secret_key_4c(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_a8 out = { .data = { 0U } };\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_4c(private_key,\n    public_key,\n    implicit_rejection_value,\n    &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_b81(const Eurydice_arr_c7 *randomness)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair1024\n  uu____0 = generate_keypair_301(ind_cpa_keypair_randomness);\n  Eurydice_arr_df ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_d1 public_key = uu____0.snd;\n  Eurydice_arr_a8\n  secret_key_serialized =\n    serialize_kem_secret_key_4c(Eurydice_array_to_slice_shared_2f(&ind_cpa_private_key),\n      Eurydice_array_to_slice_shared_b50(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_a8 private_key = libcrux_ml_kem_types_from_b2_0e(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_70(private_key,\n      libcrux_ml_kem_types_from_51_d9(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_fe(Eurydice_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94\nbuild_unpacked_public_key_051(Eurydice_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94\n  unpacked_public_key = default_8b_ee();\n  build_unpacked_public_key_mut_051(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_LEN= 1408\n- C2_LEN= 160\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nencrypt_d51(\n  Eurydice_borrow_slice_u8 public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94\n  unpacked_public_key = build_unpacked_public_key_051(public_key);\n  return encrypt_unpacked_d51(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_4c(Eurydice_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_encapsulate_991(\n  const Eurydice_arr_d1 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_fe(Eurydice_array_to_slice_shared_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_4a_23(Eurydice_array_to_slice_shared_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_23(Eurydice_array_to_slice_shared_17(&to_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_d1\n  ciphertext =\n    encrypt_d51(Eurydice_array_to_slice_shared_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_d1 uu____2 = libcrux_ml_kem_types_from_19_d9(ciphertext);\n  return (KRML_CLITERAL(tuple_25){ .fst = uu____2, .snd = kdf_39_4c(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic Eurydice_arr_9e call_mut_0b_38(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_38(Eurydice_borrow_slice_u8 secret_key, const Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_38(&lvalue););\n  Eurydice_arr_d20 secret_key_unpacked = arr_struct;\n  deserialize_vector_ee(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_38(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd1(\n  const Eurydice_arr_a8 *private_key,\n  const Eurydice_arr_d1 *ciphertext\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e3(Eurydice_array_to_slice_shared_68(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_38(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_23(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_14 to_hash = libcrux_ml_kem_utils_into_padded_array_49(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f5(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_d9(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_f5(Eurydice_array_to_slice_shared_720(&to_hash));\n  Eurydice_arr_d1\n  expected_ciphertext = encrypt_d51(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_4c(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_4c(shared_secret0);\n  Eurydice_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_d9(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_shared_b50(&expected_ciphertext),\n      Eurydice_array_to_slice_shared_01(&shared_secret),\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret0));\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_66(\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_arr_1e *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_shared_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_9e uu____0 = deserialize_to_reduced_ring_element_ea(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final\nwith const generics\n- K= 2\n*/\nstatic inline Eurydice_arr_e3 shake128_init_absorb_final_af(const Eurydice_arr_bf *input)\n{\n  Eurydice_arr_e3 shake128_state;\n  Eurydice_arr_7c repeat_expression[2U];\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_sha3_portable_incremental_shake128_init(););\n  memcpy(shake128_state.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_7c));\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_absorb_final(&shake128_state.data[i0],\n      Eurydice_array_to_slice_shared_e9(&input->data[i0])););\n  return shake128_state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_e3\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_af(\n  const Eurydice_arr_bf *input\n)\n{\n  return shake128_init_absorb_final_af(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 2\n*/\nstatic inline Eurydice_arr_b8 shake128_squeeze_first_three_blocks_af(Eurydice_arr_e3 *st)\n{\n  Eurydice_arr_b8 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(&st->data[i0],\n      Eurydice_array_to_slice_mut_48(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_b8\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_af(\n  Eurydice_arr_e3 *self\n)\n{\n  return shake128_squeeze_first_three_blocks_af(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_53(\n  const Eurydice_arr_b8 *randomness,\n  Eurydice_arr_85 *sampled_coefficients,\n  Eurydice_arr_800 *out\n)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_shared_d42(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block\nwith const generics\n- K= 2\n*/\nstatic inline Eurydice_arr_5b0 shake128_squeeze_next_block_af(Eurydice_arr_e3 *st)\n{\n  Eurydice_arr_5b0 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&st->data[i0],\n      Eurydice_array_to_slice_mut_2c(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_5b0\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_af(Eurydice_arr_e3 *self)\n{\n  return shake128_squeeze_next_block_af(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_530(\n  const Eurydice_arr_5b0 *randomness,\n  Eurydice_arr_85 *sampled_coefficients,\n  Eurydice_arr_800 *out\n)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_shared_d43(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_9e call_mut_0a_910(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_ea(Eurydice_array_to_subslice_shared_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_1e sample_from_xof_910(const Eurydice_arr_bf *seeds)\n{\n  Eurydice_arr_85 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_800 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_e3\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_af(seeds);\n  Eurydice_arr_b8\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_af(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_53(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_5b0\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_af(&xof_state);\n      done = sample_from_uniform_distribution_next_530(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_1e arr_mapped_str;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_910(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_910(Eurydice_arr_df0 *A_transpose, const Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_bf seeds;\n    Eurydice_arr_31 repeat_expression[2U];\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_1e sampled = sample_from_xof_910(&seeds);\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_4a\nwith const generics\n- K= 2\n*/\nstatic inline Eurydice_arr_ec H_4a_af(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_e0(\n  const Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *unpacked_public_key\n)\n{\n  Eurydice_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_shared_210(public_key, (size_t)768U);\n  deserialize_ring_elements_reduced_66(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_shared_5f1(public_key,\n        (size_t)768U));\n  Eurydice_arr_df0 *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_shared_5f1(public_key,\n        (size_t)768U));\n  sample_matrix_A_910(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_4a_af(Eurydice_array_to_slice_shared_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_66(const Eurydice_arr_1e *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_ea(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_53(\n  const Eurydice_arr_1e *t_as_ntt,\n  Eurydice_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_03 *serialized\n)\n{\n  serialize_vector_66(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d46(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_53(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *self,\n  Eurydice_arr_03 *serialized\n)\n{\n  serialize_public_key_mut_53(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_53(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_53(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_03\nserialize_public_key_53(const Eurydice_arr_1e *t_as_ntt, Eurydice_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_03 public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_53(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_03\nserialized_dd_53(const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_df(serialize_public_key_53(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_03\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_53(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self\n)\n{\n  return serialized_dd_53(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PRIVATE_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair512\nserialize_unpacked_secret_key_44(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b *public_key,\n  const Eurydice_arr_1e *private_key\n)\n{\n  Eurydice_arr_03\n  public_key_serialized =\n    serialize_public_key_53(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&public_key->seed_for_A));\n  Eurydice_arr_d2 secret_key_serialized = { .data = { 0U } };\n  serialize_vector_66(private_key, Eurydice_array_to_slice_mut_27(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair512){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SERIALIZED_KEY_LEN= 1632\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_e2(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d412(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d412(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d412(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_4a_af(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d412(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_a3(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair512\n  uu____0 =\n    serialize_unpacked_secret_key_44(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_d2 ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_03 ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_e2(Eurydice_array_to_slice_shared_27(&ind_cpa_private_key),\n    Eurydice_array_to_slice_shared_3b(&ind_cpa_public_key),\n    Eurydice_array_to_slice_shared_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_a3(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_ab0 sk = libcrux_ml_kem_types_default_d3_be();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_a3(self, &sk);\n  return sk;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_66(Eurydice_borrow_slice_u8 secret_key, Eurydice_arr_1e *secret_as_ntt)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_ea(Eurydice_slice_subslice_shared_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_050(\n  Eurydice_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_66(Eurydice_slice_subslice_to_shared_72(public_key,\n      (size_t)768U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_shared_6d(public_key, (size_t)768U);\n  Eurydice_arr_df0 *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_910(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_71(\n  const Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e0(Eurydice_array_to_slice_shared_99(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_66(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_050(ind_cpa_public_key,\n    &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_shared_6d(ind_cpa_public_key, (size_t)768U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_1e default_70_66(void)\n{\n  Eurydice_arr_1e lit;\n  Eurydice_arr_9e repeat_expression[2U];\n  KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n  memcpy(lit.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_9e));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b default_8b_66(void)\n{\n  Eurydice_arr_1e uu____0;\n  Eurydice_arr_9e repeat_expression0[2U];\n  KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression0[i] = ZERO_d6_ea(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)2U * sizeof (Eurydice_arr_9e));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_1e repeat_expression1[2U];\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    Eurydice_arr_1e lit;\n    Eurydice_arr_9e repeat_expression[2U];\n    KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n    memcpy(lit.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_9e));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)2U * sizeof (Eurydice_arr_1e));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b\nlibcrux_ml_kem_ind_cca_unpacked_default_30_66(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b){\n        .ind_cpa_public_key = default_8b_66(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_66(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_3b\n  uu____0 =\n    { .ind_cpa_private_key = default_70_66(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_66()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_4a\nwith const generics\n- K= 2\n*/\nstatic inline Eurydice_arr_c7 G_4a_af(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_10(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d48(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)2U;\n  return G_4a_af(Eurydice_array_to_slice_shared_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN\nwith const generics\n- K= 2\n- LEN= 192\n*/\nstatic inline Eurydice_arr_eb PRFxN_d5(const Eurydice_arr_4d *input)\n{\n  Eurydice_arr_eb out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_d9(&out.data[i0]),\n      Eurydice_array_to_slice_shared_b5(&input->data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a\nwith const generics\n- K= 2\n- LEN= 192\n*/\nstatic inline Eurydice_arr_eb PRFxN_4a_d5(const Eurydice_arr_4d *input)\n{\n  return PRFxN_d5(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- ETA= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsample_from_binomial_distribution_68(Eurydice_borrow_slice_u8 randomness)\n{\n  return sample_from_binomial_distribution_3_ea(randomness);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- ETA= 3\n- ETA_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_bf0(\n  Eurydice_arr_1e *re_as_ntt,\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_4d prf_inputs;\n  Eurydice_arr_fa repeat_expression[2U];\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_af(&prf_inputs, domain_separator);\n  Eurydice_arr_eb prf_outputs = PRFxN_4a_d5(&prf_inputs);\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_68(Eurydice_array_to_slice_shared_d9(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_ea(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic Eurydice_arr_9e call_mut_73_390(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_66(Eurydice_arr_9e *myself, const Eurydice_arr_9e *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d6\n    uu____0 = libcrux_ml_kem_vector_portable_add_b8(myself->data[i0], &rhs->data[i0]);\n    myself->data[i0] = uu____0;);\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_66(Eurydice_arr_9e *self, const Eurydice_arr_9e *rhs)\n{\n  add_to_ring_element_66(self, rhs);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_66(\n  Eurydice_arr_1e *t_as_ntt,\n  const Eurydice_arr_df0 *matrix_A,\n  const Eurydice_arr_1e *s_as_ntt,\n  const Eurydice_arr_1e *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    const Eurydice_arr_1e *row = &matrix_A->data[i0];\n    Eurydice_arr_9e uu____0 = ZERO_d6_ea();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR2(i1,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i1;\n      const Eurydice_arr_9e *matrix_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_66(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_ea(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_390(\n  Eurydice_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_1e *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_10(key_generation_seed);\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_df0 *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_910(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_bf0(private_key, &prf_input, 0U);\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_390(&lvalue););\n  Eurydice_arr_1e error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_bf0(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_66(&public_key->t_as_ntt, &public_key->A, &private_key[0U], &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_9e call_mut_b4_66(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_1e call_mut_22_66(void **_)\n{\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_66(&lvalue););\n  return arr_struct;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_df0 transpose_a_66(Eurydice_arr_df0 ind_cpa_a)\n{\n  Eurydice_arr_df0 arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_66(&lvalue););\n  Eurydice_arr_df0 A = arr_struct;\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e uu____0 = clone_c1_ea(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b80(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *out\n)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_390(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_df0 A = transpose_a_66(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_03\n  pk_serialized =\n    serialize_public_key_53(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_4a_af(Eurydice_array_to_slice_shared_3b(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_10(Eurydice_borrow_slice_u8 randomness, Eurydice_borrow_slice_u8 pk_hash)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_4a_af(Eurydice_array_to_slice_shared_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_1e, libcrux_ml_kem_polynomial_PolynomialRingElement_1d\n\n*/\ntypedef struct tuple_77_s\n{\n  Eurydice_arr_1e fst;\n  Eurydice_arr_9e snd;\n}\ntuple_77;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_f1_870(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_dd_870(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic inline Eurydice_arr_f3 PRFxN_d50(const Eurydice_arr_4d *input)\n{\n  Eurydice_arr_f3 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&out.data[i0]),\n      Eurydice_array_to_slice_shared_b5(&input->data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic inline Eurydice_arr_f3 PRFxN_4a_d50(const Eurydice_arr_4d *input)\n{\n  return PRFxN_d50(input);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_bf0(\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_1e *error_1\n)\n{\n  Eurydice_arr_4d prf_inputs;\n  Eurydice_arr_fa repeat_expression[2U];\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_af(&prf_inputs, domain_separator);\n  Eurydice_arr_f3 prf_outputs = PRFxN_4a_d50(&prf_inputs);\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic inline Eurydice_arr_89 PRF_4a_d50(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_9e call_mut_a8_66(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_66(Eurydice_arr_9e *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_ea(&zeta_i, re);\n  invert_ntt_at_layer_2_ea(&zeta_i, re);\n  invert_ntt_at_layer_3_ea(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_1e\ncompute_vector_u_66(\n  const Eurydice_arr_df0 *a_as_ntt,\n  const Eurydice_arr_1e *r_as_ntt,\n  const Eurydice_arr_1e *error_1\n)\n{\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_66(&lvalue););\n  Eurydice_arr_1e result = arr_struct;\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    const Eurydice_arr_1e *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      const Eurydice_arr_9e *a_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_66(&result.data[i1], &product););\n    invert_ntt_montgomery_66(&result.data[i1]);\n    add_error_reduce_d6_ea(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_10\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- OUT_LEN= 320\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b0 compress_then_serialize_10_e1(const Eurydice_arr_9e *re)\n{\n  Eurydice_arr_b0 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6 coefficient = compress_b8_ef(to_unsigned_field_modulus_ea(re->data[i0]));\n    Eurydice_arr_fc bytes = libcrux_ml_kem_vector_portable_serialize_10_b8(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d49(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)20U * i0,\n            .end = (size_t)20U * i0 + (size_t)20U\n          }\n        )),\n      Eurydice_array_to_slice_shared_8f(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- COMPRESSION_FACTOR= 10\n- OUT_LEN= 320\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b0\ncompress_then_serialize_ring_element_u_f7(const Eurydice_arr_9e *re)\n{\n  return compress_then_serialize_10_e1(re);\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- OUT_LEN= 640\n- COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_a3(Eurydice_arr_1e input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)640U / (size_t)2U),\n            .end = (i0 + (size_t)1U) * ((size_t)640U / (size_t)2U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b0 lvalue = compress_then_serialize_ring_element_u_f7(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_56(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_77\nencrypt_c1_870(\n  Eurydice_borrow_slice_u8 randomness,\n  const Eurydice_arr_df0 *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_1e arr_struct0;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_870(&lvalue););\n  Eurydice_arr_1e r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_bf0(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_870(&lvalue););\n  Eurydice_arr_1e error_1 = arr_struct;\n  uint8_t\n  domain_separator = sample_ring_element_cbd_bf0(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_4a_d50(Eurydice_array_to_slice_shared_b5(&prf_input));\n  Eurydice_arr_9e\n  error_2 = sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_output));\n  Eurydice_arr_1e u = compute_vector_u_66(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_a3(u, ciphertext);\n  return (KRML_CLITERAL(tuple_77){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_ring_element_v_66(\n  const Eurydice_arr_1e *t_as_ntt,\n  const Eurydice_arr_1e *r_as_ntt,\n  const Eurydice_arr_9e *error_2,\n  const Eurydice_arr_9e *message\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_66(&result, &product););\n  invert_ntt_montgomery_66(&result);\n  return add_message_error_reduce_d6_ea(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- COMPRESSION_FACTOR= 4\n- OUT_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_44(Eurydice_arr_9e re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_4_ea(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- V_COMPRESSION_FACTOR= 4\n- C2_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_44(\n  const Eurydice_arr_1e *t_as_ntt,\n  const Eurydice_arr_1e *r_as_ntt,\n  const Eurydice_arr_9e *error_2,\n  const Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_9e message_as_ring_element = deserialize_then_decompress_message_ea(message);\n  Eurydice_arr_9e\n  v = compute_ring_element_v_66(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_44(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_LEN= 640\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d2\nencrypt_unpacked_d50(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b *public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_d2 ciphertext = { .data = { 0U } };\n  tuple_77\n  uu____0 =\n    encrypt_c1_870(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d410(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)640U })));\n  Eurydice_arr_1e r_as_ntt = uu____0.fst;\n  Eurydice_arr_9e error_2 = uu____0.snd;\n  encrypt_c2_44(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f1(&ciphertext, (size_t)640U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a70(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_10(Eurydice_array_to_slice_shared_01(randomness),\n      Eurydice_array_to_slice_shared_01(&public_key->public_key_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_d2\n  ciphertext =\n    encrypt_unpacked_d50(&public_key->ind_cpa_public_key,\n      randomness,\n      pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_ab){\n        .fst = libcrux_ml_kem_types_from_19_80(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic Eurydice_arr_9e call_mut_35_44(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_ring_element_u_f7(Eurydice_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_10_ea(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- VECTOR_U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE void ntt_vector_u_f7(Eurydice_arr_9e *re)\n{\n  size_t zeta_i = (size_t)0U;\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_ea(&zeta_i, re);\n  ntt_at_layer_2_ea(&zeta_i, re);\n  ntt_at_layer_1_ea(&zeta_i, re);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_1e\ndeserialize_then_decompress_u_44(const Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_44(&lvalue););\n  Eurydice_arr_1e u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)768U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_shared_d41(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_f7(u_bytes);\n    ntt_vector_u_f7(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_ring_element_v_53(Eurydice_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_4_ea(serialized);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_message_66(\n  const Eurydice_arr_9e *v,\n  const Eurydice_arr_1e *secret_as_ntt,\n  const Eurydice_arr_1e *u_as_ntt\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_66(&result, &product););\n  invert_ntt_montgomery_66(&result);\n  return subtract_reduce_d6_ea(v, result);\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_71(const Eurydice_arr_1e *secret_key, const Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_1e u_as_ntt = deserialize_then_decompress_u_44(ciphertext);\n  Eurydice_arr_9e\n  v =\n    deserialize_then_decompress_ring_element_v_53(Eurydice_array_to_subslice_from_shared_5f(ciphertext,\n        (size_t)640U));\n  Eurydice_arr_9e message = compute_message_66(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_ea(message);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 2\n- LEN= 32\n*/\nstatic inline Eurydice_arr_ec PRF_4a_d5(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c0(\n  const libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_71(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_shared_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_af(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_03\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_df(Eurydice_array_to_slice_shared_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_80(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_d5(Eurydice_array_to_slice_shared_3b(&to_hash));\n  Eurydice_arr_d2\n  expected_ciphertext =\n    encrypt_unpacked_d50(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_80(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_shared_27(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_9e call_mut_0b_66(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_1e\ndeserialize_ring_elements_reduced_out_66(Eurydice_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_66(&lvalue););\n  Eurydice_arr_1e deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_66(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_53(const Eurydice_arr_03 *public_key)\n{\n  Eurydice_arr_1e\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_66(Eurydice_array_to_subslice_to_shared_210(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)));\n  Eurydice_arr_03\n  public_key_serialized =\n    serialize_public_key_53(&deserialized_pk,\n      Eurydice_array_to_subslice_from_shared_5f1(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)));\n  return Eurydice_array_eq((size_t)800U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_e2(const Eurydice_arr_ab0 *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_4a_af(Eurydice_array_to_subslice_shared_d45(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)2U,\n            .end = (size_t)768U * (size_t)2U + (size_t)32U\n          }\n        )));\n  Eurydice_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_shared_d45(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)2U + (size_t)32U,\n          .end = (size_t)768U * (size_t)2U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_shared((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_d5(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_e2(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- PRIVATE_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair512\ngenerate_keypair_300(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_1e private_key = default_70_66();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b public_key = default_8b_66();\n  generate_keypair_unpacked_390(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_44(&public_key, &private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SERIALIZED_KEY_LEN= 1632\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ab0\nserialize_kem_secret_key_e2(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_ab0 out = { .data = { 0U } };\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_e2(private_key,\n    public_key,\n    implicit_rejection_value,\n    &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_ind_cca_generate_keypair_b80(const Eurydice_arr_c7 *randomness)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair512\n  uu____0 = generate_keypair_300(ind_cpa_keypair_randomness);\n  Eurydice_arr_d2 ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_03 public_key = uu____0.snd;\n  Eurydice_arr_ab0\n  secret_key_serialized =\n    serialize_kem_secret_key_e2(Eurydice_array_to_slice_shared_27(&ind_cpa_private_key),\n      Eurydice_array_to_slice_shared_3b(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_ab0 private_key = libcrux_ml_kem_types_from_b2_be(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_d6(private_key,\n      libcrux_ml_kem_types_from_51_df(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_10(Eurydice_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b\nbuild_unpacked_public_key_050(Eurydice_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b\n  unpacked_public_key = default_8b_66();\n  build_unpacked_public_key_mut_050(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_LEN= 640\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d2\nencrypt_d50(\n  Eurydice_borrow_slice_u8 public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b\n  unpacked_public_key = build_unpacked_public_key_050(public_key);\n  return encrypt_unpacked_d50(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_e2(Eurydice_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_encapsulate_990(\n  const Eurydice_arr_03 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_10(Eurydice_array_to_slice_shared_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_4a_af(Eurydice_array_to_slice_shared_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_af(Eurydice_array_to_slice_shared_17(&to_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_d2\n  ciphertext =\n    encrypt_d50(Eurydice_array_to_slice_shared_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_d2 uu____2 = libcrux_ml_kem_types_from_19_80(ciphertext);\n  return (KRML_CLITERAL(tuple_ab){ .fst = uu____2, .snd = kdf_39_e2(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic Eurydice_arr_9e call_mut_0b_71(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_71(Eurydice_borrow_slice_u8 secret_key, const Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_71(&lvalue););\n  Eurydice_arr_1e secret_key_unpacked = arr_struct;\n  deserialize_vector_66(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_71(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd0(\n  const Eurydice_arr_ab0 *private_key,\n  const Eurydice_arr_d2 *ciphertext\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e0(Eurydice_array_to_slice_shared_99(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_71(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_af(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_03 to_hash = libcrux_ml_kem_utils_into_padded_array_df(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_80(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_d5(Eurydice_array_to_slice_shared_3b(&to_hash));\n  Eurydice_arr_d2\n  expected_ciphertext = encrypt_d50(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_e2(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_e2(shared_secret0);\n  Eurydice_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_80(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_shared_27(&expected_ciphertext),\n      Eurydice_array_to_slice_shared_01(&shared_secret),\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret0));\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_68(\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_arr_bb *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_shared_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_9e uu____0 = deserialize_to_reduced_ring_element_ea(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final\nwith const generics\n- K= 3\n*/\nstatic inline Eurydice_arr_1b shake128_init_absorb_final_78(const Eurydice_arr_81 *input)\n{\n  Eurydice_arr_1b shake128_state;\n  Eurydice_arr_7c repeat_expression[3U];\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_sha3_portable_incremental_shake128_init(););\n  memcpy(shake128_state.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_7c));\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_absorb_final(&shake128_state.data[i0],\n      Eurydice_array_to_slice_shared_e9(&input->data[i0])););\n  return shake128_state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_1b\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_78(\n  const Eurydice_arr_81 *input\n)\n{\n  return shake128_init_absorb_final_78(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 3\n*/\nstatic inline Eurydice_arr_7e shake128_squeeze_first_three_blocks_78(Eurydice_arr_1b *st)\n{\n  Eurydice_arr_7e\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(&st->data[i0],\n      Eurydice_array_to_slice_mut_48(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_7e\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_78(\n  Eurydice_arr_1b *self\n)\n{\n  return shake128_squeeze_first_three_blocks_78(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_b6(\n  const Eurydice_arr_7e *randomness,\n  Eurydice_arr_eb0 *sampled_coefficients,\n  Eurydice_arr_b1 *out\n)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_shared_d42(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block\nwith const generics\n- K= 3\n*/\nstatic inline Eurydice_arr_2c shake128_squeeze_next_block_78(Eurydice_arr_1b *st)\n{\n  Eurydice_arr_2c\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&st->data[i0],\n      Eurydice_array_to_slice_mut_2c(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_2c\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_78(Eurydice_arr_1b *self)\n{\n  return shake128_squeeze_next_block_78(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_b60(\n  const Eurydice_arr_2c *randomness,\n  Eurydice_arr_eb0 *sampled_coefficients,\n  Eurydice_arr_b1 *out\n)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_shared_d43(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e7(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_9e call_mut_0a_91(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_ea(Eurydice_array_to_subslice_shared_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_bb sample_from_xof_91(const Eurydice_arr_81 *seeds)\n{\n  Eurydice_arr_eb0 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_b1\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_1b\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_78(seeds);\n  Eurydice_arr_7e\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_78(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_b6(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_2c\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_78(&xof_state);\n      done = sample_from_uniform_distribution_next_b60(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_bb arr_mapped_str;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_91(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_91(Eurydice_arr_1d *A_transpose, const Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_81 seeds;\n    Eurydice_arr_31 repeat_expression[3U];\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_bb sampled = sample_from_xof_91(&seeds);\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_4a\nwith const generics\n- K= 3\n*/\nstatic inline Eurydice_arr_ec H_4a_78(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_22(\n  const Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key\n)\n{\n  Eurydice_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_shared_211(public_key, (size_t)1152U);\n  deserialize_ring_elements_reduced_68(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_shared_5f3(public_key,\n        (size_t)1152U));\n  Eurydice_arr_1d *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_shared_5f3(public_key,\n        (size_t)1152U));\n  sample_matrix_A_91(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_4a_78(Eurydice_array_to_slice_shared_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nconst\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\n*libcrux_ml_kem_ind_cca_unpacked_public_key_11_68(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  return &self->public_key;\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.clone_91\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic inline libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51\nclone_91_68(const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *self)\n{\n  Eurydice_arr_bb\n  uu____0 =\n    core_array__core__clone__Clone_for__T__N___clone((size_t)3U,\n      &self->t_as_ntt,\n      Eurydice_arr_9e,\n      Eurydice_arr_bb);\n  Eurydice_arr_ec\n  uu____1 =\n    core_array__core__clone__Clone_for__T__N___clone((size_t)32U,\n      &self->seed_for_A,\n      uint8_t,\n      Eurydice_arr_ec);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51){\n        .t_as_ntt = uu____0,\n        .seed_for_A = uu____1,\n        .A = core_array__core__clone__Clone_for__T__N___clone((size_t)3U,\n          &self->A,\n          Eurydice_arr_bb,\n          Eurydice_arr_1d)\n      }\n    );\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.clone_d7\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_ind_cca_unpacked_clone_d7_68(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51\n  uu____0 = clone_91_68(&self->ind_cpa_public_key);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51){\n        .ind_cpa_public_key = uu____0,\n        .public_key_hash = core_array__core__clone__Clone_for__T__N___clone((size_t)32U,\n          &self->public_key_hash,\n          uint8_t,\n          Eurydice_arr_ec)\n      }\n    );\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_68(const Eurydice_arr_bb *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_ea(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_b6(\n  const Eurydice_arr_bb *t_as_ntt,\n  Eurydice_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_5f *serialized\n)\n{\n  serialize_vector_68(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d415(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f4(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self,\n  Eurydice_arr_5f *serialized\n)\n{\n  serialize_public_key_mut_b6(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_b6(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5f\nserialize_public_key_b6(const Eurydice_arr_bb *t_as_ntt, Eurydice_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_5f public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_b6(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5f\nserialized_dd_b6(const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_3d(serialize_public_key_b6(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_shared_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_b6(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  return serialized_dd_b6(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PRIVATE_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair768\nserialize_unpacked_secret_key_30(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *public_key,\n  const Eurydice_arr_bb *private_key\n)\n{\n  Eurydice_arr_5f\n  public_key_serialized =\n    serialize_public_key_b6(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&public_key->seed_for_A));\n  Eurydice_arr_0e secret_key_serialized = { .data = { 0U } };\n  serialize_vector_68(private_key, Eurydice_array_to_slice_mut_f4(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair768){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SERIALIZED_KEY_LEN= 2400\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_7d *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d416(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d416(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d416(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_4a_78(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d416(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_7d *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair768\n  uu____0 =\n    serialize_unpacked_secret_key_30(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_0e ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_5f ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(Eurydice_array_to_slice_shared_f4(&ind_cpa_private_key),\n    Eurydice_array_to_slice_shared_ff(&ind_cpa_public_key),\n    Eurydice_array_to_slice_shared_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_21(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_7d sk = libcrux_ml_kem_types_default_d3_79();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(self, &sk);\n  return sk;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_68(Eurydice_borrow_slice_u8 secret_key, Eurydice_arr_bb *secret_as_ntt)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_ea(Eurydice_slice_subslice_shared_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_05(\n  Eurydice_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_68(Eurydice_slice_subslice_to_shared_72(public_key,\n      (size_t)1152U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_shared_6d(public_key, (size_t)1152U);\n  Eurydice_arr_1d *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_91(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_01(\n  const Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_64(Eurydice_array_to_slice_shared_51(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_68(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_05(ind_cpa_public_key, &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_shared_6d(ind_cpa_public_key, (size_t)1152U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_bb default_70_68(void)\n{\n  Eurydice_arr_bb lit;\n  Eurydice_arr_9e repeat_expression[3U];\n  KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n  memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_9e));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 default_8b_68(void)\n{\n  Eurydice_arr_bb uu____0;\n  Eurydice_arr_9e repeat_expression0[3U];\n  KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression0[i] = ZERO_d6_ea(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)3U * sizeof (Eurydice_arr_9e));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_bb repeat_expression1[3U];\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    Eurydice_arr_bb lit;\n    Eurydice_arr_9e repeat_expression[3U];\n    KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n    memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_9e));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)3U * sizeof (Eurydice_arr_bb));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_ind_cca_unpacked_default_30_68(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51){\n        .ind_cpa_public_key = default_8b_68(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_68(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51\n  uu____0 =\n    { .ind_cpa_private_key = default_70_68(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_68()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_4a\nwith const generics\n- K= 3\n*/\nstatic inline Eurydice_arr_c7 G_4a_78(Eurydice_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_13(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d48(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)3U;\n  return G_4a_78(Eurydice_array_to_slice_shared_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic inline Eurydice_arr_58 PRFxN_3b(const Eurydice_arr_801 *input)\n{\n  Eurydice_arr_58\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&out.data[i0]),\n      Eurydice_array_to_slice_shared_b5(&input->data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic inline Eurydice_arr_58 PRFxN_4a_3b(const Eurydice_arr_801 *input)\n{\n  return PRFxN_3b(input);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- ETA= 2\n- ETA_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_bf(\n  Eurydice_arr_bb *re_as_ntt,\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_801 prf_inputs;\n  Eurydice_arr_fa repeat_expression[3U];\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_78(&prf_inputs, domain_separator);\n  Eurydice_arr_58 prf_outputs = PRFxN_4a_3b(&prf_inputs);\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_ea(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_73_39(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_68(Eurydice_arr_9e *myself, const Eurydice_arr_9e *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d6\n    uu____0 = libcrux_ml_kem_vector_portable_add_b8(myself->data[i0], &rhs->data[i0]);\n    myself->data[i0] = uu____0;);\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_68(Eurydice_arr_9e *self, const Eurydice_arr_9e *rhs)\n{\n  add_to_ring_element_68(self, rhs);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_68(\n  Eurydice_arr_bb *t_as_ntt,\n  const Eurydice_arr_1d *matrix_A,\n  const Eurydice_arr_bb *s_as_ntt,\n  const Eurydice_arr_bb *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    const Eurydice_arr_bb *row = &matrix_A->data[i0];\n    Eurydice_arr_9e uu____0 = ZERO_d6_ea();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR3(i1,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i1;\n      const Eurydice_arr_9e *matrix_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_68(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_ea(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_39(\n  Eurydice_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_bb *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_13(key_generation_seed);\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_1d *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_91(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_bf(private_key, &prf_input, 0U);\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_39(&lvalue););\n  Eurydice_arr_bb error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_bf(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_68(&public_key->t_as_ntt, &public_key->A, &private_key[0U], &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_9e call_mut_b4_68(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_bb call_mut_22_68(void **_)\n{\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_68(&lvalue););\n  return arr_struct;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_1d transpose_a_68(Eurydice_arr_1d ind_cpa_a)\n{\n  Eurydice_arr_1d arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_68(&lvalue););\n  Eurydice_arr_1d A = arr_struct;\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e uu____0 = clone_c1_ea(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b8(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *out\n)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_39(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_1d A = transpose_a_68(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_5f\n  pk_serialized =\n    serialize_public_key_b6(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_shared_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_4a_78(Eurydice_array_to_slice_shared_ff(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_13(Eurydice_borrow_slice_u8 randomness, Eurydice_borrow_slice_u8 pk_hash)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_4a_78(Eurydice_array_to_slice_shared_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_bb, libcrux_ml_kem_polynomial_PolynomialRingElement_1d\n\n*/\ntypedef struct tuple_5b_s\n{\n  Eurydice_arr_bb fst;\n  Eurydice_arr_9e snd;\n}\ntuple_5b;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_f1_87(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_dd_87(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_bf(\n  const Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_bb *error_1\n)\n{\n  Eurydice_arr_801 prf_inputs;\n  Eurydice_arr_fa repeat_expression[3U];\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_78(&prf_inputs, domain_separator);\n  Eurydice_arr_58 prf_outputs = PRFxN_4a_3b(&prf_inputs);\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic inline Eurydice_arr_89 PRF_4a_3b0(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_9e call_mut_a8_68(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_68(Eurydice_arr_9e *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_ea(&zeta_i, re);\n  invert_ntt_at_layer_2_ea(&zeta_i, re);\n  invert_ntt_at_layer_3_ea(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_bb\ncompute_vector_u_68(\n  const Eurydice_arr_1d *a_as_ntt,\n  const Eurydice_arr_bb *r_as_ntt,\n  const Eurydice_arr_bb *error_1\n)\n{\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_68(&lvalue););\n  Eurydice_arr_bb result = arr_struct;\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    const Eurydice_arr_bb *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      const Eurydice_arr_9e *a_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_68(&result.data[i1], &product););\n    invert_ntt_montgomery_68(&result.data[i1]);\n    add_error_reduce_d6_ea(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- OUT_LEN= 960\n- COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_21(Eurydice_arr_bb input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)960U / (size_t)3U),\n            .end = (i0 + (size_t)1U) * ((size_t)960U / (size_t)3U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b0 lvalue = compress_then_serialize_ring_element_u_f7(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_56(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_5b\nencrypt_c1_87(\n  Eurydice_borrow_slice_u8 randomness,\n  const Eurydice_arr_1d *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_bb arr_struct0;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_87(&lvalue););\n  Eurydice_arr_bb r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_bf(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_87(&lvalue););\n  Eurydice_arr_bb error_1 = arr_struct;\n  uint8_t domain_separator = sample_ring_element_cbd_bf(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_4a_3b0(Eurydice_array_to_slice_shared_b5(&prf_input));\n  Eurydice_arr_9e\n  error_2 = sample_from_binomial_distribution_66(Eurydice_array_to_slice_shared_78(&prf_output));\n  Eurydice_arr_bb u = compute_vector_u_68(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_21(u, ciphertext);\n  return (KRML_CLITERAL(tuple_5b){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_ring_element_v_68(\n  const Eurydice_arr_bb *t_as_ntt,\n  const Eurydice_arr_bb *r_as_ntt,\n  const Eurydice_arr_9e *error_2,\n  const Eurydice_arr_9e *message\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_68(&result, &product););\n  invert_ntt_montgomery_68(&result);\n  return add_message_error_reduce_d6_ea(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- COMPRESSION_FACTOR= 4\n- OUT_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_30(Eurydice_arr_9e re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_4_ea(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- V_COMPRESSION_FACTOR= 4\n- C2_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_30(\n  const Eurydice_arr_bb *t_as_ntt,\n  const Eurydice_arr_bb *r_as_ntt,\n  const Eurydice_arr_9e *error_2,\n  const Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_9e message_as_ring_element = deserialize_then_decompress_message_ea(message);\n  Eurydice_arr_9e\n  v = compute_ring_element_v_68(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_30(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_LEN= 960\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2b\nencrypt_unpacked_d5(\n  const libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_2b ciphertext = { .data = { 0U } };\n  tuple_5b\n  uu____0 =\n    encrypt_c1_87(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d414(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)960U })));\n  Eurydice_arr_bb r_as_ntt = uu____0.fst;\n  Eurydice_arr_9e error_2 = uu____0.snd;\n  encrypt_c2_30(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f3(&ciphertext, (size_t)960U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a7(\n  const libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_13(Eurydice_array_to_slice_shared_01(randomness),\n      Eurydice_array_to_slice_shared_01(&public_key->public_key_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_2b\n  ciphertext = encrypt_unpacked_d5(&public_key->ind_cpa_public_key, randomness, pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_f4){\n        .fst = libcrux_ml_kem_types_from_19_52(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic Eurydice_arr_9e call_mut_35_30(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_bb\ndeserialize_then_decompress_u_30(const Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_30(&lvalue););\n  Eurydice_arr_bb u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)1088U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_shared_d46(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_f7(u_bytes);\n    ntt_vector_u_f7(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_ring_element_v_b6(Eurydice_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_4_ea(serialized);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_message_68(\n  const Eurydice_arr_9e *v,\n  const Eurydice_arr_bb *secret_as_ntt,\n  const Eurydice_arr_bb *u_as_ntt\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_68(&result, &product););\n  invert_ntt_montgomery_68(&result);\n  return subtract_reduce_d6_ea(v, result);\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_01(const Eurydice_arr_bb *secret_key, const Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_bb u_as_ntt = deserialize_then_decompress_u_30(ciphertext);\n  Eurydice_arr_9e\n  v =\n    deserialize_then_decompress_ring_element_v_b6(Eurydice_array_to_subslice_from_shared_5f2(ciphertext,\n        (size_t)960U));\n  Eurydice_arr_9e message = compute_message_68(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_ea(message);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 3\n- LEN= 32\n*/\nstatic inline Eurydice_arr_ec PRF_4a_3b(Eurydice_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c(\n  const libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_01(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_shared_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_78(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_af\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_66(Eurydice_array_to_slice_shared_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f2(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_52(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_3b(Eurydice_array_to_slice_shared_81(&to_hash));\n  Eurydice_arr_2b\n  expected_ciphertext =\n    encrypt_unpacked_d5(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_52(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_shared_06(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_9e call_mut_0b_68(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_bb\ndeserialize_ring_elements_reduced_out_68(Eurydice_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_68(&lvalue););\n  Eurydice_arr_bb deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_68(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_b6(const Eurydice_arr_5f *public_key)\n{\n  Eurydice_arr_bb\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_68(Eurydice_array_to_subslice_to_shared_211(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)));\n  Eurydice_arr_5f\n  public_key_serialized =\n    serialize_public_key_b6(&deserialized_pk,\n      Eurydice_array_to_subslice_from_shared_5f3(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)));\n  return Eurydice_array_eq((size_t)1184U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_52(const Eurydice_arr_7d *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_4a_78(Eurydice_array_to_subslice_shared_d47(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)3U,\n            .end = (size_t)768U * (size_t)3U + (size_t)32U\n          }\n        )));\n  Eurydice_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_shared_d47(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)3U + (size_t)32U,\n          .end = (size_t)768U * (size_t)3U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_shared((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_ba(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_52(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- PRIVATE_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair768\ngenerate_keypair_30(Eurydice_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_bb private_key = default_70_68();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 public_key = default_8b_68();\n  generate_keypair_unpacked_39(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_30(&public_key, &private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SERIALIZED_KEY_LEN= 2400\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7d\nserialize_kem_secret_key_52(\n  Eurydice_borrow_slice_u8 private_key,\n  Eurydice_borrow_slice_u8 public_key,\n  Eurydice_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_7d out = { .data = { 0U } };\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(private_key,\n    public_key,\n    implicit_rejection_value,\n    &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_b8(const Eurydice_arr_c7 *randomness)\n{\n  Eurydice_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_shared_d44(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_shared_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair768\n  uu____0 = generate_keypair_30(ind_cpa_keypair_randomness);\n  Eurydice_arr_0e ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_5f public_key = uu____0.snd;\n  Eurydice_arr_7d\n  secret_key_serialized =\n    serialize_kem_secret_key_52(Eurydice_array_to_slice_shared_f4(&ind_cpa_private_key),\n      Eurydice_array_to_slice_shared_ff(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_7d private_key = libcrux_ml_kem_types_from_b2_79(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_bc(private_key,\n      libcrux_ml_kem_types_from_51_3d(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_13(Eurydice_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51\nbuild_unpacked_public_key_05(Eurydice_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51\n  unpacked_public_key = default_8b_68();\n  build_unpacked_public_key_mut_05(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_LEN= 960\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2b\nencrypt_d5(\n  Eurydice_borrow_slice_u8 public_key,\n  const Eurydice_arr_ec *message,\n  Eurydice_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51\n  unpacked_public_key = build_unpacked_public_key_05(public_key);\n  return encrypt_unpacked_d5(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_52(Eurydice_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_encapsulate_99(\n  const Eurydice_arr_5f *public_key,\n  const Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_13(Eurydice_array_to_slice_shared_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_4a_78(Eurydice_array_to_slice_shared_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_shared_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_78(Eurydice_array_to_slice_shared_17(&to_hash));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_2b\n  ciphertext =\n    encrypt_d5(Eurydice_array_to_slice_shared_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_2b uu____2 = libcrux_ml_kem_types_from_19_52(ciphertext);\n  return (KRML_CLITERAL(tuple_f4){ .fst = uu____2, .snd = kdf_39_52(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic Eurydice_arr_9e call_mut_0b_01(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_01(Eurydice_borrow_slice_u8 secret_key, const Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_01(&lvalue););\n  Eurydice_arr_bb secret_key_unpacked = arr_struct;\n  deserialize_vector_68(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_01(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd(\n  const Eurydice_arr_7d *private_key,\n  const Eurydice_arr_2b *ciphertext\n)\n{\n  Eurydice_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_64(Eurydice_array_to_slice_shared_51(private_key));\n  Eurydice_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_01(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_shared_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_78(Eurydice_array_to_slice_shared_17(&to_hash0));\n  Eurydice_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_shared_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_borrow_slice_u8_x2);\n  Eurydice_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_af to_hash = libcrux_ml_kem_utils_into_padded_array_66(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f2(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_52(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_3b(Eurydice_array_to_slice_shared_81(&to_hash));\n  Eurydice_arr_2b\n  expected_ciphertext = encrypt_d5(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_52(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_52(shared_secret0);\n  Eurydice_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_52(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_shared_06(&expected_ciphertext),\n      Eurydice_array_to_slice_shared_01(&shared_secret),\n      Eurydice_array_to_slice_shared_01(&implicit_rejection_shared_secret0));\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_mlkem_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem_portable_H\n#define libcrux_mlkem_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\nEurydice_arr_c7 libcrux_ml_kem_hash_functions_portable_G(Eurydice_borrow_slice_u8 input);\n\nEurydice_arr_ec libcrux_ml_kem_hash_functions_portable_H(Eurydice_borrow_slice_u8 input);\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR ((size_t)16U)\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS (1353)\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS (3329)\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R (62209U)\n\ntypedef Eurydice_arr_d6 libcrux_ml_kem_vector_portable_vector_type_PortableVector;\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_from_i16_array(Eurydice_borrow_slice_i16 array);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_borrow_slice_i16 array);\n\ntypedef struct uint8_t_x11_s\n{\n  uint8_t fst;\n  uint8_t snd;\n  uint8_t thd;\n  uint8_t f3;\n  uint8_t f4;\n  uint8_t f5;\n  uint8_t f6;\n  uint8_t f7;\n  uint8_t f8;\n  uint8_t f9;\n  uint8_t f10;\n}\nuint8_t_x11;\n\nuint8_t_x11\nlibcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_borrow_slice_i16 v);\n\nEurydice_arr_80 libcrux_ml_kem_vector_portable_serialize_serialize_11(Eurydice_arr_d6 v);\n\nEurydice_arr_80 libcrux_ml_kem_vector_portable_serialize_11(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_80 libcrux_ml_kem_vector_portable_serialize_11_b8(Eurydice_arr_d6 a);\n\ntypedef struct int16_t_x8_s\n{\n  int16_t fst;\n  int16_t snd;\n  int16_t thd;\n  int16_t f3;\n  int16_t f4;\n  int16_t f5;\n  int16_t f6;\n  int16_t f7;\n}\nint16_t_x8;\n\nint16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_11_int(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_11(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_11(Eurydice_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_11_b8(Eurydice_borrow_slice_u8 a);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_vector_type_to_i16_array(Eurydice_arr_d6 x);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_to_i16_array_b8(Eurydice_arr_d6 x);\n\n#define LIBCRUX_ML_KEM_VECTOR_REJ_SAMPLE_TABLE_REJECTION_SAMPLE_SHUFFLE_TABLE ((KRML_CLITERAL(Eurydice_arr_87){ .data = { { .data = { 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U } }, { .data = { 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U } }, { .data = { 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U } }, { .data = { 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U } } } }))\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_vector_type_zero(void);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_ZERO_b8(void);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_from_bytes(Eurydice_borrow_slice_u8 array);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_from_bytes_b8(Eurydice_borrow_slice_u8 array);\n\nvoid\nlibcrux_ml_kem_vector_portable_vector_type_to_bytes(\n  Eurydice_arr_d6 x,\n  Eurydice_mut_borrow_slice_u8 bytes\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nvoid\nlibcrux_ml_kem_vector_portable_to_bytes_b8(\n  Eurydice_arr_d6 x,\n  Eurydice_mut_borrow_slice_u8 bytes\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_add(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_add_b8(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_sub(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_sub_b8(Eurydice_arr_d6 lhs, const Eurydice_arr_d6 *rhs);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(Eurydice_arr_d6 vec, int16_t c);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_multiply_by_constant_b8(Eurydice_arr_d6 vec, int16_t c);\n\n/**\n Note: This function is not secret independent\n Only use with public values.\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(Eurydice_arr_d6 vec);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_cond_subtract_3329_b8(Eurydice_arr_d6 v);\n\n#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_MULTIPLIER (20159)\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT (26)\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_R ((int32_t)((uint32_t)1 << (uint32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT))\n\n/**\n Signed Barrett Reduction\n\n Given an input `value`, `barrett_reduce` outputs a representative `result`\n such that:\n\n - result ≡ value (mod FIELD_MODULUS)\n - the absolute value of `result` is bound as follows:\n\n `|result| ≤ FIELD_MODULUS / 2 · (|value|/BARRETT_R + 1)\n\n Note: The input bound is 28296 to prevent overflow in the multiplication of quotient by FIELD_MODULUS\n\n*/\nint16_t libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(int16_t value);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(Eurydice_arr_d6 vec);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_barrett_reduce_b8(Eurydice_arr_d6 vector);\n\n#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT (16U)\n\n/**\n Signed Montgomery Reduction\n\n Given an input `value`, `montgomery_reduce` outputs a representative `o`\n such that:\n\n - o ≡ value · MONTGOMERY_R^(-1) (mod FIELD_MODULUS)\n - the absolute value of `o` is bound as follows:\n\n `|result| ≤ ceil(|value| / MONTGOMERY_R) + 1665\n\n In particular, if `|value| ≤ FIELD_MODULUS-1 * FIELD_MODULUS-1`, then `|o| <= FIELD_MODULUS-1`.\n And, if `|value| ≤ pow2 16 * FIELD_MODULUS-1`, then `|o| <= FIELD_MODULUS + 1664\n\n*/\nint16_t libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(int32_t value);\n\n/**\n If `fe` is some field element 'x' of the Kyber field and `fer` is congruent to\n `y · MONTGOMERY_R`, this procedure outputs a value that is congruent to\n `x · y`, as follows:\n\n    `fe · fer ≡ x · y · MONTGOMERY_R (mod FIELD_MODULUS)`\n\n `montgomery_reduce` takes the value `x · y · MONTGOMERY_R` and outputs a representative\n `x · y · MONTGOMERY_R * MONTGOMERY_R^{-1} ≡ x · y (mod FIELD_MODULUS)`.\n*/\nint16_t\nlibcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(\n  int16_t fe,\n  int16_t fer\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant(\n  Eurydice_arr_d6 vec,\n  int16_t c\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(\n  Eurydice_arr_d6 vector,\n  int16_t constant\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(\n  Eurydice_arr_d6 vec,\n  int16_t c\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_to_unsigned_representative_b8(Eurydice_arr_d6 a);\n\n/**\n The `compress_*` functions implement the `Compress` function specified in the NIST FIPS\n 203 standard (Page 18, Expression 4.5), which is defined as:\n\n ```plaintext\n Compress_d: ℤq -> ℤ_{2ᵈ}\n Compress_d(x) = ⌈(2ᵈ/q)·x⌋\n ```\n\n Since `⌈x⌋ = ⌊x + 1/2⌋` we have:\n\n ```plaintext\n Compress_d(x) = ⌊(2ᵈ/q)·x + 1/2⌋\n               = ⌊(2^{d+1}·x + q) / 2q⌋\n ```\n\n For further information about the function implementations, consult the\n `implementation_notes.pdf` document in this directory.\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\nuint8_t libcrux_ml_kem_vector_portable_compress_compress_message_coefficient(uint16_t fe);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_compress_1(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_1_b8(Eurydice_arr_d6 a);\n\nuint32_t\nlibcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits(\n  uint8_t n,\n  uint32_t value\n);\n\nint16_t\nlibcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient(\n  uint8_t coefficient_bits,\n  uint16_t fe\n);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_decompress_1(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_decompress_1_b8(Eurydice_arr_d6 a);\n\nvoid\nlibcrux_ml_kem_vector_portable_ntt_ntt_step(\n  Eurydice_arr_d6 *vec,\n  int16_t zeta,\n  size_t i,\n  size_t j\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_1_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_2_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(Eurydice_arr_d6 vec, int16_t zeta);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_3_step_b8(Eurydice_arr_d6 a, int16_t zeta);\n\nvoid\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_step(\n  Eurydice_arr_d6 *vec,\n  int16_t zeta,\n  size_t i,\n  size_t j\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(Eurydice_arr_d6 vec, int16_t zeta);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8(Eurydice_arr_d6 a, int16_t zeta);\n\n/**\n Compute the product of two Kyber binomials with respect to the\n modulus `X² - zeta`.\n\n This function almost implements <strong>Algorithm 11</strong> of the\n NIST FIPS 203 standard, which is reproduced below:\n\n ```plaintext\n Input:  a₀, a₁, b₀, b₁ ∈ ℤq.\n Input: γ ∈ ℤq.\n Output: c₀, c₁ ∈ ℤq.\n\n c₀ ← a₀·b₀ + a₁·b₁·γ\n c₁ ← a₀·b₁ + a₁·b₀\n return c₀, c₁\n ```\n We say \"almost\" because the coefficients output by this function are in\n the Montgomery domain (unlike in the specification).\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\nvoid\nlibcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(\n  const Eurydice_arr_d6 *a,\n  const Eurydice_arr_d6 *b,\n  int16_t zeta,\n  size_t i,\n  Eurydice_arr_d6 *out\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_multiply(\n  const Eurydice_arr_d6 *lhs,\n  const Eurydice_arr_d6 *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_multiply_b8(\n  const Eurydice_arr_d6 *lhs,\n  const Eurydice_arr_d6 *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\nEurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_serialize_1(Eurydice_arr_d6 v);\n\nEurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_1(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_1_b8(Eurydice_arr_d6 a);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_1(Eurydice_borrow_slice_u8 v);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_1(Eurydice_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_1_b8(Eurydice_borrow_slice_u8 a);\n\ntypedef struct uint8_t_x4_s\n{\n  uint8_t fst;\n  uint8_t snd;\n  uint8_t thd;\n  uint8_t f3;\n}\nuint8_t_x4;\n\nuint8_t_x4\nlibcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_borrow_slice_i16 v);\n\nEurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_serialize_4(Eurydice_arr_d6 v);\n\nEurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_4(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_4_b8(Eurydice_arr_d6 a);\n\nint16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_4(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_4(Eurydice_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_4_b8(Eurydice_borrow_slice_u8 a);\n\ntypedef struct uint8_t_x5_s\n{\n  uint8_t fst;\n  uint8_t snd;\n  uint8_t thd;\n  uint8_t f3;\n  uint8_t f4;\n}\nuint8_t_x5;\n\nuint8_t_x5\nlibcrux_ml_kem_vector_portable_serialize_serialize_5_int(Eurydice_borrow_slice_i16 v);\n\nEurydice_arr_6d libcrux_ml_kem_vector_portable_serialize_serialize_5(Eurydice_arr_d6 v);\n\nEurydice_arr_6d libcrux_ml_kem_vector_portable_serialize_5(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_6d libcrux_ml_kem_vector_portable_serialize_5_b8(Eurydice_arr_d6 a);\n\nint16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_5_int(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_5(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_5(Eurydice_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_5_b8(Eurydice_borrow_slice_u8 a);\n\nuint8_t_x5\nlibcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_borrow_slice_i16 v);\n\nEurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_serialize_10(Eurydice_arr_d6 v);\n\nEurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_10(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_10_b8(Eurydice_arr_d6 a);\n\nint16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_10(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_10(Eurydice_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_10_b8(Eurydice_borrow_slice_u8 a);\n\ntypedef struct uint8_t_x3_s\n{\n  uint8_t fst;\n  uint8_t snd;\n  uint8_t thd;\n}\nuint8_t_x3;\n\nuint8_t_x3\nlibcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_borrow_slice_i16 v);\n\nEurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_serialize_12(Eurydice_arr_d6 v);\n\nEurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_12(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_12_b8(Eurydice_arr_d6 a);\n\ntypedef struct int16_t_x2_s\n{\n  int16_t fst;\n  int16_t snd;\n}\nint16_t_x2;\n\nint16_t_x2\nlibcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_12(Eurydice_borrow_slice_u8 bytes);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_12(Eurydice_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_12_b8(Eurydice_borrow_slice_u8 a);\n\nsize_t\nlibcrux_ml_kem_vector_portable_sampling_rej_sample(\n  Eurydice_borrow_slice_u8 a,\n  Eurydice_mut_borrow_slice_i16 result\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nsize_t\nlibcrux_ml_kem_vector_portable_rej_sample_b8(\n  Eurydice_borrow_slice_u8 a,\n  Eurydice_mut_borrow_slice_i16 out\n);\n\ntypedef int16_t libcrux_ml_kem_vector_portable_arithmetic_FieldElementTimesMontgomeryR;\n\ntypedef int16_t libcrux_ml_kem_vector_portable_arithmetic_MontgomeryFieldElement;\n\ntypedef int16_t libcrux_ml_kem_vector_portable_vector_type_FieldElement;\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_clone_9c(const Eurydice_arr_d6 *self);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem_portable_H_DEFINED\n#endif /* libcrux_mlkem_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_sha3_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"libcrux_sha3_avx2.h\"\n\n#include \"libcrux_sha3_portable.h\"\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_core.h\"\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i zero_b0(void)\n{\n  return mm256_set1_epi64x(0LL);\n}\n\nstatic KRML_MUSTINLINE __m256i\n_veor5q_u64(__m256i a, __m256i b, __m256i c, __m256i d, __m256i e)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  __m256i cd = mm256_xor_si256(c, d);\n  __m256i abcd = mm256_xor_si256(ab, cd);\n  return mm256_xor_si256(abcd, e);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i xor5_b0(__m256i a, __m256i b, __m256i c, __m256i d, __m256i e)\n{\n  return _veor5q_u64(a, b, c, d, e);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_76(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(1, x, __m256i), mm256_srli_epi64(63, x, __m256i));\n}\n\nstatic KRML_MUSTINLINE __m256i _vrax1q_u64(__m256i a, __m256i b)\n{\n  return mm256_xor_si256(a, rotate_left_76(b));\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left1_and_xor_b0(__m256i a, __m256i b)\n{\n  return _vrax1q_u64(a, b);\n}\n\nstatic KRML_MUSTINLINE __m256i _vbcaxq_u64(__m256i a, __m256i b, __m256i c)\n{\n  return mm256_xor_si256(a, mm256_andnot_si256(c, b));\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i and_not_xor_b0(__m256i a, __m256i b, __m256i c)\n{\n  return _vbcaxq_u64(a, b, c);\n}\n\nstatic KRML_MUSTINLINE __m256i _veorq_n_u64(__m256i a, uint64_t c)\n{\n  __m256i c0 = mm256_set1_epi64x((int64_t)c);\n  return mm256_xor_si256(a, c0);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i xor_constant_b0(__m256i a, uint64_t c)\n{\n  return _veorq_n_u64(a, c);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i xor_b0(__m256i a, __m256i b)\n{\n  return mm256_xor_si256(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.new_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40 new_80_5d(void)\n{\n  Eurydice_arr_c40 lit;\n  __m256i repeat_expression[25U];\n  for (size_t i = (size_t)0U; i < (size_t)25U; i++)\n  {\n    repeat_expression[i] = zero_b0();\n  }\n  memcpy(lit.data, repeat_expression, (size_t)25U * sizeof (__m256i));\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.set_ij\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void set_ij_5d(Eurydice_arr_c40 *arr, size_t i, size_t j, __m256i value)\n{\n  arr->data[(size_t)5U * j + i] = value;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.get_ij\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE const\n__m256i\n*get_ij_5d(const Eurydice_arr_c40 *arr, size_t i, size_t j)\n{\n  return &arr->data[(size_t)5U * j + i];\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_block\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nload_block_b2(Eurydice_arr_c40 *state, const Eurydice_arr_68 *blocks, size_t offset)\n{\n  for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)32U; i++)\n  {\n    size_t i4 = i;\n    size_t start = offset + (size_t)32U * i4;\n    __m256i\n    v00 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_c8(blocks->data[0U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v10 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_c8(blocks->data[1U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v20 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_c8(blocks->data[2U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v30 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_c8(blocks->data[3U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i v0l = mm256_unpacklo_epi64(v00, v10);\n    __m256i v1h = mm256_unpackhi_epi64(v00, v10);\n    __m256i v2l = mm256_unpacklo_epi64(v20, v30);\n    __m256i v3h = mm256_unpackhi_epi64(v20, v30);\n    __m256i v0 = mm256_permute2x128_si256(32, v0l, v2l, __m256i);\n    __m256i v1 = mm256_permute2x128_si256(32, v1h, v3h, __m256i);\n    __m256i v2 = mm256_permute2x128_si256(49, v0l, v2l, __m256i);\n    __m256i v3 = mm256_permute2x128_si256(49, v1h, v3h, __m256i);\n    size_t i0 = (size_t)4U * i4 / (size_t)5U;\n    size_t j0 = (size_t)4U * i4 % (size_t)5U;\n    size_t i1 = ((size_t)4U * i4 + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i4 + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i4 + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i4 + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i4 + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i4 + (size_t)3U) % (size_t)5U;\n    set_ij_5d(state, i0, j0, mm256_xor_si256(get_ij_5d(state, i0, j0)[0U], v0));\n    set_ij_5d(state, i1, j1, mm256_xor_si256(get_ij_5d(state, i1, j1)[0U], v1));\n    set_ij_5d(state, i2, j2, mm256_xor_si256(get_ij_5d(state, i2, j2)[0U], v2));\n    set_ij_5d(state, i3, j3, mm256_xor_si256(get_ij_5d(state, i3, j3)[0U], v3));\n  }\n  size_t rem = (size_t)136U % (size_t)32U;\n  size_t start = offset + (size_t)32U * ((size_t)136U / (size_t)32U);\n  Eurydice_arr_ec u8s = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n    Eurydice_slice_subslice_shared_c8(blocks->data[0U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n    Eurydice_slice_subslice_shared_c8(blocks->data[1U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n    Eurydice_slice_subslice_shared_c8(blocks->data[2U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n    Eurydice_slice_subslice_shared_c8(blocks->data[3U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  __m256i\n  u =\n    mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n        &u8s,\n        uint8_t,\n        Eurydice_borrow_slice_u8));\n  size_t i0 = (size_t)4U * ((size_t)136U / (size_t)32U) / (size_t)5U;\n  size_t j0 = (size_t)4U * ((size_t)136U / (size_t)32U) % (size_t)5U;\n  set_ij_5d(state, i0, j0, mm256_xor_si256(get_ij_5d(state, i0, j0)[0U], u));\n  if (rem == (size_t)16U)\n  {\n    Eurydice_arr_ec u8s0 = { .data = { 0U } };\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n      Eurydice_slice_subslice_shared_c8(blocks->data[0U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n      Eurydice_slice_subslice_shared_c8(blocks->data[1U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n      Eurydice_slice_subslice_shared_c8(blocks->data[2U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n      Eurydice_slice_subslice_shared_c8(blocks->data[3U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    __m256i\n    u0 =\n      mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n          &u8s0,\n          uint8_t,\n          Eurydice_borrow_slice_u8));\n    size_t i = ((size_t)4U * ((size_t)136U / (size_t)32U) + (size_t)1U) / (size_t)5U;\n    size_t j = ((size_t)4U * ((size_t)136U / (size_t)32U) + (size_t)1U) % (size_t)5U;\n    set_ij_5d(state, i, j, mm256_xor_si256(get_ij_5d(state, i, j)[0U], u0));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nstatic KRML_MUSTINLINE void\nload_last_22(Eurydice_arr_c40 *state, const Eurydice_arr_68 *blocks, size_t start, size_t len)\n{\n  Eurydice_arr_dc0\n  buffers =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d40(&buffers.data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n      Eurydice_slice_subslice_shared_c8(blocks->data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n      uint8_t);\n    buffers.data[i0].data[len] = 31U;\n    size_t uu____0 = i0;\n    size_t uu____1 = (size_t)136U - (size_t)1U;\n    buffers.data[uu____0].data[uu____1] = (uint32_t)buffers.data[uu____0].data[uu____1] | 128U;);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_68\n  lvalue =\n    {\n      .data = {\n        Eurydice_array_to_slice_shared_58(buffers.data),\n        Eurydice_array_to_slice_shared_58(&buffers.data[1U]),\n        Eurydice_array_to_slice_shared_58(&buffers.data[2U]),\n        Eurydice_array_to_slice_shared_58(&buffers.data[3U])\n      }\n    };\n  load_block_b2(state, &lvalue, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<4usize> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last_8f\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nstatic void\nload_last_8f_22(Eurydice_arr_c40 *self, const Eurydice_arr_68 *input, size_t start, size_t len)\n{\n  load_last_22(self, input, start, len);\n}\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types core_core_arch_x86___m256i\nwith const generics\n- $5size_t\n*/\ntypedef struct arr_50_s { __m256i data[5U]; } arr_50;\n\n/**\nThis function found in impl {core::ops::index::Index<(usize, usize), T> for libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.index_c2\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic const __m256i *index_c2_5d(const Eurydice_arr_c40 *self, size_t_x2 index)\n{\n  return get_ij_5d(self, index.fst, index.snd);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.theta_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE arr_50 theta_80_5d(Eurydice_arr_c40 *self)\n{\n  arr_50\n  c =\n    {\n      .data = {\n        xor5_b0(index_c2_5d(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]),\n        xor5_b0(index_c2_5d(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]),\n        xor5_b0(index_c2_5d(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]),\n        xor5_b0(index_c2_5d(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]),\n        xor5_b0(index_c2_5d(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U])\n      }\n    };\n  return\n    (\n      KRML_CLITERAL(arr_50){\n        .data = {\n          rotate_left1_and_xor_b0(c.data[((size_t)0U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)0U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)1U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)1U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)2U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)2U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)3U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)3U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)4U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)4U + (size_t)1U) % (size_t)5U])\n        }\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.set_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic void set_80_5d(Eurydice_arr_c40 *self, size_t i, size_t j, __m256i v)\n{\n  set_ij_5d(self, i, j, v);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_02(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(36, x, __m256i), mm256_srli_epi64(28, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_02(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_02(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_02(__m256i a, __m256i b)\n{\n  return _vxarq_u64_02(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_ac(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(3, x, __m256i), mm256_srli_epi64(61, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_ac(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_ac(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_ac(__m256i a, __m256i b)\n{\n  return _vxarq_u64_ac(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_020(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(41, x, __m256i), mm256_srli_epi64(23, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_020(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_020(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_020(__m256i a, __m256i b)\n{\n  return _vxarq_u64_020(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_a9(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(18, x, __m256i), mm256_srli_epi64(46, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_a9(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_a9(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_a9(__m256i a, __m256i b)\n{\n  return _vxarq_u64_a9(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_0_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_0_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)0U,\n    xor_b0(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)0U,\n    xor_and_rotate_b0_02(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)0U,\n    xor_and_rotate_b0_ac(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)0U,\n    xor_and_rotate_b0_020(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)0U,\n    xor_and_rotate_b0_a9(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_76(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_76(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_76(__m256i a, __m256i b)\n{\n  return _vxarq_u64_76(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_58(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(44, x, __m256i), mm256_srli_epi64(20, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_58(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_58(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_58(__m256i a, __m256i b)\n{\n  return _vxarq_u64_58(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_e0(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(10, x, __m256i), mm256_srli_epi64(54, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_e0(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_e0(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_e0(__m256i a, __m256i b)\n{\n  return _vxarq_u64_e0(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_63(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(45, x, __m256i), mm256_srli_epi64(19, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_63(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_63(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_63(__m256i a, __m256i b)\n{\n  return _vxarq_u64_63(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_6a(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(2, x, __m256i), mm256_srli_epi64(62, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_6a(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_6a(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_6a(__m256i a, __m256i b)\n{\n  return _vxarq_u64_6a(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_1_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_1_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)1U,\n    xor_and_rotate_b0_76(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)1U,\n    xor_and_rotate_b0_58(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)1U,\n    xor_and_rotate_b0_e0(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)1U,\n    xor_and_rotate_b0_63(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)1U,\n    xor_and_rotate_b0_6a(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_ab(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(62, x, __m256i), mm256_srli_epi64(2, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_ab(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_ab(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_ab(__m256i a, __m256i b)\n{\n  return _vxarq_u64_ab(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_5b(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(6, x, __m256i), mm256_srli_epi64(58, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_5b(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_5b(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_5b(__m256i a, __m256i b)\n{\n  return _vxarq_u64_5b(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_6f(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(43, x, __m256i), mm256_srli_epi64(21, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_6f(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_6f(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_6f(__m256i a, __m256i b)\n{\n  return _vxarq_u64_6f(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_62(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(15, x, __m256i), mm256_srli_epi64(49, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_62(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_62(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_62(__m256i a, __m256i b)\n{\n  return _vxarq_u64_62(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_23(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(61, x, __m256i), mm256_srli_epi64(3, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_23(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_23(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_23(__m256i a, __m256i b)\n{\n  return _vxarq_u64_23(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_2_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_2_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)2U,\n    xor_and_rotate_b0_ab(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)2U,\n    xor_and_rotate_b0_5b(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)2U,\n    xor_and_rotate_b0_6f(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)2U,\n    xor_and_rotate_b0_62(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)2U,\n    xor_and_rotate_b0_23(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_37(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(28, x, __m256i), mm256_srli_epi64(36, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_37(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_37(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_37(__m256i a, __m256i b)\n{\n  return _vxarq_u64_37(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_bb(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(55, x, __m256i), mm256_srli_epi64(9, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_bb(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_bb(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_bb(__m256i a, __m256i b)\n{\n  return _vxarq_u64_bb(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_b9(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(25, x, __m256i), mm256_srli_epi64(39, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_b9(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_b9(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_b9(__m256i a, __m256i b)\n{\n  return _vxarq_u64_b9(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_54(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(21, x, __m256i), mm256_srli_epi64(43, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_54(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_54(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_54(__m256i a, __m256i b)\n{\n  return _vxarq_u64_54(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_4c(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(56, x, __m256i), mm256_srli_epi64(8, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_4c(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_4c(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_4c(__m256i a, __m256i b)\n{\n  return _vxarq_u64_4c(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_3_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_3_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)3U,\n    xor_and_rotate_b0_37(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)3U,\n    xor_and_rotate_b0_bb(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)3U,\n    xor_and_rotate_b0_b9(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)3U,\n    xor_and_rotate_b0_54(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)3U,\n    xor_and_rotate_b0_4c(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_ce(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(27, x, __m256i), mm256_srli_epi64(37, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_ce(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_ce(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_ce(__m256i a, __m256i b)\n{\n  return _vxarq_u64_ce(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_77(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(20, x, __m256i), mm256_srli_epi64(44, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_77(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_77(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_77(__m256i a, __m256i b)\n{\n  return _vxarq_u64_77(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_25(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(39, x, __m256i), mm256_srli_epi64(25, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_25(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_25(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_25(__m256i a, __m256i b)\n{\n  return _vxarq_u64_25(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_af(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(8, x, __m256i), mm256_srli_epi64(56, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_af(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_af(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_af(__m256i a, __m256i b)\n{\n  return _vxarq_u64_af(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_fd(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(14, x, __m256i), mm256_srli_epi64(50, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_fd(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_fd(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_fd(__m256i a, __m256i b)\n{\n  return _vxarq_u64_fd(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_4_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_4_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)4U,\n    xor_and_rotate_b0_ce(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)4U,\n    xor_and_rotate_b0_77(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)4U,\n    xor_and_rotate_b0_25(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)4U,\n    xor_and_rotate_b0_af(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)4U,\n    xor_and_rotate_b0_fd(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  rho_0_80_5d(self, t);\n  rho_1_80_5d(self, t);\n  rho_2_80_5d(self, t);\n  rho_3_80_5d(self, t);\n  rho_4_80_5d(self, t);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_0_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_0_80_5d(Eurydice_arr_c40 *self, Eurydice_arr_c40 old)\n{\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)0U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U]);\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)0U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U]);\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)0U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U]);\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)0U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_1_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_1_80_5d(Eurydice_arr_c40 *self, Eurydice_arr_c40 old)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)1U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U]);\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)1U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U]);\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)1U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U]);\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)1U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U]);\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)1U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_2_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_2_80_5d(Eurydice_arr_c40 *self, Eurydice_arr_c40 old)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)2U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U]);\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)2U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U]);\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)2U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U]);\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)2U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U]);\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)2U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_3_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_3_80_5d(Eurydice_arr_c40 *self, Eurydice_arr_c40 old)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)3U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U]);\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)3U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U]);\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)3U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U]);\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)3U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U]);\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)3U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_4_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_4_80_5d(Eurydice_arr_c40 *self, Eurydice_arr_c40 old)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)4U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U]);\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)4U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]);\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)4U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]);\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)4U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]);\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)4U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_80_5d(Eurydice_arr_c40 *self)\n{\n  Eurydice_arr_c40 old = self[0U];\n  pi_0_80_5d(self, old);\n  pi_1_80_5d(self, old);\n  pi_2_80_5d(self, old);\n  pi_3_80_5d(self, old);\n  pi_4_80_5d(self, old);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.chi_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void chi_80_5d(Eurydice_arr_c40 *self)\n{\n  Eurydice_arr_c40 old = self[0U];\n  KRML_MAYBE_FOR5(i0,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR5(i,\n      (size_t)0U,\n      (size_t)5U,\n      (size_t)1U,\n      size_t j = i;\n      set_80_5d(self,\n        i1,\n        j,\n        and_not_xor_b0(index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = j }))[0U],\n          index_c2_5d(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)2U) % (size_t)5U }))[0U],\n          index_c2_5d(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)1U) % (size_t)5U }))[0U]));););\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.iota_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void iota_80_5d(Eurydice_arr_c40 *self, size_t i)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)0U,\n    xor_constant_b0(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS.data[i]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void keccakf1600_80_5d(Eurydice_arr_c40 *self)\n{\n  for (size_t i = (size_t)0U; i < (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    arr_50 t = theta_80_5d(self);\n    rho_80_5d(self, t);\n    pi_80_5d(self);\n    chi_80_5d(self);\n    iota_80_5d(self, i0);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 136\n- DELIM= 31\n*/\nstatic KRML_MUSTINLINE void\nabsorb_final_80_af(\n  Eurydice_arr_c40 *self,\n  const Eurydice_arr_68 *input,\n  size_t start,\n  size_t len\n)\n{\n  load_last_8f_22(self, input, start, len);\n  keccakf1600_80_5d(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.store_block\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nstore_block_b2(\n  const Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  size_t chunks = len / (size_t)32U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = chunks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      size_t rem = len % (size_t)32U;\n      if (rem > (size_t)0U)\n      {\n        size_t start0 = start + (size_t)32U * chunks;\n        Eurydice_arr_ec u8s = { .data = { 0U } };\n        size_t chunks8 = rem / (size_t)8U;\n        for (size_t i0 = (size_t)0U; i0 < chunks8; i0++)\n        {\n          size_t k = i0;\n          size_t i = ((size_t)4U * chunks + k) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + k) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____1 = Eurydice_array_to_slice_mut_01(&u8s);\n          mm256_storeu_si256_u8(uu____1, get_ij_5d(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n            uint8_t);\n        }\n        size_t rem8 = rem % (size_t)8U;\n        if (rem8 > (size_t)0U)\n        {\n          size_t i = ((size_t)4U * chunks + chunks8) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + chunks8) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____2 = Eurydice_array_to_slice_mut_01(&u8s);\n          mm256_storeu_si256_u8(uu____2, get_ij_5d(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = rem8 })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)8U,\n                  .end = (size_t)8U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)16U,\n                  .end = (size_t)16U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)24U,\n                  .end = (size_t)24U + rem8\n                }\n              )),\n            uint8_t);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t i0 = (size_t)4U * i / (size_t)5U;\n    size_t j0 = (size_t)4U * i % (size_t)5U;\n    size_t i1 = ((size_t)4U * i + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i + (size_t)3U) % (size_t)5U;\n    __m256i\n    v0l = mm256_permute2x128_si256(32, get_ij_5d(s, i0, j0)[0U], get_ij_5d(s, i2, j2)[0U], __m256i);\n    __m256i\n    v1h = mm256_permute2x128_si256(32, get_ij_5d(s, i1, j1)[0U], get_ij_5d(s, i3, j3)[0U], __m256i);\n    __m256i\n    v2l = mm256_permute2x128_si256(49, get_ij_5d(s, i0, j0)[0U], get_ij_5d(s, i2, j2)[0U], __m256i);\n    __m256i\n    v3h = mm256_permute2x128_si256(49, get_ij_5d(s, i1, j1)[0U], get_ij_5d(s, i3, j3)[0U], __m256i);\n    __m256i v0 = mm256_unpacklo_epi64(v0l, v1h);\n    __m256i v1 = mm256_unpackhi_epi64(v0l, v1h);\n    __m256i v2 = mm256_unpacklo_epi64(v2l, v3h);\n    __m256i v3 = mm256_unpackhi_epi64(v2l, v3h);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out0,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v0);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out1,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v1);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out2,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v2);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out3,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v3);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze4<core::core_arch::x86::__m256i> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.squeeze4_17\nwith const generics\n- RATE= 136\n*/\nstatic void\nsqueeze4_17_b2(\n  const Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  store_block_b2(self, out0, out1, out2, out3, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<4usize> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_block_8f\nwith const generics\n- RATE= 136\n*/\nstatic void\nload_block_8f_b2(Eurydice_arr_c40 *self, const Eurydice_arr_68 *input, size_t start)\n{\n  load_block_b2(self, input, start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nabsorb_block_80_48(Eurydice_arr_c40 *self, const Eurydice_arr_68 *input, size_t start)\n{\n  load_block_8f_b2(self, input, start);\n  keccakf1600_80_5d(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.keccak4\nwith const generics\n- RATE= 136\n- DELIM= 31\n*/\nstatic KRML_MUSTINLINE void\nkeccak4_22(\n  const Eurydice_arr_68 *data,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  Eurydice_arr_c40 s = new_80_5d();\n  size_t data_len = data->data->meta;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = data_len / (size_t)136U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      size_t rem = data_len % (size_t)136U;\n      absorb_final_80_af(&s, data, data_len - rem, rem);\n      size_t outlen = out0.meta;\n      size_t blocks = outlen / (size_t)136U;\n      size_t last = outlen - outlen % (size_t)136U;\n      if (blocks == (size_t)0U)\n      {\n        squeeze4_17_b2(&s, out0, out1, out2, out3, (size_t)0U, outlen);\n      }\n      else\n      {\n        squeeze4_17_b2(&s, out0, out1, out2, out3, (size_t)0U, (size_t)136U);\n        for (size_t i = (size_t)1U; i < blocks; i++)\n        {\n          size_t i0 = i;\n          keccakf1600_80_5d(&s);\n          squeeze4_17_b2(&s, out0, out1, out2, out3, i0 * (size_t)136U, (size_t)136U);\n        }\n        if (last < outlen)\n        {\n          keccakf1600_80_5d(&s);\n          squeeze4_17_b2(&s, out0, out1, out2, out3, last, outlen - last);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    absorb_block_80_48(&s, data, i * (size_t)136U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n Perform 4 SHAKE256 operations in parallel\n*/\nvoid\nlibcrux_sha3_avx2_x4_shake256(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_68 lvalue = { .data = { input0, input1, input2, input3 } };\n  keccak4_22(&lvalue, out0, out1, out2, out3);\n}\n\n/**\n Initialise the [`KeccakState`].\n*/\nEurydice_arr_c40 libcrux_sha3_avx2_x4_incremental_init(void)\n{\n  return new_80_5d();\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_block\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nload_block_60(Eurydice_arr_c40 *state, const Eurydice_arr_68 *blocks, size_t offset)\n{\n  for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)32U; i++)\n  {\n    size_t i4 = i;\n    size_t start = offset + (size_t)32U * i4;\n    __m256i\n    v00 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_c8(blocks->data[0U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v10 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_c8(blocks->data[1U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v20 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_c8(blocks->data[2U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v30 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_shared_c8(blocks->data[3U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i v0l = mm256_unpacklo_epi64(v00, v10);\n    __m256i v1h = mm256_unpackhi_epi64(v00, v10);\n    __m256i v2l = mm256_unpacklo_epi64(v20, v30);\n    __m256i v3h = mm256_unpackhi_epi64(v20, v30);\n    __m256i v0 = mm256_permute2x128_si256(32, v0l, v2l, __m256i);\n    __m256i v1 = mm256_permute2x128_si256(32, v1h, v3h, __m256i);\n    __m256i v2 = mm256_permute2x128_si256(49, v0l, v2l, __m256i);\n    __m256i v3 = mm256_permute2x128_si256(49, v1h, v3h, __m256i);\n    size_t i0 = (size_t)4U * i4 / (size_t)5U;\n    size_t j0 = (size_t)4U * i4 % (size_t)5U;\n    size_t i1 = ((size_t)4U * i4 + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i4 + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i4 + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i4 + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i4 + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i4 + (size_t)3U) % (size_t)5U;\n    set_ij_5d(state, i0, j0, mm256_xor_si256(get_ij_5d(state, i0, j0)[0U], v0));\n    set_ij_5d(state, i1, j1, mm256_xor_si256(get_ij_5d(state, i1, j1)[0U], v1));\n    set_ij_5d(state, i2, j2, mm256_xor_si256(get_ij_5d(state, i2, j2)[0U], v2));\n    set_ij_5d(state, i3, j3, mm256_xor_si256(get_ij_5d(state, i3, j3)[0U], v3));\n  }\n  size_t rem = (size_t)168U % (size_t)32U;\n  size_t start = offset + (size_t)32U * ((size_t)168U / (size_t)32U);\n  Eurydice_arr_ec u8s = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n    Eurydice_slice_subslice_shared_c8(blocks->data[0U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n    Eurydice_slice_subslice_shared_c8(blocks->data[1U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n    Eurydice_slice_subslice_shared_c8(blocks->data[2U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n    Eurydice_slice_subslice_shared_c8(blocks->data[3U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  __m256i\n  u =\n    mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n        &u8s,\n        uint8_t,\n        Eurydice_borrow_slice_u8));\n  size_t i0 = (size_t)4U * ((size_t)168U / (size_t)32U) / (size_t)5U;\n  size_t j0 = (size_t)4U * ((size_t)168U / (size_t)32U) % (size_t)5U;\n  set_ij_5d(state, i0, j0, mm256_xor_si256(get_ij_5d(state, i0, j0)[0U], u));\n  if (rem == (size_t)16U)\n  {\n    Eurydice_arr_ec u8s0 = { .data = { 0U } };\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n      Eurydice_slice_subslice_shared_c8(blocks->data[0U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n      Eurydice_slice_subslice_shared_c8(blocks->data[1U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n      Eurydice_slice_subslice_shared_c8(blocks->data[2U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n      Eurydice_slice_subslice_shared_c8(blocks->data[3U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    __m256i\n    u0 =\n      mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n          &u8s0,\n          uint8_t,\n          Eurydice_borrow_slice_u8));\n    size_t i = ((size_t)4U * ((size_t)168U / (size_t)32U) + (size_t)1U) / (size_t)5U;\n    size_t j = ((size_t)4U * ((size_t)168U / (size_t)32U) + (size_t)1U) % (size_t)5U;\n    set_ij_5d(state, i, j, mm256_xor_si256(get_ij_5d(state, i, j)[0U], u0));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nstatic KRML_MUSTINLINE void\nload_last_37(Eurydice_arr_c40 *state, const Eurydice_arr_68 *blocks, size_t start, size_t len)\n{\n  Eurydice_arr_9c\n  buffers =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d41(&buffers.data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n      Eurydice_slice_subslice_shared_c8(blocks->data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n      uint8_t);\n    buffers.data[i0].data[len] = 31U;\n    size_t uu____0 = i0;\n    size_t uu____1 = (size_t)168U - (size_t)1U;\n    buffers.data[uu____0].data[uu____1] = (uint32_t)buffers.data[uu____0].data[uu____1] | 128U;);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_68\n  lvalue =\n    {\n      .data = {\n        Eurydice_array_to_slice_shared_2c(buffers.data),\n        Eurydice_array_to_slice_shared_2c(&buffers.data[1U]),\n        Eurydice_array_to_slice_shared_2c(&buffers.data[2U]),\n        Eurydice_array_to_slice_shared_2c(&buffers.data[3U])\n      }\n    };\n  load_block_60(state, &lvalue, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<4usize> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last_8f\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nstatic void\nload_last_8f_37(Eurydice_arr_c40 *self, const Eurydice_arr_68 *input, size_t start, size_t len)\n{\n  load_last_37(self, input, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 168\n- DELIM= 31\n*/\nstatic KRML_MUSTINLINE void\nabsorb_final_80_af0(\n  Eurydice_arr_c40 *self,\n  const Eurydice_arr_68 *input,\n  size_t start,\n  size_t len\n)\n{\n  load_last_8f_37(self, input, start, len);\n  keccakf1600_80_5d(self);\n}\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_absorb_final(\n  Eurydice_arr_c40 *s,\n  Eurydice_borrow_slice_u8 data0,\n  Eurydice_borrow_slice_u8 data1,\n  Eurydice_borrow_slice_u8 data2,\n  Eurydice_borrow_slice_u8 data3\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_68 lvalue = { .data = { data0, data1, data2, data3 } };\n  absorb_final_80_af0(s, &lvalue, (size_t)0U, data0.meta);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.store_block\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nstore_block_60(\n  const Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  size_t chunks = len / (size_t)32U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = chunks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      size_t rem = len % (size_t)32U;\n      if (rem > (size_t)0U)\n      {\n        size_t start0 = start + (size_t)32U * chunks;\n        Eurydice_arr_ec u8s = { .data = { 0U } };\n        size_t chunks8 = rem / (size_t)8U;\n        for (size_t i0 = (size_t)0U; i0 < chunks8; i0++)\n        {\n          size_t k = i0;\n          size_t i = ((size_t)4U * chunks + k) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + k) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____1 = Eurydice_array_to_slice_mut_01(&u8s);\n          mm256_storeu_si256_u8(uu____1, get_ij_5d(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n            uint8_t);\n        }\n        size_t rem8 = rem % (size_t)8U;\n        if (rem8 > (size_t)0U)\n        {\n          size_t i = ((size_t)4U * chunks + chunks8) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + chunks8) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____2 = Eurydice_array_to_slice_mut_01(&u8s);\n          mm256_storeu_si256_u8(uu____2, get_ij_5d(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = rem8 })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)8U,\n                  .end = (size_t)8U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)16U,\n                  .end = (size_t)16U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_shared_d4(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)24U,\n                  .end = (size_t)24U + rem8\n                }\n              )),\n            uint8_t);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t i0 = (size_t)4U * i / (size_t)5U;\n    size_t j0 = (size_t)4U * i % (size_t)5U;\n    size_t i1 = ((size_t)4U * i + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i + (size_t)3U) % (size_t)5U;\n    __m256i\n    v0l = mm256_permute2x128_si256(32, get_ij_5d(s, i0, j0)[0U], get_ij_5d(s, i2, j2)[0U], __m256i);\n    __m256i\n    v1h = mm256_permute2x128_si256(32, get_ij_5d(s, i1, j1)[0U], get_ij_5d(s, i3, j3)[0U], __m256i);\n    __m256i\n    v2l = mm256_permute2x128_si256(49, get_ij_5d(s, i0, j0)[0U], get_ij_5d(s, i2, j2)[0U], __m256i);\n    __m256i\n    v3h = mm256_permute2x128_si256(49, get_ij_5d(s, i1, j1)[0U], get_ij_5d(s, i3, j3)[0U], __m256i);\n    __m256i v0 = mm256_unpacklo_epi64(v0l, v1h);\n    __m256i v1 = mm256_unpackhi_epi64(v0l, v1h);\n    __m256i v2 = mm256_unpacklo_epi64(v2l, v3h);\n    __m256i v3 = mm256_unpackhi_epi64(v2l, v3h);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out0,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v0);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out1,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v1);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out2,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v2);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out3,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v3);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze4<core::core_arch::x86::__m256i> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.squeeze4_17\nwith const generics\n- RATE= 168\n*/\nstatic void\nsqueeze4_17_60(\n  const Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  store_block_60(self, out0, out1, out2, out3, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_first_three_blocks_81\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_first_three_blocks_81_60(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)0U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)168U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)2U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze three blocks\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_first_three_blocks_81_60(s, out0, out1, out2, out3);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_next_block_81\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_next_block_81_60(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start\n)\n{\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, start, (size_t)168U);\n}\n\n/**\n Squeeze another block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_next_block_81_60(s, out0, out1, out2, out3, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_first_five_blocks_81\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_first_five_blocks_81_60(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)0U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)168U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)2U * (size_t)168U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)3U * (size_t)168U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)4U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze five blocks\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_first_five_blocks_81_60(s, out0, out1, out2, out3);\n}\n\n/**\n Absorb\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_avx2_x4_incremental_shake256_absorb_final(\n  Eurydice_arr_c40 *s,\n  Eurydice_borrow_slice_u8 data0,\n  Eurydice_borrow_slice_u8 data1,\n  Eurydice_borrow_slice_u8 data2,\n  Eurydice_borrow_slice_u8 data3\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_68 lvalue = { .data = { data0, data1, data2, data3 } };\n  absorb_final_80_af(s, &lvalue, (size_t)0U, data0.meta);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_first_block_81\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_first_block_81_b2(\n  const Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze4_17_b2(self, out0, out1, out2, out3, (size_t)0U, (size_t)136U);\n}\n\n/**\n Squeeze block\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_first_block_81_b2(&s[0U], out0, out1, out2, out3);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_next_block_81\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_next_block_81_b2(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start\n)\n{\n  keccakf1600_80_5d(self);\n  squeeze4_17_b2(self, out0, out1, out2, out3, start, (size_t)136U);\n}\n\n/**\n Squeeze next block\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_next_block_81_b2(s, out0, out1, out2, out3, (size_t)0U);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_sha3_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_sha3_avx2_H\n#define libcrux_sha3_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"intrinsics/libcrux_intrinsics_avx2.h\"\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types core_core_arch_x86___m256i\nwith const generics\n- $25size_t\n*/\ntypedef struct Eurydice_arr_c40_s { __m256i data[25U]; } Eurydice_arr_c40;\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.KeccakState\nwith types core_core_arch_x86___m256i\nwith const generics\n- $4size_t\n*/\ntypedef Eurydice_arr_c40 libcrux_sha3_generic_keccak_KeccakState_7d;\n\n/**\n Perform 4 SHAKE256 operations in parallel\n*/\nvoid\nlibcrux_sha3_avx2_x4_shake256(\n  Eurydice_borrow_slice_u8 input0,\n  Eurydice_borrow_slice_u8 input1,\n  Eurydice_borrow_slice_u8 input2,\n  Eurydice_borrow_slice_u8 input3,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\ntypedef libcrux_sha3_generic_keccak_KeccakState_7d\nlibcrux_sha3_avx2_x4_incremental_KeccakState;\n\n/**\n Initialise the [`KeccakState`].\n*/\nEurydice_arr_c40 libcrux_sha3_avx2_x4_incremental_init(void);\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_absorb_final(\n  Eurydice_arr_c40 *s,\n  Eurydice_borrow_slice_u8 data0,\n  Eurydice_borrow_slice_u8 data1,\n  Eurydice_borrow_slice_u8 data2,\n  Eurydice_borrow_slice_u8 data3\n);\n\n/**\n Squeeze three blocks\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze another block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze five blocks\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_absorb_final(\n  Eurydice_arr_c40 *s,\n  Eurydice_borrow_slice_u8 data0,\n  Eurydice_borrow_slice_u8 data1,\n  Eurydice_borrow_slice_u8 data2,\n  Eurydice_borrow_slice_u8 data3\n);\n\n/**\n Squeeze block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze next block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_sha3_avx2_H_DEFINED\n#endif /* libcrux_sha3_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_sha3_internal.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_sha3_internal_H\n#define libcrux_sha3_internal_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define libcrux_sha3_Algorithm_Sha224 1\n#define libcrux_sha3_Algorithm_Sha256 2\n#define libcrux_sha3_Algorithm_Sha384 3\n#define libcrux_sha3_Algorithm_Sha512 4\n\ntypedef uint8_t libcrux_sha3_Algorithm;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_sha3_internal_H_DEFINED\n#endif /* libcrux_sha3_internal_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_sha3_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"libcrux_sha3_portable.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_core.h\"\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_zero_d2(void)\n{\n  return 0ULL;\n}\n\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__veor5q_u64(\n  uint64_t a,\n  uint64_t b,\n  uint64_t c,\n  uint64_t d,\n  uint64_t e\n)\n{\n  return (((a ^ b) ^ c) ^ d) ^ e;\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor5_d2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e)\n{\n  return libcrux_sha3_simd_portable__veor5q_u64(a, b, c, d, e);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_76(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)1);\n}\n\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vrax1q_u64(uint64_t a, uint64_t b)\n{\n  return a ^ libcrux_sha3_simd_portable_rotate_left_76(b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_rotate_left1_and_xor_d2(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vrax1q_u64(a, b);\n}\n\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vbcaxq_u64(uint64_t a, uint64_t b, uint64_t c)\n{\n  return a ^ (b & ~c);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_and_not_xor_d2(uint64_t a, uint64_t b, uint64_t c)\n{\n  return libcrux_sha3_simd_portable__vbcaxq_u64(a, b, c);\n}\n\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__veorq_n_u64(uint64_t a, uint64_t c)\n{\n  return a ^ c;\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_xor_constant_d2(uint64_t a, uint64_t c)\n{\n  return libcrux_sha3_simd_portable__veorq_n_u64(a, c);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_xor_d2(uint64_t a, uint64_t b)\n{\n  return a ^ b;\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.new_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE Eurydice_arr_7c libcrux_sha3_generic_keccak_new_80_71(void)\n{\n  Eurydice_arr_7c lit;\n  uint64_t repeat_expression[25U];\n  for (size_t i = (size_t)0U; i < (size_t)25U; i++)\n  {\n    repeat_expression[i] = libcrux_sha3_simd_portable_zero_d2();\n  }\n  memcpy(lit.data, repeat_expression, (size_t)25U * sizeof (uint64_t));\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.get_ij\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE const\nuint64_t\n*libcrux_sha3_traits_get_ij_71(const Eurydice_arr_7c *arr, size_t i, size_t j)\n{\n  return &arr->data[(size_t)5U * j + i];\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.set_ij\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_traits_set_ij_71(Eurydice_arr_7c *arr, size_t i, size_t j, uint64_t value)\n{\n  arr->data[(size_t)5U * j + i] = value;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 72\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_c6(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_7c state_flat = { .data = { 0U } };\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = (size_t)72U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_71(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_shared_c8(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_e0((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 72\n- DELIMITER= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_dc(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_ab buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d4(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)72U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_c6(state,\n    Eurydice_array_to_slice_shared_e2(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 72\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_dc(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_dc(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {core::ops::index::Index<(usize, usize), T> for libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.index_c2\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nconst\nuint64_t\n*libcrux_sha3_generic_keccak_index_c2_71(const Eurydice_arr_7c *self, size_t_x2 index)\n{\n  return libcrux_sha3_traits_get_ij_71(self, index.fst, index.snd);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.theta_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE Eurydice_arr_84 libcrux_sha3_generic_keccak_theta_80_71(Eurydice_arr_7c *self)\n{\n  Eurydice_arr_84\n  c =\n    {\n      .data = {\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U])\n      }\n    };\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_84){\n        .data = {\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)0U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)0U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)1U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)1U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)2U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)2U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)3U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)3U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)4U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)4U + (size_t)1U) % (size_t)5U])\n        }\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.set_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid\nlibcrux_sha3_generic_keccak_set_80_71(Eurydice_arr_7c *self, size_t i, size_t j, uint64_t v)\n{\n  libcrux_sha3_traits_set_ij_71(self, i, j, v);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_02(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)36);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_02(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_02(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_02(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_02(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ac(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)3);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_ac(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_ac(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_ac(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_ac(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_020(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)41);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_020(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_020(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_020(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_020(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_a9(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)18);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_a9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_a9(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_a9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_a9(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_0_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_0_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_02(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_ac(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_020(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_a9(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_76(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_76(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_76(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_76(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_58(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)44);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_58(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_58(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_58(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_58(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_e0(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)10);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_e0(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_e0(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_e0(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_e0(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_63(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)45);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_63(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_63(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_63(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_63(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_6a(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)2);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_6a(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_6a(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_6a(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_6a(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_1_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_1_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_76(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_58(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_e0(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_63(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_6a(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ab(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)62);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_ab(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_ab(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_ab(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_ab(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_5b(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)6);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_5b(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_5b(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_5b(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_5b(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_6f(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)43);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_6f(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_6f(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_6f(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_6f(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_62(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)15);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_62(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_62(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_62(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_62(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_23(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)61);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_23(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_23(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_23(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_23(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_2_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_2_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_ab(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_5b(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_6f(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_62(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_23(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_37(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)28);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_37(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_37(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_37(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_37(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_bb(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)55);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_bb(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_bb(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_bb(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_bb(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_b9(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)25);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_b9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_b9(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_b9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_b9(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_54(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)21);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_54(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_54(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_54(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_54(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_4c(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)56);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_4c(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_4c(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_4c(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_4c(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_3_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_3_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_37(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_bb(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_b9(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_54(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_4c(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ce(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)27);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_ce(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_ce(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_ce(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_ce(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_77(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)20);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_77(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_77(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_77(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_77(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_25(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)39);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_25(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_25(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_25(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_25(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_af(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)8);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_af(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_af(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_af(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_af(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_fd(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)14);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_fd(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_fd(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_fd(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_fd(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_4_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_4_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_ce(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_77(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_25(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_af(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_fd(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_rho_0_80_71(self, t);\n  libcrux_sha3_generic_keccak_rho_1_80_71(self, t);\n  libcrux_sha3_generic_keccak_rho_2_80_71(self, t);\n  libcrux_sha3_generic_keccak_rho_3_80_71(self, t);\n  libcrux_sha3_generic_keccak_rho_4_80_71(self, t);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_0_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_0_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_1_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_1_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_2_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_2_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_3_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_3_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_4_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_4_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_pi_80_71(Eurydice_arr_7c *self)\n{\n  Eurydice_arr_7c old = self[0U];\n  libcrux_sha3_generic_keccak_pi_0_80_71(self, old);\n  libcrux_sha3_generic_keccak_pi_1_80_71(self, old);\n  libcrux_sha3_generic_keccak_pi_2_80_71(self, old);\n  libcrux_sha3_generic_keccak_pi_3_80_71(self, old);\n  libcrux_sha3_generic_keccak_pi_4_80_71(self, old);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.chi_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_chi_80_71(Eurydice_arr_7c *self)\n{\n  Eurydice_arr_7c old = self[0U];\n  KRML_MAYBE_FOR5(i0,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR5(i,\n      (size_t)0U,\n      (size_t)5U,\n      (size_t)1U,\n      size_t j = i;\n      libcrux_sha3_generic_keccak_set_80_71(self,\n        i1,\n        j,\n        libcrux_sha3_simd_portable_and_not_xor_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = j }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)2U) % (size_t)5U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)1U) % (size_t)5U }))[0U]));););\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.iota_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_iota_80_71(Eurydice_arr_7c *self, size_t i)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_constant_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS.data[i]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_keccakf1600_80_71(Eurydice_arr_7c *self)\n{\n  for (size_t i = (size_t)0U; i < (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_84 t = libcrux_sha3_generic_keccak_theta_80_71(self);\n    libcrux_sha3_generic_keccak_rho_80_71(self, t);\n    libcrux_sha3_generic_keccak_pi_80_71(self);\n    libcrux_sha3_generic_keccak_chi_80_71(self);\n    libcrux_sha3_generic_keccak_iota_80_71(self, i0);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 72\n- DELIM= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_dc(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 72\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_c6(\n  const Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_shared_6e(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0,\n      Eurydice_array_to_subslice_to_shared_21(&bytes, remaining),\n      uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_c6(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_c6(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_c6(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_c6(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 72\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_e9(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_c6(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 72\n- DELIM= 6\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_dc(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)72U;\n  size_t input_rem = input_len % (size_t)72U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_dc lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd(&s, &lvalue, input_len - input_rem, input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)72U;\n      size_t output_rem = output_len % (size_t)72U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, (size_t)0U, (size_t)72U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, i0 * (size_t)72U, (size_t)72U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_dc lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e9(&s, &lvalue, i * (size_t)72U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHA3 512 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha512(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_dc(data, digest);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_b2(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_7c state_flat = { .data = { 0U } };\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = (size_t)136U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_71(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_shared_c8(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_e0((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_22(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_ff buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d40(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)136U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_b2(state,\n    Eurydice_array_to_slice_shared_58(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 136\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_22(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_22(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n- DELIM= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd0(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_22(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_b2(\n  const Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_shared_6e(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0,\n      Eurydice_array_to_subslice_to_shared_21(&bytes, remaining),\n      uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_b2(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_b2(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_b2(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_b2(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_e90(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_b2(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 136\n- DELIM= 6\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_22(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)136U;\n  size_t input_rem = input_len % (size_t)136U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_dc lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd0(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)136U;\n      size_t output_rem = output_len % (size_t)136U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, (size_t)136U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, i0 * (size_t)136U, (size_t)136U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_dc lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e90(&s, &lvalue, i * (size_t)136U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHA3 256 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha256(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_22(data, digest);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_220(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_ff buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d40(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 31U;\n  size_t uu____0 = (size_t)136U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_b2(state,\n    Eurydice_array_to_slice_shared_58(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_220(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_220(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n- DELIM= 31\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd1(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_220(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 136\n- DELIM= 31\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_220(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)136U;\n  size_t input_rem = input_len % (size_t)136U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_dc lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd1(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)136U;\n      size_t output_rem = output_len % (size_t)136U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, (size_t)136U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, i0 * (size_t)136U, (size_t)136U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_dc lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e90(&s, &lvalue, i * (size_t)136U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHAKE256 implementation.\n*/\nvoid\nlibcrux_sha3_portable_shake256(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_220(data, digest);\n}\n\n/**\n Create a new SHAKE-128 state object.\n*/\nEurydice_arr_7c libcrux_sha3_portable_incremental_shake128_init(void)\n{\n  return libcrux_sha3_generic_keccak_new_80_71();\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_60(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_7c state_flat = { .data = { 0U } };\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = (size_t)168U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_71(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_shared_c8(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_e0((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_37(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_c5 buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d41(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 31U;\n  size_t uu____0 = (size_t)168U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_60(state,\n    Eurydice_array_to_slice_shared_2c(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_37(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_37(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 168\n- DELIM= 31\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd2(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_37(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_absorb_final(\n  Eurydice_arr_7c *s,\n  Eurydice_borrow_slice_u8 data0\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_dc lvalue = { .data = { data0 } };\n  libcrux_sha3_generic_keccak_absorb_final_80_bd2(s, &lvalue, (size_t)0U, data0.meta);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_60(\n  const Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_shared_6e(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0,\n      Eurydice_array_to_subslice_to_shared_21(&bytes, remaining),\n      uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_60(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_60(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_three_blocks_b4\nwith const generics\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)0U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)2U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze three blocks\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_60(s, out0);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4\nwith const generics\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start\n)\n{\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, start, (size_t)168U);\n}\n\n/**\n Squeeze another block\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_60(s, out0, (size_t)0U);\n}\n\n/**\n Returns the output size of a digest.\n*/\nsize_t libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode)\n{\n  switch (mode)\n  {\n    case libcrux_sha3_Algorithm_Sha224:\n      {\n        break;\n      }\n    case libcrux_sha3_Algorithm_Sha256:\n      {\n        return LIBCRUX_SHA3_SHA3_256_DIGEST_SIZE;\n      }\n    case libcrux_sha3_Algorithm_Sha384:\n      {\n        return LIBCRUX_SHA3_SHA3_384_DIGEST_SIZE;\n      }\n    case libcrux_sha3_Algorithm_Sha512:\n      {\n        return LIBCRUX_SHA3_SHA3_512_DIGEST_SIZE;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  return LIBCRUX_SHA3_SHA3_224_DIGEST_SIZE;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 144\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_9e(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_7c state_flat = { .data = { 0U } };\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = (size_t)144U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_71(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_shared_c8(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_e0((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 144\n- DELIMITER= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_3a(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_f4 buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d42(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)144U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_9e(state,\n    Eurydice_array_to_slice_shared_38(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 144\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_3a(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_3a(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 144\n- DELIM= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd3(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_3a(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 144\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_9e(\n  const Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_shared_6e(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0,\n      Eurydice_array_to_subslice_to_shared_21(&bytes, remaining),\n      uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_9e(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_9e(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_9e(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_9e(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 144\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_e91(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_9e(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 144\n- DELIM= 6\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_3a(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)144U;\n  size_t input_rem = input_len % (size_t)144U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_dc lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd3(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)144U;\n      size_t output_rem = output_len % (size_t)144U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, (size_t)0U, (size_t)144U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, i0 * (size_t)144U, (size_t)144U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_dc lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e91(&s, &lvalue, i * (size_t)144U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHA3 224 implementation.\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_sha224(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_3a(data, digest);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 104\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_53(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_7c state_flat = { .data = { 0U } };\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = (size_t)104U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_71(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_shared_c8(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_e0((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 104\n- DELIMITER= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_dc0(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_c4 buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d43(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_shared_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)104U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_53(state,\n    Eurydice_array_to_slice_shared_72(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 104\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_dc0(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_dc0(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 104\n- DELIM= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd4(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_dc0(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 104\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_53(\n  const Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_shared_6e(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0,\n      Eurydice_array_to_subslice_to_shared_21(&bytes, remaining),\n      uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_53(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_53(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_53(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_53(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 104\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_e92(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_53(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 104\n- DELIM= 6\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_dc0(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)104U;\n  size_t input_rem = input_len % (size_t)104U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_dc lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd4(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)104U;\n      size_t output_rem = output_len % (size_t)104U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, (size_t)0U, (size_t)104U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, i0 * (size_t)104U, (size_t)104U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_dc lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e92(&s, &lvalue, i * (size_t)104U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHA3 384 implementation.\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_sha384(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_dc0(data, digest);\n}\n\n/**\n SHA3 224\n\n Preconditions:\n - `digest.len() == 28`\n*/\nvoid\nlibcrux_sha3_sha224_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)\n{\n  libcrux_sha3_portable_sha224(digest, payload);\n}\n\n/**\n SHA3 224\n*/\nEurydice_arr_a2 libcrux_sha3_sha224(Eurydice_borrow_slice_u8 data)\n{\n  Eurydice_arr_a2 out = { .data = { 0U } };\n  libcrux_sha3_sha224_ema(Eurydice_array_to_slice_mut_5e(&out), data);\n  return out;\n}\n\n/**\n SHA3 256\n*/\nvoid\nlibcrux_sha3_sha256_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)\n{\n  libcrux_sha3_portable_sha256(digest, payload);\n}\n\n/**\n SHA3 256\n*/\nEurydice_arr_ec libcrux_sha3_sha256(Eurydice_borrow_slice_u8 data)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  libcrux_sha3_sha256_ema(Eurydice_array_to_slice_mut_01(&out), data);\n  return out;\n}\n\n/**\n SHA3 384\n*/\nvoid\nlibcrux_sha3_sha384_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)\n{\n  libcrux_sha3_portable_sha384(digest, payload);\n}\n\n/**\n SHA3 384\n*/\nEurydice_arr_65 libcrux_sha3_sha384(Eurydice_borrow_slice_u8 data)\n{\n  Eurydice_arr_65 out = { .data = { 0U } };\n  libcrux_sha3_sha384_ema(Eurydice_array_to_slice_mut_9f(&out), data);\n  return out;\n}\n\n/**\n SHA3 512\n*/\nvoid\nlibcrux_sha3_sha512_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload)\n{\n  libcrux_sha3_portable_sha512(digest, payload);\n}\n\n/**\n SHA3 512\n*/\nEurydice_arr_c7 libcrux_sha3_sha512(Eurydice_borrow_slice_u8 data)\n{\n  Eurydice_arr_c7 out = { .data = { 0U } };\n  libcrux_sha3_sha512_ema(Eurydice_array_to_slice_mut_17(&out), data);\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_60(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_60(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_e93(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_60(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 168\n- DELIM= 31\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_37(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)168U;\n  size_t input_rem = input_len % (size_t)168U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_dc lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd2(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)168U;\n      size_t output_rem = output_len % (size_t)168U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, (size_t)0U, (size_t)168U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, i0 * (size_t)168U, (size_t)168U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_dc lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e93(&s, &lvalue, i * (size_t)168U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHAKE128 implementation.\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_shake128(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_37(data, digest);\n}\n\n/**\n SHAKE 128\n\n Writes `out.len()` bytes.\n*/\nvoid libcrux_sha3_shake128_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_borrow_slice_u8 data)\n{\n  libcrux_sha3_portable_shake128(out, data);\n}\n\n/**\n SHAKE 256\n\n Writes `out.len()` bytes.\n*/\nvoid libcrux_sha3_shake256_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_borrow_slice_u8 data)\n{\n  libcrux_sha3_portable_shake256(out, data);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_five_blocks_b4\nwith const generics\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)0U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)2U * (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)3U * (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)4U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze five blocks\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_60(s, out0);\n}\n\n/**\n Absorb some data for SHAKE-256 for the last time\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake256_absorb_final(\n  Eurydice_arr_7c *s,\n  Eurydice_borrow_slice_u8 data\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_dc lvalue = { .data = { data } };\n  libcrux_sha3_generic_keccak_absorb_final_80_bd1(s, &lvalue, (size_t)0U, data.meta);\n}\n\n/**\n Create a new SHAKE-256 state object.\n*/\nKRML_MUSTINLINE Eurydice_arr_7c libcrux_sha3_portable_incremental_shake256_init(void)\n{\n  return libcrux_sha3_generic_keccak_new_80_71();\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_block_b4\nwith const generics\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_b2(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_simd_portable_squeeze_9b_b2(self, out, (size_t)0U, (size_t)136U);\n}\n\n/**\n Squeeze the first SHAKE-256 block\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_b2(&s[0U], out);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4\nwith const generics\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_b2(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start\n)\n{\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_b2(self, out, start, (size_t)136U);\n}\n\n/**\n Squeeze the next SHAKE-256 block\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_b2(s, out, (size_t)0U);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem/libcrux_sha3_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_sha3_portable_H\n#define libcrux_sha3_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t libcrux_sha3_simd_portable_zero_d2(void);\n\nuint64_t\nlibcrux_sha3_simd_portable__veor5q_u64(\n  uint64_t a,\n  uint64_t b,\n  uint64_t c,\n  uint64_t d,\n  uint64_t e\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t\nlibcrux_sha3_simd_portable_xor5_d2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_76(uint64_t x);\n\nuint64_t libcrux_sha3_simd_portable__vrax1q_u64(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(uint64_t a, uint64_t b);\n\nuint64_t libcrux_sha3_simd_portable__vbcaxq_u64(uint64_t a, uint64_t b, uint64_t c);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t libcrux_sha3_simd_portable_and_not_xor_d2(uint64_t a, uint64_t b, uint64_t c);\n\nuint64_t libcrux_sha3_simd_portable__veorq_n_u64(uint64_t a, uint64_t c);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t libcrux_sha3_simd_portable_xor_constant_d2(uint64_t a, uint64_t c);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t libcrux_sha3_simd_portable_xor_d2(uint64_t a, uint64_t b);\n\n#define LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS ((KRML_CLITERAL(Eurydice_arr_22){ .data = { 1ULL, 32898ULL, 9223372036854808714ULL, 9223372039002292224ULL, 32907ULL, 2147483649ULL, 9223372039002292353ULL, 9223372036854808585ULL, 138ULL, 136ULL, 2147516425ULL, 2147483658ULL, 2147516555ULL, 9223372036854775947ULL, 9223372036854808713ULL, 9223372036854808579ULL, 9223372036854808578ULL, 9223372036854775936ULL, 32778ULL, 9223372039002259466ULL, 9223372039002292353ULL, 9223372036854808704ULL, 2147483649ULL, 9223372039002292232ULL } }))\n\ntypedef struct size_t_x2_s\n{\n  size_t fst;\n  size_t snd;\n}\nsize_t_x2;\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.KeccakState\nwith types uint64_t\nwith const generics\n- $1size_t\n*/\ntypedef Eurydice_arr_7c libcrux_sha3_generic_keccak_KeccakState_f3;\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.new_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nEurydice_arr_7c libcrux_sha3_generic_keccak_new_80_71(void);\n\n/**\nA monomorphic instance of libcrux_sha3.traits.get_ij\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nconst uint64_t *libcrux_sha3_traits_get_ij_71(const Eurydice_arr_7c *arr, size_t i, size_t j);\n\n/**\nA monomorphic instance of libcrux_sha3.traits.set_ij\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_traits_set_ij_71(Eurydice_arr_7c *arr, size_t i, size_t j, uint64_t value);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_c6(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 72\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_dc(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 72\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_dc(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {core::ops::index::Index<(usize, usize), T> for libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.index_c2\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nconst\nuint64_t\n*libcrux_sha3_generic_keccak_index_c2_71(const Eurydice_arr_7c *self, size_t_x2 index);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.theta_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nEurydice_arr_84 libcrux_sha3_generic_keccak_theta_80_71(Eurydice_arr_7c *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.set_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid\nlibcrux_sha3_generic_keccak_set_80_71(Eurydice_arr_7c *self, size_t i, size_t j, uint64_t v);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_02(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_02(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_02(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_ac(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_ac(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_ac(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_020(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_020(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_020(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_a9(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_a9(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_a9(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_0_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_0_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_76(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_76(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_58(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_58(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_58(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_e0(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_e0(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_e0(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_63(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_63(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_63(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_6a(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_6a(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_6a(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_1_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_1_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_ab(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_ab(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_ab(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_5b(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_5b(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_5b(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_6f(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_6f(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_6f(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_62(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_62(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_62(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_23(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_23(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_23(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_2_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_2_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_37(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_37(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_37(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_bb(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_bb(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_bb(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_b9(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_b9(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_b9(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_54(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_54(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_54(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_4c(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_4c(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_4c(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_3_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_3_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_ce(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_ce(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_ce(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_77(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_77(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_77(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_25(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_25(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_25(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_af(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_af(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_af(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_fd(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_fd(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_fd(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_4_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_4_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_0_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_0_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_1_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_1_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_2_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_2_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_3_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_3_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_4_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_4_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_80_71(Eurydice_arr_7c *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.chi_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_chi_80_71(Eurydice_arr_7c *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.iota_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_iota_80_71(Eurydice_arr_7c *self, size_t i);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_keccakf1600_80_71(Eurydice_arr_7c *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 72\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_store_block_c6(\n  const Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_c6(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_c6(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_e9(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 72\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_dc(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHA3 512 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha512(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_b2(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_22(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 136\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_22(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd0(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_store_block_b2(\n  const Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_b2(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_b2(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_e90(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 136\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_22(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHA3 256 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha256(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_220(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_220(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n- DELIM= 31\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd1(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 136\n- DELIM= 31\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_220(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHAKE256 implementation.\n*/\nvoid\nlibcrux_sha3_portable_shake256(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n);\n\ntypedef libcrux_sha3_generic_keccak_KeccakState_f3 libcrux_sha3_portable_KeccakState;\n\n/**\n Create a new SHAKE-128 state object.\n*/\nEurydice_arr_7c libcrux_sha3_portable_incremental_shake128_init(void);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_60(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_37(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_37(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 168\n- DELIM= 31\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd2(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_absorb_final(\n  Eurydice_arr_7c *s,\n  Eurydice_borrow_slice_u8 data0\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_store_block_60(\n  const Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_60(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_three_blocks_b4\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\n Squeeze three blocks\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start\n);\n\n/**\n Squeeze another block\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n);\n\n#define libcrux_sha3_Algorithm_Sha224 1\n#define libcrux_sha3_Algorithm_Sha256 2\n#define libcrux_sha3_Algorithm_Sha384 3\n#define libcrux_sha3_Algorithm_Sha512 4\n\ntypedef uint8_t libcrux_sha3_Algorithm;\n\n#define LIBCRUX_SHA3_SHA3_224_DIGEST_SIZE ((size_t)28U)\n\n#define LIBCRUX_SHA3_SHA3_256_DIGEST_SIZE ((size_t)32U)\n\n#define LIBCRUX_SHA3_SHA3_384_DIGEST_SIZE ((size_t)48U)\n\n#define LIBCRUX_SHA3_SHA3_512_DIGEST_SIZE ((size_t)64U)\n\n/**\n Returns the output size of a digest.\n*/\nsize_t libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_9e(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 144\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_3a(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 144\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_3a(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 144\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd3(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_store_block_9e(\n  const Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_9e(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_9e(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_e91(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 144\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_3a(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHA3 224 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha224(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_53(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 104\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_dc0(\n  Eurydice_arr_7c *state,\n  Eurydice_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 104\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_dc0(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 104\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd4(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start,\n  size_t len\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_store_block_53(\n  const Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_53(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_53(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_e92(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 104\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_dc0(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHA3 384 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha384(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n);\n\n/**\n SHA3 224\n\n Preconditions:\n - `digest.len() == 28`\n*/\nvoid\nlibcrux_sha3_sha224_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload);\n\n/**\n SHA3 224\n*/\nEurydice_arr_a2 libcrux_sha3_sha224(Eurydice_borrow_slice_u8 data);\n\n/**\n SHA3 256\n*/\nvoid\nlibcrux_sha3_sha256_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload);\n\n/**\n SHA3 256\n*/\nEurydice_arr_ec libcrux_sha3_sha256(Eurydice_borrow_slice_u8 data);\n\n/**\n SHA3 384\n*/\nvoid\nlibcrux_sha3_sha384_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload);\n\n/**\n SHA3 384\n*/\nEurydice_arr_65 libcrux_sha3_sha384(Eurydice_borrow_slice_u8 data);\n\n/**\n SHA3 512\n*/\nvoid\nlibcrux_sha3_sha512_ema(Eurydice_mut_borrow_slice_u8 digest, Eurydice_borrow_slice_u8 payload);\n\n/**\n SHA3 512\n*/\nEurydice_arr_c7 libcrux_sha3_sha512(Eurydice_borrow_slice_u8 data);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_60(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_e93(\n  Eurydice_arr_7c *self,\n  const Eurydice_arr_dc *input,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 168\n- DELIM= 31\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_37(\n  Eurydice_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHAKE128 implementation.\n*/\nvoid\nlibcrux_sha3_portable_shake128(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_borrow_slice_u8 data\n);\n\n/**\n SHAKE 128\n\n Writes `out.len()` bytes.\n*/\nvoid\nlibcrux_sha3_shake128_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_borrow_slice_u8 data);\n\n/**\n SHAKE 256\n\n Writes `out.len()` bytes.\n*/\nvoid\nlibcrux_sha3_shake256_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_borrow_slice_u8 data);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.KeccakXofState\nwith types uint64_t\nwith const generics\n- $1size_t\n- $168size_t\n*/\ntypedef struct libcrux_sha3_generic_keccak_xof_KeccakXofState_55_s\n{\n  Eurydice_arr_7c inner;\n  Eurydice_arr_88 buf;\n  size_t buf_len;\n  bool sponge;\n}\nlibcrux_sha3_generic_keccak_xof_KeccakXofState_55;\n\ntypedef libcrux_sha3_generic_keccak_xof_KeccakXofState_55\nlibcrux_sha3_portable_incremental_Shake128Xof;\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.KeccakXofState\nwith types uint64_t\nwith const generics\n- $1size_t\n- $136size_t\n*/\ntypedef struct libcrux_sha3_generic_keccak_xof_KeccakXofState_8d_s\n{\n  Eurydice_arr_7c inner;\n  Eurydice_arr_0b buf;\n  size_t buf_len;\n  bool sponge;\n}\nlibcrux_sha3_generic_keccak_xof_KeccakXofState_8d;\n\ntypedef libcrux_sha3_generic_keccak_xof_KeccakXofState_8d\nlibcrux_sha3_portable_incremental_Shake256Xof;\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_five_blocks_b4\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\n Squeeze five blocks\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n);\n\n/**\n Absorb some data for SHAKE-256 for the last time\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake256_absorb_final(\n  Eurydice_arr_7c *s,\n  Eurydice_borrow_slice_u8 data\n);\n\n/**\n Create a new SHAKE-256 state object.\n*/\nEurydice_arr_7c libcrux_sha3_portable_incremental_shake256_init(void);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_block_b4\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_b2(\n  const Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\n Squeeze the first SHAKE-256 block\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_b2(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start\n);\n\n/**\n Squeeze the next SHAKE-256 block\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_sha3_portable_KeccakState\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_4a_s { Eurydice_arr_7c data[4U]; } Eurydice_arr_4a;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_sha3_portable_KeccakState\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_1b_s { Eurydice_arr_7c data[3U]; } Eurydice_arr_1b;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_sha3_portable_KeccakState\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_e3_s { Eurydice_arr_7c data[2U]; } Eurydice_arr_e3;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_sha3_portable_H_DEFINED\n#endif /* libcrux_sha3_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/internal/libcrux_core.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_core_H\n#define internal_libcrux_core_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"../libcrux_core.h\"\n\n#define core_option_None 0\n#define core_option_Some 1\n\ntypedef uint8_t core_option_Option_87_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types size_t\n\n*/\ntypedef struct core_option_Option_87_s\n{\n  core_option_Option_87_tags tag;\n  size_t f0;\n}\ncore_option_Option_87;\n\nstatic inline uint64_t core_num__u64__from_le_bytes(Eurydice_array_u8x8 x0);\n\nstatic inline uint64_t core_num__u64__rotate_left(uint64_t x0, uint32_t x1);\n\nstatic inline Eurydice_array_u8x8 core_num__u64__to_le_bytes(uint64_t x0);\n\nstatic inline uint32_t core_num__u8__count_ones(uint8_t x0);\n\n/**\nA monomorphic instance of core.ops.range.Range\nwith types size_t\n\n*/\ntypedef struct core_ops_range_Range_87_s\n{\n  size_t start;\n  size_t end;\n}\ncore_ops_range_Range_87;\n\nuint8_t\nlibcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(\n  Eurydice_mut_borrow_slice_u8 lhs,\n  Eurydice_mut_borrow_slice_u8 rhs\n);\n\nEurydice_arr_ec\nlibcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(\n  Eurydice_mut_borrow_slice_u8 lhs,\n  Eurydice_mut_borrow_slice_u8 rhs,\n  uint8_t selector\n);\n\nEurydice_arr_ec\nlibcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(\n  Eurydice_mut_borrow_slice_u8 lhs_c,\n  Eurydice_mut_borrow_slice_u8 rhs_c,\n  Eurydice_mut_borrow_slice_u8 lhs_s,\n  Eurydice_mut_borrow_slice_u8 rhs_s\n);\n\n#define LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT (LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE ((size_t)32U)\n\n/**\n K * BITS_PER_RING_ELEMENT / 8\n\n [eurydice] Note that we can't use const generics here because that breaks\n            C extraction with eurydice.\n*/\nsize_t libcrux_ml_kem_constants_ranked_bytes_per_ring_element(size_t rank);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types int16_t\n\n*/\nint16_t libcrux_secrets_int_public_integers_declassify_d8_39(int16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nuint8_t libcrux_secrets_int_as_u8_f5(int16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types int16_t\n\n*/\nint16_t libcrux_secrets_int_public_integers_classify_27_39(int16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u8}\n*/\nint16_t libcrux_secrets_int_as_i16_59(uint8_t self);\n\nint16_t libcrux_secrets_int_I16(int16_t v);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nint32_t libcrux_secrets_int_as_i32_f5(int16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i32}\n*/\nint16_t libcrux_secrets_int_as_i16_36(int32_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u32}\n*/\nint32_t libcrux_secrets_int_as_i32_b8(uint32_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nuint16_t libcrux_secrets_int_as_u16_f5(int16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u16}\n*/\nint16_t libcrux_secrets_int_as_i16_ca(uint16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u16}\n*/\nuint64_t libcrux_secrets_int_as_u64_ca(uint16_t self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types uint32_t\n\n*/\nuint32_t libcrux_secrets_int_public_integers_classify_27_df(uint32_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u64}\n*/\nuint32_t libcrux_secrets_int_as_u32_a3(uint64_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u32}\n*/\nint16_t libcrux_secrets_int_as_i16_b8(uint32_t self);\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nint16_t libcrux_secrets_int_as_i16_f5(int16_t self);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 3168\n*/\nEurydice_arr_a8 libcrux_ml_kem_types_default_d3_0e(void);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_to_mut_212(Eurydice_arr_d1 *a, size_t r);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 libcrux_ml_kem_types_from_51_d9(Eurydice_arr_d1 value);\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_types_from_17_70(Eurydice_arr_a8 sk, Eurydice_arr_d1 pk);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 3168\n*/\nEurydice_arr_a8 libcrux_ml_kem_types_from_b2_0e(Eurydice_arr_a8 value);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 3168\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d422(Eurydice_arr_a8 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1536size_t\n*/\ntypedef struct Eurydice_arr_df_s { uint8_t data[1536U]; } Eurydice_arr_df;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1536\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_2f(Eurydice_arr_df *a);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 libcrux_ml_kem_types_from_19_d9(Eurydice_arr_d1 value);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 *libcrux_ml_kem_types_as_slice_e6_d9(Eurydice_arr_d1 *self);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 *libcrux_ml_kem_types_as_slice_a9_d9(Eurydice_arr_d1 *self);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $352size_t\n*/\ntypedef struct Eurydice_arr_e7_s { uint8_t data[352U]; } Eurydice_arr_e7;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 352\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d421(Eurydice_arr_e7 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 352\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_25(Eurydice_arr_e7 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $128size_t\n*/\ntypedef struct Eurydice_arr_89_s { uint8_t data[128U]; } Eurydice_arr_89;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_89\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_3b0_s { Eurydice_arr_89 data[4U]; } Eurydice_arr_3b0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $33size_t\n*/\ntypedef struct Eurydice_arr_fa_s { uint8_t data[33U]; } Eurydice_arr_fa;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_fa\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_890_s { Eurydice_arr_fa data[4U]; } Eurydice_arr_890;\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 4\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_23(Eurydice_arr_890 *prf_inputs, uint8_t domain_separator);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int16_t\nwith const generics\n- $272size_t\n*/\ntypedef struct Eurydice_arr_5b_s { int16_t data[272U]; } Eurydice_arr_5b;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_5b\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_24_s { Eurydice_arr_5b data[4U]; } Eurydice_arr_24;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_cc_s { size_t data[4U]; } Eurydice_arr_cc;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $504size_t\n*/\ntypedef struct Eurydice_arr_79_s { uint8_t data[504U]; } Eurydice_arr_79;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_79\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_7c0_s { Eurydice_arr_79 data[4U]; } Eurydice_arr_7c0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $34size_t\n*/\ntypedef struct Eurydice_arr_31_s { uint8_t data[34U]; } Eurydice_arr_31;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_31\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_56_s { Eurydice_arr_31 data[4U]; } Eurydice_arr_56;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1600size_t\n*/\ntypedef struct Eurydice_arr_14_s { uint8_t data[1600U]; } Eurydice_arr_14;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1600\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_720(Eurydice_arr_14 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_b50(Eurydice_arr_d1 *a);\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 1568\n*/\nEurydice_mut_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_d9(Eurydice_arr_d1 *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1600\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f6(Eurydice_arr_14 *a, size_t r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 1600\n*/\nEurydice_arr_14 libcrux_ml_kem_utils_into_padded_array_49(Eurydice_mut_borrow_slice_u8 slice);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f5(Eurydice_arr_d1 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d419(Eurydice_arr_d1 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 3168\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_68(Eurydice_arr_a8 *a);\n\ntypedef struct Eurydice_mut_borrow_slice_u8_x4_s\n{\n  Eurydice_mut_borrow_slice_u8 fst;\n  Eurydice_mut_borrow_slice_u8 snd;\n  Eurydice_mut_borrow_slice_u8 thd;\n  Eurydice_mut_borrow_slice_u8 f3;\n}\nEurydice_mut_borrow_slice_u8_x4;\n\ntypedef struct Eurydice_mut_borrow_slice_u8_x2_s\n{\n  Eurydice_mut_borrow_slice_u8 fst;\n  Eurydice_mut_borrow_slice_u8 snd;\n}\nEurydice_mut_borrow_slice_u8_x2;\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_mut_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_e3(Eurydice_mut_borrow_slice_u8 private_key);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 2400\n*/\nEurydice_arr_7d libcrux_ml_kem_types_default_d3_79(void);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_to_mut_211(Eurydice_arr_5f *a, size_t r);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 1184\n*/\nEurydice_arr_5f libcrux_ml_kem_types_from_51_3d(Eurydice_arr_5f value);\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_types_from_17_bc(Eurydice_arr_7d sk, Eurydice_arr_5f pk);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 2400\n*/\nEurydice_arr_7d libcrux_ml_kem_types_from_b2_79(Eurydice_arr_7d value);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 2400\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d418(Eurydice_arr_7d *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1152size_t\n*/\ntypedef struct Eurydice_arr_0e_s { uint8_t data[1152U]; } Eurydice_arr_0e;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1152\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_f4(Eurydice_arr_0e *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f4(Eurydice_arr_5f *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d417(Eurydice_arr_5f *a, core_ops_range_Range_87 r);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 1088\n*/\nEurydice_arr_2b libcrux_ml_kem_types_from_19_52(Eurydice_arr_2b value);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 1184\n*/\nEurydice_arr_5f *libcrux_ml_kem_types_as_slice_e6_3d(Eurydice_arr_5f *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_ff(Eurydice_arr_5f *a);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 1088\n*/\nEurydice_arr_2b *libcrux_ml_kem_types_as_slice_a9_52(Eurydice_arr_2b *self);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_89\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_58_s { Eurydice_arr_89 data[3U]; } Eurydice_arr_58;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_fa\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_801_s { Eurydice_arr_fa data[3U]; } Eurydice_arr_801;\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 3\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_78(Eurydice_arr_801 *prf_inputs, uint8_t domain_separator);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c5\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_2c_s { Eurydice_arr_c5 data[3U]; } Eurydice_arr_2c;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_5b\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_b1_s { Eurydice_arr_5b data[3U]; } Eurydice_arr_b1;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_eb0_s { size_t data[3U]; } Eurydice_arr_eb0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_79\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_7e_s { Eurydice_arr_79 data[3U]; } Eurydice_arr_7e;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_31\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_81_s { Eurydice_arr_31 data[3U]; } Eurydice_arr_81;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1120size_t\n*/\ntypedef struct Eurydice_arr_af_s { uint8_t data[1120U]; } Eurydice_arr_af;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1120\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_81(Eurydice_arr_af *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_06(Eurydice_arr_2b *a);\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 1088\n*/\nEurydice_mut_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_52(Eurydice_arr_2b *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1120\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f3(Eurydice_arr_af *a, size_t r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 1120\n*/\nEurydice_arr_af libcrux_ml_kem_utils_into_padded_array_66(Eurydice_mut_borrow_slice_u8 slice);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f2(Eurydice_arr_2b *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d415(Eurydice_arr_2b *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 2400\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_51(Eurydice_arr_7d *a);\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_mut_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_64(Eurydice_mut_borrow_slice_u8 private_key);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d44(Eurydice_arr_ec *a, core_ops_range_Range_87 r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 32\n*/\nEurydice_arr_ec libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_mut_borrow_slice_u8 slice);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 1632\n*/\nEurydice_arr_ab0 libcrux_ml_kem_types_default_d3_be(void);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_to_mut_210(Eurydice_arr_03 *a, size_t r);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 800\n*/\nEurydice_arr_03 libcrux_ml_kem_types_from_51_df(Eurydice_arr_03 value);\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_types_from_17_d6(Eurydice_arr_ab0 sk, Eurydice_arr_03 pk);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 1632\n*/\nEurydice_arr_ab0 libcrux_ml_kem_types_from_b2_be(Eurydice_arr_ab0 value);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1632\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d414(Eurydice_arr_ab0 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 24\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_ed(Eurydice_arr_94 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $384size_t\n*/\ntypedef struct Eurydice_arr_b20_s { uint8_t data[384U]; } Eurydice_arr_b20;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 384\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d413(Eurydice_arr_b20 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 384\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_a9(Eurydice_arr_b20 *a);\n\n#define core_result_Ok 0\n#define core_result_Err 1\n\ntypedef uint8_t core_result_Result_07_tags;\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_arr_ec, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_07_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_arr_ec case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_07;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$32size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_ec core_result_unwrap_26_39(core_result_Result_07 self);\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 768\n*/\nEurydice_arr_d2 libcrux_ml_kem_types_from_19_80(Eurydice_arr_d2 value);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 800\n*/\nEurydice_arr_03 *libcrux_ml_kem_types_as_slice_e6_df(Eurydice_arr_03 *self);\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 768\n*/\nEurydice_arr_d2 *libcrux_ml_kem_types_as_slice_a9_80(Eurydice_arr_d2 *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 10\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_30(Eurydice_arr_6d *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 22\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_98(Eurydice_arr_80 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 20\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_8f(Eurydice_arr_fc *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $320size_t\n*/\ntypedef struct Eurydice_arr_b0_s { uint8_t data[320U]; } Eurydice_arr_b0;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 320\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d412(Eurydice_arr_b0 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 320\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_56(Eurydice_arr_b0 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_89\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_f3_s { Eurydice_arr_89 data[2U]; } Eurydice_arr_f3;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 128\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_78(Eurydice_arr_89 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int16_t\nwith const generics\n- $256size_t\n*/\ntypedef struct Eurydice_arr_04_s { int16_t data[256U]; } Eurydice_arr_04;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types int16_t\nwith const generics\n- N= 256\n*/\nEurydice_mut_borrow_slice_i16 Eurydice_array_to_slice_mut_990(Eurydice_arr_04 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $192size_t\n*/\ntypedef struct Eurydice_arr_1c_s { uint8_t data[192U]; } Eurydice_arr_1c;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_1c\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_eb_s { Eurydice_arr_1c data[2U]; } Eurydice_arr_eb;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 192\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_d9(Eurydice_arr_1c *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 33\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_b5(Eurydice_arr_fa *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_fa\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_4d_s { Eurydice_arr_fa data[2U]; } Eurydice_arr_4d;\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 2\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_af(Eurydice_arr_4d *prf_inputs, uint8_t domain_separator);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 33\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d411(Eurydice_arr_fa *a, core_ops_range_Range_87 r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 33\n*/\nEurydice_arr_fa libcrux_ml_kem_utils_into_padded_array_29(Eurydice_mut_borrow_slice_u8 slice);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 34\n*/\nEurydice_arr_31 libcrux_ml_kem_utils_into_padded_array_de(Eurydice_mut_borrow_slice_u8 slice);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c5\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_5b0_s { Eurydice_arr_c5 data[2U]; } Eurydice_arr_5b0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_5b\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_800_s { Eurydice_arr_5b data[2U]; } Eurydice_arr_800;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_85_s { size_t data[2U]; } Eurydice_arr_85;\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\nwith const generics\n- N= 272\n*/\nEurydice_mut_borrow_slice_i16\nEurydice_array_to_subslice_mut_e70(Eurydice_arr_5b *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 504\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d49(Eurydice_arr_79 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_79\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_b8_s { Eurydice_arr_79 data[2U]; } Eurydice_arr_b8;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 504\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_48(Eurydice_arr_79 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_31\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_bf_s { Eurydice_arr_31 data[2U]; } Eurydice_arr_bf;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 34\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_e9(Eurydice_arr_31 *a);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_slice_subslice_from_mut_6d(Eurydice_mut_borrow_slice_u8 s, size_t r);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_slice_subslice_to_mut_72(Eurydice_mut_borrow_slice_u8 s, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_3b(Eurydice_arr_03 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_27(Eurydice_arr_d2 *a);\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 768\n*/\nEurydice_mut_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_80(Eurydice_arr_d2 *self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f1(Eurydice_arr_03 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d48(Eurydice_arr_03 *a, core_ops_range_Range_87 r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 800\n*/\nEurydice_arr_03 libcrux_ml_kem_utils_into_padded_array_df(Eurydice_mut_borrow_slice_u8 slice);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f0(Eurydice_arr_c7 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d47(Eurydice_arr_c7 *a, core_ops_range_Range_87 r);\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 64\n*/\nEurydice_arr_c7 libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_mut_borrow_slice_u8 slice);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 2\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_82(Eurydice_array_u8x2 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f(Eurydice_arr_d2 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d46(Eurydice_arr_d2 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1632\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_99(Eurydice_arr_ab0 *a);\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_mut_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_e0(Eurydice_mut_borrow_slice_u8 private_key);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_arr_94, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_57_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_arr_94 case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_57;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$24size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_94 core_result_unwrap_26_78(core_result_Result_57 self);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_arr_fc, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_83_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_arr_fc case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_83;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$20size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_fc core_result_unwrap_26_7d(core_result_Result_83 self);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_arr_6d, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_80_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_arr_6d case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_80;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$10size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_6d core_result_unwrap_26_63(core_result_Result_80 self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d45(Eurydice_arr_b2 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_29(Eurydice_arr_b2 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types int16_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_i16 Eurydice_array_to_slice_mut_8a(Eurydice_arr_d6 *a);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$24size_t]]\n\n*/\nEurydice_arr_94 libcrux_secrets_int_public_integers_declassify_d8_40(Eurydice_arr_94 self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$20size_t]]\n\n*/\nEurydice_arr_fc libcrux_secrets_int_public_integers_declassify_d8_2b(Eurydice_arr_fc self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$10size_t]]\n\n*/\nEurydice_arr_6d libcrux_secrets_int_public_integers_declassify_d8_37(Eurydice_arr_6d self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$8size_t]]\n\n*/\nEurydice_array_u8x8\nlibcrux_secrets_int_public_integers_declassify_d8_52(Eurydice_array_u8x8 self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$2size_t]]\n\n*/\nEurydice_array_u8x2\nlibcrux_secrets_int_public_integers_declassify_d8_75(Eurydice_array_u8x2 self);\n\n/**\n Classify a mutable slice (identity)\n We define a separate function for this because hax has limited support for &mut-returning functions\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_mut_slice\nwith types Eurydice_dst_ref_mut uint8_t size_t\n\n*/\nEurydice_mut_borrow_slice_u8\nlibcrux_secrets_int_public_integers_classify_mut_slice_75(Eurydice_mut_borrow_slice_u8 x);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types Eurydice_arr int16_t[[$16size_t]]\n\n*/\nEurydice_arr_d6 libcrux_secrets_int_public_integers_classify_27_4b(Eurydice_arr_d6 self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr int16_t[[$16size_t]]\n\n*/\nEurydice_arr_d6 libcrux_secrets_int_public_integers_declassify_d8_4b(Eurydice_arr_d6 self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::ClassifyRef<&'a ([T])> for &'a ([T])}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_6d\nwith types uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nlibcrux_secrets_int_classify_public_classify_ref_6d_90(Eurydice_mut_borrow_slice_u8 self);\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$22size_t]]\n\n*/\nEurydice_arr_80 libcrux_secrets_int_public_integers_declassify_d8_0b(Eurydice_arr_80 self);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_i16\nEurydice_array_to_subslice_mut_e7(Eurydice_arr_d6 *a, core_ops_range_Range_87 r);\n\n/**\nThis function found in impl {libcrux_secrets::traits::ClassifyRef<&'a ([T])> for &'a ([T])}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_6d\nwith types int16_t\n\n*/\nEurydice_mut_borrow_slice_i16\nlibcrux_secrets_int_classify_public_classify_ref_6d_39(Eurydice_mut_borrow_slice_i16 self);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\n\n*/\nEurydice_mut_borrow_slice_i16\nEurydice_slice_subslice_mut_a6(Eurydice_mut_borrow_slice_i16 s, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_arr_d6, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_ec_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_arr_d6 case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_ec;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr int16_t[[$16size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_d6 core_result_unwrap_26_d3(core_result_Result_ec self);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int16_t\nwith const generics\n- $128size_t\n*/\ntypedef struct Eurydice_arr_34_s { int16_t data[128U]; } Eurydice_arr_34;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c5\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_9c_s { Eurydice_arr_c5 data[4U]; } Eurydice_arr_9c;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_ff\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_dc_s { Eurydice_arr_ff data[4U]; } Eurydice_arr_dc;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_mut_borrow_slice_u8\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_0b0_s { Eurydice_mut_borrow_slice_u8 data[4U]; } Eurydice_arr_0b0;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_17(Eurydice_arr_c7 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 48\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_9f(Eurydice_arr_65 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_01(Eurydice_arr_ec *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 28\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_5e(Eurydice_arr_a2 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $104size_t\n*/\ntypedef struct Eurydice_arr_c4_s { uint8_t data[104U]; } Eurydice_arr_c4;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_72(Eurydice_arr_c4 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d43(Eurydice_arr_c4 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $144size_t\n*/\ntypedef struct Eurydice_arr_f4_s { uint8_t data[144U]; } Eurydice_arr_f4;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_38(Eurydice_arr_f4 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d42(Eurydice_arr_f4 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_2c(Eurydice_arr_c5 *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d41(Eurydice_arr_c5 *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_58(Eurydice_arr_ff *a);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d40(Eurydice_arr_ff *a, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_to_mut_21(Eurydice_array_u8x8 *a, size_t r);\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_6e(Eurydice_array_u8x8 *a);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $72size_t\n*/\ntypedef struct Eurydice_arr_ab_s { uint8_t data[72U]; } Eurydice_arr_ab;\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_e2(Eurydice_arr_ab *a);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_array_u8x8, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_8e_s\n{\n  core_result_Result_07_tags tag;\n  union {\n    Eurydice_array_u8x8 case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_8e;\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$8size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_array_u8x8 core_result_unwrap_26_e0(core_result_Result_8e self);\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_slice_subslice_mut_c8(Eurydice_mut_borrow_slice_u8 s, core_ops_range_Range_87 r);\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d4(Eurydice_arr_ab *a, core_ops_range_Range_87 r);\n\ntypedef struct libcrux_ml_kem_utils_extraction_helper_Keypair768_s\n{\n  Eurydice_arr_0e fst;\n  Eurydice_arr_5f snd;\n}\nlibcrux_ml_kem_utils_extraction_helper_Keypair768;\n\ntypedef struct libcrux_ml_kem_utils_extraction_helper_Keypair512_s\n{\n  Eurydice_arr_d2 fst;\n  Eurydice_arr_03 snd;\n}\nlibcrux_ml_kem_utils_extraction_helper_Keypair512;\n\ntypedef struct libcrux_ml_kem_utils_extraction_helper_Keypair1024_s\n{\n  Eurydice_arr_df fst;\n  Eurydice_arr_d1 snd;\n}\nlibcrux_ml_kem_utils_extraction_helper_Keypair1024;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_core_H_DEFINED\n#endif /* internal_libcrux_core_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/internal/libcrux_mlkem1024_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem1024_avx2_H\n#define internal_libcrux_mlkem1024_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_avx2.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem1024_avx2.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 1024 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem1024KeyPairUnpacked`]\n and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *private_key,\n  Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 1024 (unpacked)\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem1024PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n TODO: The F* prefix opens required modules, it should go away when the following issue is resolved:\n <https://github.com/hacspec/hax/issues/770>\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_a8 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_unpacked_public_key(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem1024_avx2_H_DEFINED\n#endif /* internal_libcrux_mlkem1024_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/internal/libcrux_mlkem1024_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem1024_portable_H\n#define internal_libcrux_mlkem1024_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_portable.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem1024_portable.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 1024 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem1024KeyPairUnpacked`]\n and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_portable_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *private_key,\n  Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 1024 (unpacked)\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem1024PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n TODO: The F* prefix opens required modules, it should go away when the following issue is resolved:\n <https://github.com/hacspec/hax/issues/770>\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_portable_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_portable_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94\nlibcrux_ml_kem_mlkem1024_portable_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_a8 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_unpacked_public_key(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem1024_portable_H_DEFINED\n#endif /* internal_libcrux_mlkem1024_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/internal/libcrux_mlkem512_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem512_avx2_H\n#define internal_libcrux_mlkem512_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_avx2.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem512_avx2.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 512 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem512KeyPairUnpacked`]\n and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_avx2_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *private_key,\n  Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 512 (unpacked)\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem512PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_avx2_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_avx2_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7\nlibcrux_ml_kem_mlkem512_avx2_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_ab0 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_03\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_unpacked_public_key(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem512_avx2_H_DEFINED\n#endif /* internal_libcrux_mlkem512_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/internal/libcrux_mlkem512_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem512_portable_H\n#define internal_libcrux_mlkem512_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_portable.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem512_portable.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 512 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem512KeyPairUnpacked`]\n and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_portable_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *private_key,\n  Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 512 (unpacked)\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem512PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_portable_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_portable_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b\nlibcrux_ml_kem_mlkem512_portable_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_ab0 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_03\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_unpacked_public_key(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem512_portable_H_DEFINED\n#endif /* internal_libcrux_mlkem512_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/internal/libcrux_mlkem768_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem768_avx2_H\n#define internal_libcrux_mlkem768_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_avx2.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem768_avx2.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 768 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem768KeyPairUnpacked`]\n and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_avx2_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *private_key,\n  Eurydice_arr_2b *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 768 (unpacked)\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem768PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_avx2_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_avx2_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_mlkem768_avx2_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_7d *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_public_key(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *pk\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_unpacked_public_key(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem768_avx2_H_DEFINED\n#endif /* internal_libcrux_mlkem768_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/internal/libcrux_mlkem768_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem768_portable_H\n#define internal_libcrux_mlkem768_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_mlkem_portable.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem768_portable.h\"\n\ntypedef libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768PublicKeyUnpacked;\n\n/**\n Decapsulate ML-KEM 768 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem768KeyPairUnpacked`]\n and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_portable_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *private_key,\n  Eurydice_arr_2b *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 768 (unpacked)\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem768PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_portable_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_portable_unpacked_init_key_pair(void);\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_mlkem768_portable_unpacked_init_public_key(void);\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_7d *serialized\n);\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_public_key(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *pk\n);\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_unpacked_public_key(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem768_portable_H_DEFINED\n#endif /* internal_libcrux_mlkem768_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/internal/libcrux_mlkem_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem_avx2_H\n#define internal_libcrux_mlkem_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem_avx2.h\"\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_13_s { __m256i data[16U]; } Eurydice_arr_13;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_f6\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_60_s { Eurydice_arr_13 data[3U]; } Eurydice_arr_60;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_60\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_ea_s { Eurydice_arr_60 data[3U]; } Eurydice_arr_ea;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef_s\n{\n  Eurydice_arr_60 t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_ea A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef;\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a1(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_ef_s\n{\n  Eurydice_arr_60 ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_ef;\n\ntypedef struct libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_ef private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef public_key;\n}\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\n*libcrux_ml_kem_ind_cca_unpacked_public_key_11_e3(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.clone_d7\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_ind_cca_unpacked_clone_d7_e3(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *self\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_79(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *self,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_79(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_79(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_d4(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_7d *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_d4(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_3e(\n  Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_ind_cca_unpacked_default_30_e3(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_e3(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db1(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a81(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d91(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_2b *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_79(Eurydice_arr_5f *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_a4(Eurydice_arr_7d *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_d50(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_db1(Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_encapsulate_a11(\n  Eurydice_arr_5f *public_key,\n  Eurydice_arr_ec *randomness\n);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_661(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_f6\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_3b_s { Eurydice_arr_13 data[4U]; } Eurydice_arr_3b;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_3b\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_cd_s { Eurydice_arr_3b data[4U]; } Eurydice_arr_cd;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4_s\n{\n  Eurydice_arr_3b t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_cd A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4;\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a0(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_d4_s\n{\n  Eurydice_arr_3b ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_d4;\n\ntypedef struct libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_d4 private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 public_key;\n}\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_74(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *self,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_74(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_74(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_f8(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_a8 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_f8(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_b2(\n  Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4\nlibcrux_ml_kem_ind_cca_unpacked_default_30_5b(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_5b(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db0(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a80(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d90(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_74(Eurydice_arr_d1 *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_f8(Eurydice_arr_a8 *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_b3(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_db0(Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_encapsulate_a10(\n  Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec *randomness\n);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_660(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_f6\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_ee_s { Eurydice_arr_13 data[2U]; } Eurydice_arr_ee;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_ee\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_e2_s { Eurydice_arr_ee data[2U]; } Eurydice_arr_e2;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7_s\n{\n  Eurydice_arr_ee t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_e2 A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7;\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_c7_s\n{\n  Eurydice_arr_ee ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_c7;\n\ntypedef struct libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_c7 private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 public_key;\n}\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_ce(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *self,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_ce(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_03\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_ce(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_4e(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_ab0 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_4e(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_a4(\n  Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7\nlibcrux_ml_kem_ind_cca_unpacked_default_30_16(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_16(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a8(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d9(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_ce(Eurydice_arr_03 *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_37(Eurydice_arr_ab0 *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_85(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_ind_cca_generate_keypair_db(Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_encapsulate_a1(Eurydice_arr_03 *public_key, Eurydice_arr_ec *randomness);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_66(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem_avx2_H_DEFINED\n#endif /* internal_libcrux_mlkem_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/internal/libcrux_mlkem_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_mlkem_portable_H\n#define internal_libcrux_mlkem_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"internal/libcrux_core.h\"\n#include \"libcrux_sha3_portable.h\"\n#include \"libcrux_core.h\"\n#include \"../libcrux_mlkem_portable.h\"\n\nint16_t libcrux_ml_kem_polynomial_zeta(size_t i);\n\n#define LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT ((size_t)16U)\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_9e_s { Eurydice_arr_d6 data[16U]; } Eurydice_arr_9e;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_1d\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_d20_s { Eurydice_arr_9e data[4U]; } Eurydice_arr_d20;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_d20\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_600_s { Eurydice_arr_d20 data[4U]; } Eurydice_arr_600;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94_s\n{\n  Eurydice_arr_d20 t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_600 A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94;\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_4a\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_23(Eurydice_arr_56 *input);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_7c0\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_23(\n  Eurydice_arr_4a *self\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_9c\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_23(Eurydice_arr_4a *self);\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_29(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $4size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_94_s\n{\n  Eurydice_arr_d20 ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_94;\n\ntypedef struct libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_94 private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 public_key;\n}\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_1c(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *self,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_1c(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_d1 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_1c(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self\n);\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SERIALIZED_KEY_LEN= 3168\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_4c(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_a8 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_2e(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_a8 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_2e(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_38(\n  Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94\nlibcrux_ml_kem_ind_cca_unpacked_default_30_ee(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_ee(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b81(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a71(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c1(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_1c(Eurydice_arr_d1 *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_4c(Eurydice_arr_a8 *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_79(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_b81(Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_encapsulate_991(\n  Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec *randomness\n);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd1(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_1d\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_1e_s { Eurydice_arr_9e data[2U]; } Eurydice_arr_1e;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_1e\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_df0_s { Eurydice_arr_1e data[2U]; } Eurydice_arr_df0;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b_s\n{\n  Eurydice_arr_1e t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_df0 A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b;\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_e3\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_af(Eurydice_arr_bf *input);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_b8\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_af(\n  Eurydice_arr_e3 *self\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_5b0\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_af(Eurydice_arr_e3 *self);\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_e0(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $2size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_3b_s\n{\n  Eurydice_arr_1e ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_3b;\n\ntypedef struct libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_3b private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b public_key;\n}\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_53(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *self,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_53(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_03 *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_03\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_53(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self\n);\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SERIALIZED_KEY_LEN= 1632\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_e2(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_ab0 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_a3(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_ab0 *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_a3(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_71(\n  Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b\nlibcrux_ml_kem_ind_cca_unpacked_default_30_66(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_66(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b80(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a70(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c0(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_53(Eurydice_arr_03 *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_e2(Eurydice_arr_ab0 *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_d5(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_ind_cca_generate_keypair_b80(Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_encapsulate_990(\n  Eurydice_arr_03 *public_key,\n  Eurydice_arr_ec *randomness\n);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd0(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_ml_kem_polynomial_PolynomialRingElement_1d\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_bb_s { Eurydice_arr_9e data[3U]; } Eurydice_arr_bb;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_bb\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_1d_s { Eurydice_arr_bb data[3U]; } Eurydice_arr_1d;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.IndCpaPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51_s\n{\n  Eurydice_arr_bb t_as_ntt;\n  Eurydice_arr_ec seed_for_A;\n  Eurydice_arr_1d A;\n}\nlibcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPublicKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51_s\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 ind_cpa_public_key;\n  Eurydice_arr_ec public_key_hash;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51;\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_1b\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_78(Eurydice_arr_81 *input);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_7e\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_78(\n  Eurydice_arr_1b *self\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_2c\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_78(Eurydice_arr_1b *self);\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_22(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.MlKemPrivateKeyUnpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- $3size_t\n*/\ntypedef struct libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51_s\n{\n  Eurydice_arr_bb ind_cpa_private_key;\n  Eurydice_arr_ec implicit_rejection_value;\n}\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51;\n\ntypedef struct libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked_s\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51 private_key;\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 public_key;\n}\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked;\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\n*libcrux_ml_kem_ind_cca_unpacked_public_key_11_68(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.clone_d7\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_ind_cca_unpacked_clone_d7_68(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_b6(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_5f *serialized\n);\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_b6(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SERIALIZED_KEY_LEN= 2400\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_7d *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_7d *serialized\n);\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_21(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n);\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_01(\n  Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_ind_cca_unpacked_default_30_68(void);\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_68(void);\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b8(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *out\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a7(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_ec *randomness\n);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_2b *ciphertext\n);\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_b6(Eurydice_arr_5f *public_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_52(Eurydice_arr_7d *private_key);\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_ba(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *_ciphertext\n);\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_b8(Eurydice_arr_c7 *randomness);\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_encapsulate_99(Eurydice_arr_5f *public_key, Eurydice_arr_ec *randomness);\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_mlkem_portable_H_DEFINED\n#endif /* internal_libcrux_mlkem_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/internal/libcrux_sha3_internal.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_libcrux_sha3_internal_H\n#define internal_libcrux_sha3_internal_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n#include \"../libcrux_sha3_internal.h\"\n\ntypedef Eurydice_arr_60 libcrux_sha3_Sha3_256Digest;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_libcrux_sha3_internal_H_DEFINED\n#endif /* internal_libcrux_sha3_internal_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_core.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_core.h\"\n\n/**\n Return 1 if `value` is not zero and 0 otherwise.\n*/\nstatic KRML_NOINLINE uint8_t inz(uint8_t value)\n{\n  uint16_t value0 = (uint16_t)value;\n  uint8_t result = (uint8_t)((uint32_t)core_num__u16__wrapping_add(~value0, 1U) >> 8U);\n  return (uint32_t)result & 1U;\n}\n\nstatic KRML_NOINLINE uint8_t is_non_zero(uint8_t value)\n{\n  return inz(value);\n}\n\n/**\n Return 1 if the bytes of `lhs` and `rhs` do not exactly\n match and 0 otherwise.\n*/\nstatic KRML_NOINLINE uint8_t\ncompare(Eurydice_mut_borrow_slice_u8 lhs, Eurydice_mut_borrow_slice_u8 rhs)\n{\n  uint8_t r = 0U;\n  for (size_t i = (size_t)0U; i < lhs.meta; i++)\n  {\n    size_t i0 = i;\n    uint8_t nr = (uint32_t)r | ((uint32_t)lhs.ptr[i0] ^ (uint32_t)rhs.ptr[i0]);\n    r = nr;\n  }\n  return is_non_zero(r);\n}\n\nKRML_NOINLINE uint8_t\nlibcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(\n  Eurydice_mut_borrow_slice_u8 lhs,\n  Eurydice_mut_borrow_slice_u8 rhs\n)\n{\n  return compare(lhs, rhs);\n}\n\n/**\n If `selector` is not zero, return the bytes in `rhs`; return the bytes in\n `lhs` otherwise.\n*/\nstatic KRML_NOINLINE Eurydice_arr_ec\nselect_ct(Eurydice_mut_borrow_slice_u8 lhs, Eurydice_mut_borrow_slice_u8 rhs, uint8_t selector)\n{\n  uint8_t mask = core_num__u8__wrapping_sub(is_non_zero(selector), 1U);\n  Eurydice_arr_ec out = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE; i++)\n  {\n    size_t i0 = i;\n    uint8_t\n    outi =\n      ((uint32_t)lhs.ptr[i0] & (uint32_t)mask) | ((uint32_t)rhs.ptr[i0] & (~(uint32_t)mask & 0xFFU));\n    out.data[i0] = outi;\n  }\n  return out;\n}\n\nKRML_NOINLINE Eurydice_arr_ec\nlibcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(\n  Eurydice_mut_borrow_slice_u8 lhs,\n  Eurydice_mut_borrow_slice_u8 rhs,\n  uint8_t selector\n)\n{\n  return select_ct(lhs, rhs, selector);\n}\n\nKRML_NOINLINE Eurydice_arr_ec\nlibcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(\n  Eurydice_mut_borrow_slice_u8 lhs_c,\n  Eurydice_mut_borrow_slice_u8 rhs_c,\n  Eurydice_mut_borrow_slice_u8 lhs_s,\n  Eurydice_mut_borrow_slice_u8 rhs_s\n)\n{\n  uint8_t\n  selector = libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(lhs_c, rhs_c);\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(lhs_s,\n      rhs_s,\n      selector);\n}\n\n/**\n K * BITS_PER_RING_ELEMENT / 8\n\n [eurydice] Note that we can't use const generics here because that breaks\n            C extraction with eurydice.\n*/\nsize_t libcrux_ml_kem_constants_ranked_bytes_per_ring_element(size_t rank)\n{\n  return rank * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types uint8_t\n\n*/\nstatic KRML_MUSTINLINE uint8_t classify_27_90(uint8_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types int16_t\n\n*/\nint16_t libcrux_secrets_int_public_integers_declassify_d8_39(int16_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nuint8_t libcrux_secrets_int_as_u8_f5(int16_t self)\n{\n  return classify_27_90((uint8_t)libcrux_secrets_int_public_integers_declassify_d8_39(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types int16_t\n\n*/\nint16_t libcrux_secrets_int_public_integers_classify_27_39(int16_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types uint8_t\n\n*/\nstatic KRML_MUSTINLINE uint8_t declassify_d8_90(uint8_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u8}\n*/\nint16_t libcrux_secrets_int_as_i16_59(uint8_t self)\n{\n  return libcrux_secrets_int_public_integers_classify_27_39((int16_t)declassify_d8_90(self));\n}\n\n/**\n Construct a public integer (identity)\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.secret\nwith types int16_t\n\n*/\nstatic KRML_MUSTINLINE int16_t secret_39(int16_t x)\n{\n  return x;\n}\n\nint16_t libcrux_secrets_int_I16(int16_t v)\n{\n  return secret_39(v);\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types int32_t\n\n*/\nstatic KRML_MUSTINLINE int32_t classify_27_a8(int32_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nint32_t libcrux_secrets_int_as_i32_f5(int16_t self)\n{\n  return classify_27_a8((int32_t)libcrux_secrets_int_public_integers_declassify_d8_39(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types int32_t\n\n*/\nstatic KRML_MUSTINLINE int32_t declassify_d8_a8(int32_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i32}\n*/\nint16_t libcrux_secrets_int_as_i16_36(int32_t self)\n{\n  return libcrux_secrets_int_public_integers_classify_27_39((int16_t)declassify_d8_a8(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types uint32_t\n\n*/\nstatic KRML_MUSTINLINE uint32_t declassify_d8_df(uint32_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u32}\n*/\nint32_t libcrux_secrets_int_as_i32_b8(uint32_t self)\n{\n  return classify_27_a8((int32_t)declassify_d8_df(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types uint16_t\n\n*/\nstatic KRML_MUSTINLINE uint16_t classify_27_de(uint16_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nuint16_t libcrux_secrets_int_as_u16_f5(int16_t self)\n{\n  return classify_27_de((uint16_t)libcrux_secrets_int_public_integers_declassify_d8_39(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types uint16_t\n\n*/\nstatic KRML_MUSTINLINE uint16_t declassify_d8_de(uint16_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u16}\n*/\nint16_t libcrux_secrets_int_as_i16_ca(uint16_t self)\n{\n  return libcrux_secrets_int_public_integers_classify_27_39((int16_t)declassify_d8_de(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types uint64_t\n\n*/\nstatic KRML_MUSTINLINE uint64_t classify_27_49(uint64_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u16}\n*/\nuint64_t libcrux_secrets_int_as_u64_ca(uint16_t self)\n{\n  return classify_27_49((uint64_t)declassify_d8_de(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types uint32_t\n\n*/\nuint32_t libcrux_secrets_int_public_integers_classify_27_df(uint32_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types uint64_t\n\n*/\nstatic KRML_MUSTINLINE uint64_t declassify_d8_49(uint64_t self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u64}\n*/\nuint32_t libcrux_secrets_int_as_u32_a3(uint64_t self)\n{\n  return libcrux_secrets_int_public_integers_classify_27_df((uint32_t)declassify_d8_49(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for u32}\n*/\nint16_t libcrux_secrets_int_as_i16_b8(uint32_t self)\n{\n  return libcrux_secrets_int_public_integers_classify_27_39((int16_t)declassify_d8_df(self));\n}\n\n/**\nThis function found in impl {libcrux_secrets::int::CastOps for i16}\n*/\nint16_t libcrux_secrets_int_as_i16_f5(int16_t self)\n{\n  return\n    libcrux_secrets_int_public_integers_classify_27_39(libcrux_secrets_int_public_integers_declassify_d8_39(self));\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 3168\n*/\nEurydice_arr_a8 libcrux_ml_kem_types_default_d3_0e(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_a8){ .data = { 0U } });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_to_mut_212(Eurydice_arr_d1 *a, size_t r)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 libcrux_ml_kem_types_from_51_d9(Eurydice_arr_d1 value)\n{\n  return value;\n}\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_types_from_17_70(Eurydice_arr_a8 sk, Eurydice_arr_d1 pk)\n{\n  return (KRML_CLITERAL(libcrux_ml_kem_mlkem1024_MlKem1024KeyPair){ .sk = sk, .pk = pk });\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 3168\n*/\nEurydice_arr_a8 libcrux_ml_kem_types_from_b2_0e(Eurydice_arr_a8 value)\n{\n  return value;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 3168\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d422(Eurydice_arr_a8 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1536\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_2f(Eurydice_arr_df *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1536U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 libcrux_ml_kem_types_from_19_d9(Eurydice_arr_d1 value)\n{\n  return value;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 *libcrux_ml_kem_types_as_slice_e6_d9(Eurydice_arr_d1 *self)\n{\n  return self;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 1568\n*/\nEurydice_arr_d1 *libcrux_ml_kem_types_as_slice_a9_d9(Eurydice_arr_d1 *self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 352\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d421(Eurydice_arr_e7 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 352\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_25(Eurydice_arr_e7 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)352U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 4\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_23(Eurydice_arr_890 *prf_inputs, uint8_t domain_separator)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    prf_inputs->data[i0].data[32U] = domain_separator;\n    domain_separator = (uint32_t)domain_separator + 1U;);\n  return domain_separator;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1600\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_720(Eurydice_arr_14 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1600U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_b50(Eurydice_arr_d1 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1568U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 1568\n*/\nEurydice_mut_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_d9(Eurydice_arr_d1 *self)\n{\n  return Eurydice_array_to_slice_mut_b50(self);\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1600\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f6(Eurydice_arr_14 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1600U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1600\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_mut_d420(Eurydice_arr_14 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 1600\n*/\nEurydice_arr_14 libcrux_ml_kem_utils_into_padded_array_49(Eurydice_mut_borrow_slice_u8 slice)\n{\n  Eurydice_arr_14 out = { .data = { 0U } };\n  Eurydice_slice_copy(array_to_subslice_mut_d420(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f5(Eurydice_arr_d1 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1568U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1568\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d419(Eurydice_arr_d1 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 3168\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_68(Eurydice_arr_a8 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)3168U;\n  return lit;\n}\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_mut_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_e3(Eurydice_mut_borrow_slice_u8 private_key)\n{\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(private_key,\n      (size_t)1536U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 secret_key0 = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(secret_key0,\n      (size_t)1568U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 secret_key = uu____1.snd;\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(secret_key,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____2.fst;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____2.snd;\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8_x4){\n        .fst = ind_cpa_secret_key,\n        .snd = ind_cpa_public_key,\n        .thd = ind_cpa_public_key_hash,\n        .f3 = implicit_rejection_value\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 2400\n*/\nEurydice_arr_7d libcrux_ml_kem_types_default_d3_79(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_7d){ .data = { 0U } });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_to_mut_211(Eurydice_arr_5f *a, size_t r)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 1184\n*/\nEurydice_arr_5f libcrux_ml_kem_types_from_51_3d(Eurydice_arr_5f value)\n{\n  return value;\n}\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_types_from_17_bc(Eurydice_arr_7d sk, Eurydice_arr_5f pk)\n{\n  return (KRML_CLITERAL(libcrux_ml_kem_mlkem768_MlKem768KeyPair){ .sk = sk, .pk = pk });\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 2400\n*/\nEurydice_arr_7d libcrux_ml_kem_types_from_b2_79(Eurydice_arr_7d value)\n{\n  return value;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 2400\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d418(Eurydice_arr_7d *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1152\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_f4(Eurydice_arr_0e *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1152U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f4(Eurydice_arr_5f *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1184U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d417(Eurydice_arr_5f *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 1088\n*/\nEurydice_arr_2b libcrux_ml_kem_types_from_19_52(Eurydice_arr_2b value)\n{\n  return value;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 1184\n*/\nEurydice_arr_5f *libcrux_ml_kem_types_as_slice_e6_3d(Eurydice_arr_5f *self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1184\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_ff(Eurydice_arr_5f *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1184U;\n  return lit;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 1088\n*/\nEurydice_arr_2b *libcrux_ml_kem_types_as_slice_a9_52(Eurydice_arr_2b *self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 3\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_78(Eurydice_arr_801 *prf_inputs, uint8_t domain_separator)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    prf_inputs->data[i0].data[32U] = domain_separator;\n    domain_separator = (uint32_t)domain_separator + 1U;);\n  return domain_separator;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1120\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_81(Eurydice_arr_af *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1120U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_06(Eurydice_arr_2b *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1088U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 1088\n*/\nEurydice_mut_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_52(Eurydice_arr_2b *self)\n{\n  return Eurydice_array_to_slice_mut_06(self);\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1120\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f3(Eurydice_arr_af *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1120U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1120\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_mut_d416(Eurydice_arr_af *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 1120\n*/\nEurydice_arr_af libcrux_ml_kem_utils_into_padded_array_66(Eurydice_mut_borrow_slice_u8 slice)\n{\n  Eurydice_arr_af out = { .data = { 0U } };\n  Eurydice_slice_copy(array_to_subslice_mut_d416(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f2(Eurydice_arr_2b *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)1088U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1088\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d415(Eurydice_arr_2b *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 2400\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_51(Eurydice_arr_7d *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2400U;\n  return lit;\n}\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_mut_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_64(Eurydice_mut_borrow_slice_u8 private_key)\n{\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(private_key,\n      (size_t)1152U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 secret_key0 = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(secret_key0,\n      (size_t)1184U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 secret_key = uu____1.snd;\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(secret_key,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____2.fst;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____2.snd;\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8_x4){\n        .fst = ind_cpa_secret_key,\n        .snd = ind_cpa_public_key,\n        .thd = ind_cpa_public_key_hash,\n        .f3 = implicit_rejection_value\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d44(Eurydice_arr_ec *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 32\n*/\nEurydice_arr_ec libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_mut_borrow_slice_u8 slice)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.default_d3\nwith const generics\n- SIZE= 1632\n*/\nEurydice_arr_ab0 libcrux_ml_kem_types_default_d3_be(void)\n{\n  return (KRML_CLITERAL(Eurydice_arr_ab0){ .data = { 0U } });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_to_mut_210(Eurydice_arr_03 *a, size_t r)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_51\nwith const generics\n- SIZE= 800\n*/\nEurydice_arr_03 libcrux_ml_kem_types_from_51_df(Eurydice_arr_03 value)\n{\n  return value;\n}\n\n/**\n Create a new [`MlKemKeyPair`] from the secret and public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_17\nwith const generics\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_types_from_17_d6(Eurydice_arr_ab0 sk, Eurydice_arr_03 pk)\n{\n  return (KRML_CLITERAL(libcrux_ml_kem_types_MlKemKeyPair_0d){ .sk = sk, .pk = pk });\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemPrivateKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_b2\nwith const generics\n- SIZE= 1632\n*/\nEurydice_arr_ab0 libcrux_ml_kem_types_from_b2_be(Eurydice_arr_ab0 value)\n{\n  return value;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 1632\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d414(Eurydice_arr_ab0 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 24\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_ed(Eurydice_arr_94 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)24U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 384\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d413(Eurydice_arr_b20 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 384\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_a9(Eurydice_arr_b20 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)384U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$32size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_ec core_result_unwrap_26_39(core_result_Result_07 self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nThis function found in impl {core::convert::From<[u8; SIZE]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.from_19\nwith const generics\n- SIZE= 768\n*/\nEurydice_arr_d2 libcrux_ml_kem_types_from_19_80(Eurydice_arr_d2 value)\n{\n  return value;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_e6\nwith const generics\n- SIZE= 800\n*/\nEurydice_arr_03 *libcrux_ml_kem_types_as_slice_e6_df(Eurydice_arr_03 *self)\n{\n  return self;\n}\n\n/**\n A reference to the raw byte slice.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_slice_a9\nwith const generics\n- SIZE= 768\n*/\nEurydice_arr_d2 *libcrux_ml_kem_types_as_slice_a9_80(Eurydice_arr_d2 *self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 10\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_30(Eurydice_arr_6d *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)10U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 22\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_98(Eurydice_arr_80 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)22U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 20\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_8f(Eurydice_arr_fc *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)20U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 320\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d412(Eurydice_arr_b0 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 320\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_56(Eurydice_arr_b0 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)320U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 128\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_78(Eurydice_arr_89 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)128U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types int16_t\nwith const generics\n- N= 256\n*/\nEurydice_mut_borrow_slice_i16 Eurydice_array_to_slice_mut_990(Eurydice_arr_04 *a)\n{\n  Eurydice_mut_borrow_slice_i16 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)256U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 192\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_d9(Eurydice_arr_1c *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)192U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 33\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_b5(Eurydice_arr_fa *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)33U;\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.utils.prf_input_inc\nwith const generics\n- K= 2\n*/\nuint8_t\nlibcrux_ml_kem_utils_prf_input_inc_af(Eurydice_arr_4d *prf_inputs, uint8_t domain_separator)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    prf_inputs->data[i0].data[32U] = domain_separator;\n    domain_separator = (uint32_t)domain_separator + 1U;);\n  return domain_separator;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 33\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d411(Eurydice_arr_fa *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 33\n*/\nEurydice_arr_fa libcrux_ml_kem_utils_into_padded_array_29(Eurydice_mut_borrow_slice_u8 slice)\n{\n  Eurydice_arr_fa out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d411(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 34\n*/\nstatic Eurydice_mut_borrow_slice_u8\narray_to_subslice_mut_d410(Eurydice_arr_31 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 34\n*/\nEurydice_arr_31 libcrux_ml_kem_utils_into_padded_array_de(Eurydice_mut_borrow_slice_u8 slice)\n{\n  Eurydice_arr_31 out = { .data = { 0U } };\n  Eurydice_slice_copy(array_to_subslice_mut_d410(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\nwith const generics\n- N= 272\n*/\nEurydice_mut_borrow_slice_i16\nEurydice_array_to_subslice_mut_e70(Eurydice_arr_5b *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_i16){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 504\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d49(Eurydice_arr_79 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 504\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_48(Eurydice_arr_79 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)504U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 34\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_e9(Eurydice_arr_31 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)34U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_slice_subslice_from_mut_6d(Eurydice_mut_borrow_slice_u8 s, size_t r)\n{\n  return (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = s.ptr + r, .meta = s.meta - r });\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_slice_subslice_to_mut_72(Eurydice_mut_borrow_slice_u8 s, size_t r)\n{\n  return (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = s.ptr, .meta = r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_3b(Eurydice_arr_03 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)800U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_27(Eurydice_arr_d2 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)768U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::convert::AsRef<[u8]> for libcrux_ml_kem::types::MlKemCiphertext<SIZE>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.as_ref_c1\nwith const generics\n- SIZE= 768\n*/\nEurydice_mut_borrow_slice_u8 libcrux_ml_kem_types_as_ref_c1_80(Eurydice_arr_d2 *self)\n{\n  return Eurydice_array_to_slice_mut_27(self);\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f1(Eurydice_arr_03 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)800U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 800\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d48(Eurydice_arr_03 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 800\n*/\nEurydice_arr_03 libcrux_ml_kem_utils_into_padded_array_df(Eurydice_mut_borrow_slice_u8 slice)\n{\n  Eurydice_arr_03 out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d48(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f0(Eurydice_arr_c7 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)64U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d47(Eurydice_arr_c7 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\n Pad the `slice` with `0`s at the end.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.utils.into_padded_array\nwith const generics\n- LEN= 64\n*/\nEurydice_arr_c7 libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_mut_borrow_slice_u8 slice)\n{\n  Eurydice_arr_c7 out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d47(&out,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = slice.meta })),\n    slice,\n    uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 2\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_82(Eurydice_array_u8x2 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)2U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_from_mut\nwith types uint8_t, core_ops_range_RangeFrom size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_from_mut_5f(Eurydice_arr_d2 *a, size_t r)\n{\n  return\n    (KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = a->data + r, .meta = (size_t)768U - r });\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 768\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d46(Eurydice_arr_d2 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 1632\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_99(Eurydice_arr_ab0 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)1632U;\n  return lit;\n}\n\n/**\n Unpack an incoming private key into it's different parts.\n\n We have this here in types to extract into a common core for C.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.types.unpack_private_key\nwith const generics\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_mut_borrow_slice_u8_x4\nlibcrux_ml_kem_types_unpack_private_key_e0(Eurydice_mut_borrow_slice_u8 private_key)\n{\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(private_key,\n      (size_t)768U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 secret_key0 = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(secret_key0,\n      (size_t)800U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 secret_key = uu____1.snd;\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____2 =\n    Eurydice_slice_split_at(secret_key,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____2.fst;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____2.snd;\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8_x4){\n        .fst = ind_cpa_secret_key,\n        .snd = ind_cpa_public_key,\n        .thd = ind_cpa_public_key_hash,\n        .f3 = implicit_rejection_value\n      }\n    );\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$24size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_94 core_result_unwrap_26_78(core_result_Result_57 self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$20size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_fc core_result_unwrap_26_7d(core_result_Result_83 self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$10size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_6d core_result_unwrap_26_63(core_result_Result_80 self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d45(Eurydice_arr_b2 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_29(Eurydice_arr_b2 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types int16_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_i16 Eurydice_array_to_slice_mut_8a(Eurydice_arr_d6 *a)\n{\n  Eurydice_mut_borrow_slice_i16 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)16U;\n  return lit;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$24size_t]]\n\n*/\nEurydice_arr_94 libcrux_secrets_int_public_integers_declassify_d8_40(Eurydice_arr_94 self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$20size_t]]\n\n*/\nEurydice_arr_fc libcrux_secrets_int_public_integers_declassify_d8_2b(Eurydice_arr_fc self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$10size_t]]\n\n*/\nEurydice_arr_6d libcrux_secrets_int_public_integers_declassify_d8_37(Eurydice_arr_6d self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$8size_t]]\n\n*/\nEurydice_array_u8x8\nlibcrux_secrets_int_public_integers_declassify_d8_52(Eurydice_array_u8x8 self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$2size_t]]\n\n*/\nEurydice_array_u8x2\nlibcrux_secrets_int_public_integers_declassify_d8_75(Eurydice_array_u8x2 self)\n{\n  return self;\n}\n\n/**\n Classify a mutable slice (identity)\n We define a separate function for this because hax has limited support for &mut-returning functions\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_mut_slice\nwith types Eurydice_dst_ref_mut uint8_t size_t\n\n*/\nEurydice_mut_borrow_slice_u8\nlibcrux_secrets_int_public_integers_classify_mut_slice_75(Eurydice_mut_borrow_slice_u8 x)\n{\n  return x;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Classify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.classify_27\nwith types Eurydice_arr int16_t[[$16size_t]]\n\n*/\nEurydice_arr_d6 libcrux_secrets_int_public_integers_classify_27_4b(Eurydice_arr_d6 self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr int16_t[[$16size_t]]\n\n*/\nEurydice_arr_d6 libcrux_secrets_int_public_integers_declassify_d8_4b(Eurydice_arr_d6 self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::ClassifyRef<&'a ([T])> for &'a ([T])}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_6d\nwith types uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nlibcrux_secrets_int_classify_public_classify_ref_6d_90(Eurydice_mut_borrow_slice_u8 self)\n{\n  return self;\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::Declassify<T> for T}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.public_integers.declassify_d8\nwith types Eurydice_arr uint8_t[[$22size_t]]\n\n*/\nEurydice_arr_80 libcrux_secrets_int_public_integers_declassify_d8_0b(Eurydice_arr_80 self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\nwith const generics\n- N= 16\n*/\nEurydice_mut_borrow_slice_i16\nEurydice_array_to_subslice_mut_e7(Eurydice_arr_d6 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_i16){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_secrets::traits::ClassifyRef<&'a ([T])> for &'a ([T])}\n*/\n/**\nA monomorphic instance of libcrux_secrets.int.classify_public.classify_ref_6d\nwith types int16_t\n\n*/\nEurydice_mut_borrow_slice_i16\nlibcrux_secrets_int_classify_public_classify_ref_6d_39(Eurydice_mut_borrow_slice_i16 self)\n{\n  return self;\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types int16_t, core_ops_range_Range size_t, Eurydice_derefed_slice int16_t\n\n*/\nEurydice_mut_borrow_slice_i16\nEurydice_slice_subslice_mut_a6(Eurydice_mut_borrow_slice_i16 s, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_i16){\n        .ptr = s.ptr + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr int16_t[[$16size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_arr_d6 core_result_unwrap_26_d3(core_result_Result_ec self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 64\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_17(Eurydice_arr_c7 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)64U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 48\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_9f(Eurydice_arr_65 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)48U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 32\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_01(Eurydice_arr_ec *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)32U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 28\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_5e(Eurydice_arr_a2 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)28U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_72(Eurydice_arr_c4 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)104U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 104\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d43(Eurydice_arr_c4 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_38(Eurydice_arr_f4 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)144U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 144\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d42(Eurydice_arr_f4 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_2c(Eurydice_arr_c5 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)168U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 168\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d41(Eurydice_arr_c5 *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_58(Eurydice_arr_ff *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)136U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 136\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d40(Eurydice_arr_ff *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_to_mut\nwith types uint8_t, core_ops_range_RangeTo size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_to_mut_21(Eurydice_array_u8x8 *a, size_t r)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = r;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 8\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_6e(Eurydice_array_u8x8 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)8U;\n  return lit;\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_mut_borrow_slice_u8 Eurydice_array_to_slice_mut_e2(Eurydice_arr_ab *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)72U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$8size_t]], core_array_TryFromSliceError\n\n*/\nEurydice_array_u8x8 core_result_unwrap_26_e0(core_result_Result_8e self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_slice_subslice_mut_c8(Eurydice_mut_borrow_slice_u8 s, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = s.ptr + r.start, .meta = r.end - r.start }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\nwith const generics\n- N= 72\n*/\nEurydice_mut_borrow_slice_u8\nEurydice_array_to_subslice_mut_d4(Eurydice_arr_ab *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){\n        .ptr = a->data + r.start,\n        .meta = r.end - r.start\n      }\n    );\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_core.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_core_H\n#define libcrux_core_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE ((size_t)32U)\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $32size_t\n*/\ntypedef struct Eurydice_arr_ec_s { uint8_t data[32U]; } Eurydice_arr_ec;\n\n#define LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT ((size_t)12U)\n\n#define LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT ((size_t)256U)\n\n#define LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)12U)\n\n#define LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE ((size_t)32U)\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $3168size_t\n*/\ntypedef struct Eurydice_arr_a8_s { uint8_t data[3168U]; } Eurydice_arr_a8;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1568size_t\n*/\ntypedef struct Eurydice_arr_d1_s { uint8_t data[1568U]; } Eurydice_arr_d1;\n\ntypedef struct libcrux_ml_kem_mlkem1024_MlKem1024KeyPair_s\n{\n  Eurydice_arr_a8 sk;\n  Eurydice_arr_d1 pk;\n}\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair;\n\n/**\nA monomorphic instance of n-tuple\nwith types libcrux_ml_kem_mlkem1024_MlKem1024Ciphertext, Eurydice_arr_ec\n\n*/\ntypedef struct tuple_25_s\n{\n  Eurydice_arr_d1 fst;\n  Eurydice_arr_ec snd;\n}\ntuple_25;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $2400size_t\n*/\ntypedef struct Eurydice_arr_7d_s { uint8_t data[2400U]; } Eurydice_arr_7d;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1184size_t\n*/\ntypedef struct Eurydice_arr_5f_s { uint8_t data[1184U]; } Eurydice_arr_5f;\n\ntypedef struct libcrux_ml_kem_mlkem768_MlKem768KeyPair_s\n{\n  Eurydice_arr_7d sk;\n  Eurydice_arr_5f pk;\n}\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1088size_t\n*/\ntypedef struct Eurydice_arr_2b_s { uint8_t data[1088U]; } Eurydice_arr_2b;\n\n/**\nA monomorphic instance of n-tuple\nwith types libcrux_ml_kem_mlkem768_MlKem768Ciphertext, Eurydice_arr_ec\n\n*/\ntypedef struct tuple_f4_s\n{\n  Eurydice_arr_2b fst;\n  Eurydice_arr_ec snd;\n}\ntuple_f4;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $168size_t\n*/\ntypedef struct Eurydice_arr_c5_s { uint8_t data[168U]; } Eurydice_arr_c5;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1632size_t\n*/\ntypedef struct Eurydice_arr_ab0_s { uint8_t data[1632U]; } Eurydice_arr_ab0;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $800size_t\n*/\ntypedef struct Eurydice_arr_03_s { uint8_t data[800U]; } Eurydice_arr_03;\n\n/**\nA monomorphic instance of libcrux_ml_kem.types.MlKemKeyPair\nwith const generics\n- $1632size_t\n- $800size_t\n*/\ntypedef struct libcrux_ml_kem_types_MlKemKeyPair_0d_s\n{\n  Eurydice_arr_ab0 sk;\n  Eurydice_arr_03 pk;\n}\nlibcrux_ml_kem_types_MlKemKeyPair_0d;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $24size_t\n*/\ntypedef struct Eurydice_arr_94_s { uint8_t data[24U]; } Eurydice_arr_94;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $768size_t\n*/\ntypedef struct Eurydice_arr_d2_s { uint8_t data[768U]; } Eurydice_arr_d2;\n\n/**\nA monomorphic instance of n-tuple\nwith types libcrux_ml_kem_types_MlKemCiphertext_6e, Eurydice_arr_ec\n\n*/\ntypedef struct tuple_ab_s\n{\n  Eurydice_arr_d2 fst;\n  Eurydice_arr_ec snd;\n}\ntuple_ab;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $10size_t\n*/\ntypedef struct Eurydice_arr_6d_s { uint8_t data[10U]; } Eurydice_arr_6d;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $22size_t\n*/\ntypedef struct Eurydice_arr_80_s { uint8_t data[22U]; } Eurydice_arr_80;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $20size_t\n*/\ntypedef struct Eurydice_arr_fc_s { uint8_t data[20U]; } Eurydice_arr_fc;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $64size_t\n*/\ntypedef struct Eurydice_arr_c7_s { uint8_t data[64U]; } Eurydice_arr_c7;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_b2_s { uint8_t data[16U]; } Eurydice_arr_b2;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int16_t\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_d6_s { int16_t data[16U]; } Eurydice_arr_d6;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_b2\nwith const generics\n- $256size_t\n*/\ntypedef struct Eurydice_arr_87_s { Eurydice_arr_b2 data[256U]; } Eurydice_arr_87;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $136size_t\n*/\ntypedef struct Eurydice_arr_ff_s { uint8_t data[136U]; } Eurydice_arr_ff;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_ff\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_0b_s { Eurydice_arr_ff data[1U]; } Eurydice_arr_0b;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_c5\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_88_s { Eurydice_arr_c5 data[1U]; } Eurydice_arr_88;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $48size_t\n*/\ntypedef struct Eurydice_arr_65_s { uint8_t data[48U]; } Eurydice_arr_65;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $28size_t\n*/\ntypedef struct Eurydice_arr_a2_s { uint8_t data[28U]; } Eurydice_arr_a2;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint64_t\nwith const generics\n- $5size_t\n*/\ntypedef struct Eurydice_arr_84_s { uint64_t data[5U]; } Eurydice_arr_84;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_mut_borrow_slice_u8\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_69_s { Eurydice_mut_borrow_slice_u8 data[1U]; } Eurydice_arr_69;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint64_t\nwith const generics\n- $25size_t\n*/\ntypedef struct Eurydice_arr_7c_s { uint64_t data[25U]; } Eurydice_arr_7c;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint64_t\nwith const generics\n- $24size_t\n*/\ntypedef struct Eurydice_arr_22_s { uint64_t data[24U]; } Eurydice_arr_22;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_core_H_DEFINED\n#endif /* libcrux_core_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem1024.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem1024_H\n#define libcrux_mlkem1024_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n#define LIBCRUX_ML_KEM_MLKEM1024_VECTOR_U_COMPRESSION_FACTOR ((size_t)11U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_C1_BLOCK_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM1024_VECTOR_U_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_RANK ((size_t)4U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_C1_SIZE (LIBCRUX_ML_KEM_MLKEM1024_C1_BLOCK_SIZE * LIBCRUX_ML_KEM_MLKEM1024_RANK)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_VECTOR_V_COMPRESSION_FACTOR ((size_t)5U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_C2_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM1024_VECTOR_V_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_CIPHERTEXT_SIZE (LIBCRUX_ML_KEM_MLKEM1024_C1_SIZE + LIBCRUX_ML_KEM_MLKEM1024_C2_SIZE)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_T_AS_NTT_ENCODED_SIZE (LIBCRUX_ML_KEM_MLKEM1024_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_PUBLIC_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM1024_T_AS_NTT_ENCODED_SIZE + (size_t)32U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM1024_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_ETA1 ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_ETA1_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM1024_ETA1 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_ETA2 ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_ETA2_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM1024_ETA2 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_IMPLICIT_REJECTION_HASH_INPUT_SIZE (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE + LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_CIPHERTEXT_SIZE)\n\ntypedef Eurydice_arr_a8 libcrux_ml_kem_mlkem1024_MlKem1024PrivateKey;\n\ntypedef Eurydice_arr_d1 libcrux_ml_kem_mlkem1024_MlKem1024PublicKey;\n\n#define LIBCRUX_ML_KEM_MLKEM1024_RANKED_BYTES_PER_RING_ELEMENT (LIBCRUX_ML_KEM_MLKEM1024_RANK * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM1024_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_SECRET_KEY_SIZE + LIBCRUX_ML_KEM_MLKEM1024_CPA_PKE_PUBLIC_KEY_SIZE + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE)\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem1024_H_DEFINED\n#endif /* libcrux_mlkem1024_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem1024_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem1024_avx2.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_avx2.h\"\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate_avx2\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_85(Eurydice_arr_a8 *private_key, Eurydice_arr_d1 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_660(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic Eurydice_arr_ec\ndecapsulate_85(Eurydice_arr_a8 *private_key, Eurydice_arr_d1 *ciphertext)\n{\n  return decapsulate_avx2_85(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 1024\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem1024PrivateKey`] and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_avx2_decapsulate(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  return decapsulate_85(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate_avx2\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_25 encapsulate_avx2_07(Eurydice_arr_d1 *public_key, Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_a10(public_key, randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_25 encapsulate_07(Eurydice_arr_d1 *public_key, Eurydice_arr_ec *randomness)\n{\n  return encapsulate_avx2_07(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 1024\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem1024PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_avx2_encapsulate(\n  Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_07(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair_avx2\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem1024_MlKem1024KeyPair\ngenerate_keypair_avx2_b3(Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_db0(randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem1024_MlKem1024KeyPair\ngenerate_keypair_b3(Eurydice_arr_c7 *randomness)\n{\n  return generate_keypair_avx2_b3(randomness);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_mlkem1024_avx2_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_b3(&randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_avx2\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nstatic bool\nvalidate_private_key_avx2_43(Eurydice_arr_a8 *private_key, Eurydice_arr_d1 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_b3(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nstatic bool validate_private_key_43(Eurydice_arr_a8 *private_key, Eurydice_arr_d1 *ciphertext)\n{\n  return validate_private_key_avx2_43(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_avx2_validate_private_key(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  return validate_private_key_43(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_only\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_f5(Eurydice_arr_a8 *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_f8(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_avx2_validate_private_key_only(Eurydice_arr_a8 *private_key)\n{\n  return validate_private_key_only_f5(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key_avx2\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic bool validate_public_key_avx2_f5(Eurydice_arr_d1 *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_74(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic bool validate_public_key_f5(Eurydice_arr_d1 *public_key)\n{\n  return validate_public_key_avx2_f5(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_avx2_validate_public_key(Eurydice_arr_d1 *public_key)\n{\n  return validate_public_key_f5(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate_avx2\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_850(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_d90(key_pair, ciphertext);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic Eurydice_arr_ec\ndecapsulate_850(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  return decapsulate_avx2_850(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 1024 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem1024KeyPairUnpacked`]\n and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *private_key,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  return decapsulate_850(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate_avx2\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_25\nencapsulate_avx2_070(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a80(public_key, randomness);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_25\nencapsulate_070(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  return encapsulate_avx2_070(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 1024 (unpacked)\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem1024PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n TODO: The F* prefix opens required modules, it should go away when the following issue is resolved:\n <https://github.com/hacspec/hax/issues/770>\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_070(public_key, &randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair_avx2\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic void\ngenerate_keypair_avx2_b30(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_db0(randomness, out);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic void\ngenerate_keypair_b30(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *out\n)\n{\n  generate_keypair_avx2_b30(randomness, out);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_b30(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_5b();\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_5b();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_5b();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.keypair_from_private_key\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_39(\n  Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_b2(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_39(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_f8(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_a8 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_f8(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_74(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_74(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_74(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key_avx2\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic void\nunpack_public_key_avx2_43(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a0(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic void\nunpack_public_key_43(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  unpack_public_key_avx2_43(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_unpacked_public_key(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  unpack_public_key_43(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem1024_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem1024_avx2_H\n#define libcrux_mlkem1024_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 1024\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem1024PrivateKey`] and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_avx2_decapsulate(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 1024\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem1024PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_avx2_encapsulate(\n  Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 1024 Key Pair\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_mlkem1024_avx2_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_avx2_validate_private_key(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_avx2_validate_private_key_only(Eurydice_arr_a8 *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_avx2_validate_public_key(Eurydice_arr_d1 *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem1024_avx2_H_DEFINED\n#endif /* libcrux_mlkem1024_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem1024_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem1024_portable.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_portable.h\"\n\n/**\n Portable decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.decapsulate\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic Eurydice_arr_ec\ndecapsulate_85(Eurydice_arr_a8 *private_key, Eurydice_arr_d1 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_fd1(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 1024\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem1024PrivateKey`] and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_portable_decapsulate(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  return decapsulate_85(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.encapsulate\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_25 encapsulate_07(Eurydice_arr_d1 *public_key, Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_991(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 1024\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem1024PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_portable_encapsulate(\n  Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_07(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.generate_keypair\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem1024_MlKem1024KeyPair\ngenerate_keypair_b3(Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_b81(randomness);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_mlkem1024_portable_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_b3(&randomness);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE bool\nvalidate_private_key_43(Eurydice_arr_a8 *private_key, Eurydice_arr_d1 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_79(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_portable_validate_private_key(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  return validate_private_key_43(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key_only\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_f5(Eurydice_arr_a8 *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_4c(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_portable_validate_private_key_only(Eurydice_arr_a8 *private_key)\n{\n  return validate_private_key_only_f5(private_key);\n}\n\n/**\n Public key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_public_key\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE bool validate_public_key_f5(Eurydice_arr_d1 *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_1c(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_portable_validate_public_key(Eurydice_arr_d1 *public_key)\n{\n  return validate_public_key_f5(public_key);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.decapsulate\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecapsulate_850(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_0c1(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 1024 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem1024KeyPairUnpacked`]\n and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_portable_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *private_key,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  return decapsulate_850(private_key, ciphertext);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.encapsulate\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_25\nencapsulate_070(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a71(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 1024 (unpacked)\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem1024PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n TODO: The F* prefix opens required modules, it should go away when the following issue is resolved:\n <https://github.com/hacspec/hax/issues/770>\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_portable_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_070(public_key, &randomness);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.generate_keypair\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_b30(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_b81(randomness, out);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_b30(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 1024 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_ee();\n  libcrux_ml_kem_mlkem1024_portable_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_mlkem1024_portable_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_ee();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94\nlibcrux_ml_kem_mlkem1024_portable_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_ee();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.keypair_from_private_key\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_39(\n  Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_38(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_39(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_2e(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_a8 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_2e(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_1c(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_1c(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_1c(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.unpack_public_key\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE void\nunpack_public_key_43(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_29(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem1024_portable_unpacked_unpacked_public_key(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *unpacked_public_key\n)\n{\n  unpack_public_key_43(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem1024_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem1024_portable_H\n#define libcrux_mlkem1024_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 1024\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem1024PrivateKey`] and an [`MlKem1024Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem1024_portable_decapsulate(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 1024\n\n Generates an ([`MlKem1024Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem1024PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_25\nlibcrux_ml_kem_mlkem1024_portable_encapsulate(\n  Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 1024 Key Pair\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_mlkem1024_portable_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem1024_portable_validate_private_key(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_portable_validate_private_key_only(Eurydice_arr_a8 *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem1024_portable_validate_public_key(Eurydice_arr_d1 *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem1024_portable_H_DEFINED\n#endif /* libcrux_mlkem1024_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem512.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem512_H\n#define libcrux_mlkem512_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n#define LIBCRUX_ML_KEM_MLKEM512_VECTOR_U_COMPRESSION_FACTOR ((size_t)10U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_C1_BLOCK_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM512_VECTOR_U_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_RANK ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_C1_SIZE (LIBCRUX_ML_KEM_MLKEM512_C1_BLOCK_SIZE * LIBCRUX_ML_KEM_MLKEM512_RANK)\n\n#define LIBCRUX_ML_KEM_MLKEM512_VECTOR_V_COMPRESSION_FACTOR ((size_t)4U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_C2_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM512_VECTOR_V_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_CIPHERTEXT_SIZE (LIBCRUX_ML_KEM_MLKEM512_C1_SIZE + LIBCRUX_ML_KEM_MLKEM512_C2_SIZE)\n\n#define LIBCRUX_ML_KEM_MLKEM512_T_AS_NTT_ENCODED_SIZE (LIBCRUX_ML_KEM_MLKEM512_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_PUBLIC_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM512_T_AS_NTT_ENCODED_SIZE + (size_t)32U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM512_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_ETA1 ((size_t)3U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_ETA1_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM512_ETA1 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_ETA2 ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_ETA2_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM512_ETA2 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_IMPLICIT_REJECTION_HASH_INPUT_SIZE (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE + LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_CIPHERTEXT_SIZE)\n\ntypedef Eurydice_arr_d2 libcrux_ml_kem_mlkem512_MlKem512Ciphertext;\n\ntypedef libcrux_ml_kem_types_MlKemKeyPair_0d libcrux_ml_kem_mlkem512_MlKem512KeyPair;\n\ntypedef Eurydice_arr_ab0 libcrux_ml_kem_mlkem512_MlKem512PrivateKey;\n\ntypedef Eurydice_arr_03 libcrux_ml_kem_mlkem512_MlKem512PublicKey;\n\n#define LIBCRUX_ML_KEM_MLKEM512_RANKED_BYTES_PER_RING_ELEMENT (LIBCRUX_ML_KEM_MLKEM512_RANK * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM512_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_SECRET_KEY_SIZE + LIBCRUX_ML_KEM_MLKEM512_CPA_PKE_PUBLIC_KEY_SIZE + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE)\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem512_H_DEFINED\n#endif /* libcrux_mlkem512_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem512_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem512_avx2.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_avx2.h\"\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate_avx2\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_37(Eurydice_arr_ab0 *private_key, Eurydice_arr_d2 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_66(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic Eurydice_arr_ec\ndecapsulate_37(Eurydice_arr_ab0 *private_key, Eurydice_arr_d2 *ciphertext)\n{\n  return decapsulate_avx2_37(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 512\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem512PrivateKey`] and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_avx2_decapsulate(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  return decapsulate_37(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate_avx2\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_ab encapsulate_avx2_80(Eurydice_arr_03 *public_key, Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_a1(public_key, randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_ab encapsulate_80(Eurydice_arr_03 *public_key, Eurydice_arr_ec *randomness)\n{\n  return encapsulate_avx2_80(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 512\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem512PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_avx2_encapsulate(\n  Eurydice_arr_03 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_80(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair_avx2\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic libcrux_ml_kem_types_MlKemKeyPair_0d\ngenerate_keypair_avx2_b8(Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_db(randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic libcrux_ml_kem_types_MlKemKeyPair_0d generate_keypair_b8(Eurydice_arr_c7 *randomness)\n{\n  return generate_keypair_avx2_b8(randomness);\n}\n\n/**\n Generate ML-KEM 512 Key Pair\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_mlkem512_avx2_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_b8(&randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_avx2\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nstatic bool\nvalidate_private_key_avx2_25(Eurydice_arr_ab0 *private_key, Eurydice_arr_d2 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_85(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nstatic bool validate_private_key_25(Eurydice_arr_ab0 *private_key, Eurydice_arr_d2 *ciphertext)\n{\n  return validate_private_key_avx2_25(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_avx2_validate_private_key(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  return validate_private_key_25(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_only\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_d5(Eurydice_arr_ab0 *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_37(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_avx2_validate_private_key_only(Eurydice_arr_ab0 *private_key)\n{\n  return validate_private_key_only_d5(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key_avx2\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic bool validate_public_key_avx2_d5(Eurydice_arr_03 *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_ce(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic bool validate_public_key_d5(Eurydice_arr_03 *public_key)\n{\n  return validate_public_key_avx2_d5(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_avx2_validate_public_key(Eurydice_arr_03 *public_key)\n{\n  return validate_public_key_d5(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate_avx2\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_370(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_d9(key_pair, ciphertext);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic Eurydice_arr_ec\ndecapsulate_370(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  return decapsulate_avx2_370(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 512 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem512KeyPairUnpacked`]\n and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_avx2_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *private_key,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  return decapsulate_370(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate_avx2\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_ab\nencapsulate_avx2_800(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a8(public_key, randomness);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_ab\nencapsulate_800(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  return encapsulate_avx2_800(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 512 (unpacked)\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem512PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_avx2_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_800(public_key, &randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair_avx2\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic void\ngenerate_keypair_avx2_b80(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_db(randomness, out);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic void\ngenerate_keypair_b80(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *out\n)\n{\n  generate_keypair_avx2_b80(randomness, out);\n}\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_b80(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_16();\n  libcrux_ml_kem_mlkem512_avx2_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_avx2_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_16();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7\nlibcrux_ml_kem_mlkem512_avx2_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_16();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.keypair_from_private_key\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_c3(\n  Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_a4(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_c3(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_4e(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_4e(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_03\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_ce(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_ce(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_ce(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key_avx2\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic void\nunpack_public_key_avx2_25(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic void\nunpack_public_key_25(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  unpack_public_key_avx2_25(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_avx2_unpacked_unpacked_public_key(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  unpack_public_key_25(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem512_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem512_avx2_H\n#define libcrux_mlkem512_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 512\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem512PrivateKey`] and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_avx2_decapsulate(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 512\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem512PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_avx2_encapsulate(\n  Eurydice_arr_03 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 512 Key Pair\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_mlkem512_avx2_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_avx2_validate_private_key(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_avx2_validate_private_key_only(Eurydice_arr_ab0 *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_avx2_validate_public_key(Eurydice_arr_03 *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem512_avx2_H_DEFINED\n#endif /* libcrux_mlkem512_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem512_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem512_portable.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_portable.h\"\n\n/**\n Portable decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.decapsulate\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic Eurydice_arr_ec\ndecapsulate_37(Eurydice_arr_ab0 *private_key, Eurydice_arr_d2 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_fd0(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 512\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem512PrivateKey`] and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_portable_decapsulate(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  return decapsulate_37(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.encapsulate\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_ab encapsulate_80(Eurydice_arr_03 *public_key, Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_990(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 512\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem512PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_portable_encapsulate(\n  Eurydice_arr_03 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_80(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.generate_keypair\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic libcrux_ml_kem_types_MlKemKeyPair_0d generate_keypair_b8(Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_b80(randomness);\n}\n\n/**\n Generate ML-KEM 512 Key Pair\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_mlkem512_portable_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_b8(&randomness);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nstatic KRML_MUSTINLINE bool\nvalidate_private_key_25(Eurydice_arr_ab0 *private_key, Eurydice_arr_d2 *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_d5(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_portable_validate_private_key(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  return validate_private_key_25(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key_only\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_d5(Eurydice_arr_ab0 *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_e2(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_portable_validate_private_key_only(Eurydice_arr_ab0 *private_key)\n{\n  return validate_private_key_only_d5(private_key);\n}\n\n/**\n Public key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_public_key\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE bool validate_public_key_d5(Eurydice_arr_03 *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_53(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_portable_validate_public_key(Eurydice_arr_03 *public_key)\n{\n  return validate_public_key_d5(public_key);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.decapsulate\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecapsulate_370(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_0c0(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 512 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem512KeyPairUnpacked`]\n and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_portable_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *private_key,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  return decapsulate_370(private_key, ciphertext);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.encapsulate\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_ab\nencapsulate_800(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a70(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 512 (unpacked)\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem512PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_portable_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_800(public_key, &randomness);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.generate_keypair\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_b80(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_b80(randomness, out);\n}\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_b80(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 512 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_66();\n  libcrux_ml_kem_mlkem512_portable_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_mlkem512_portable_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_66();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b\nlibcrux_ml_kem_mlkem512_portable_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_66();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.keypair_from_private_key\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_c3(\n  Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_71(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_c3(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_a3(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_a3(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_03\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_53(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_53(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_53(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.unpack_public_key\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE void\nunpack_public_key_25(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_e0(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem512_portable_unpacked_unpacked_public_key(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *unpacked_public_key\n)\n{\n  unpack_public_key_25(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem512_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem512_portable_H\n#define libcrux_mlkem512_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 512\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem512PrivateKey`] and an [`MlKem512Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem512_portable_decapsulate(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 512\n\n Generates an ([`MlKem512Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem512PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_ab\nlibcrux_ml_kem_mlkem512_portable_encapsulate(\n  Eurydice_arr_03 *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 512 Key Pair\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_mlkem512_portable_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem512_portable_validate_private_key(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_portable_validate_private_key_only(Eurydice_arr_ab0 *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem512_portable_validate_public_key(Eurydice_arr_03 *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem512_portable_H_DEFINED\n#endif /* libcrux_mlkem512_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem768.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem768_H\n#define libcrux_mlkem768_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n#define LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR ((size_t)10U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_RANK ((size_t)3U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_C1_SIZE (LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE * LIBCRUX_ML_KEM_MLKEM768_RANK)\n\n#define LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR ((size_t)4U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_C2_SIZE (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE (LIBCRUX_ML_KEM_MLKEM768_C1_SIZE + LIBCRUX_ML_KEM_MLKEM768_C2_SIZE)\n\n#define LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE (LIBCRUX_ML_KEM_MLKEM768_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE + (size_t)32U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM768_RANK * LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_ETA1 ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_ETA1_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM768_ETA1 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_ETA2 ((size_t)2U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_ETA2_RANDOMNESS_SIZE (LIBCRUX_ML_KEM_MLKEM768_ETA2 * (size_t)64U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_IMPLICIT_REJECTION_HASH_INPUT_SIZE (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE + LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE)\n\ntypedef Eurydice_arr_7d libcrux_ml_kem_mlkem768_MlKem768PrivateKey;\n\ntypedef Eurydice_arr_5f libcrux_ml_kem_mlkem768_MlKem768PublicKey;\n\n#define LIBCRUX_ML_KEM_MLKEM768_RANKED_BYTES_PER_RING_ELEMENT (LIBCRUX_ML_KEM_MLKEM768_RANK * LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)\n\n#define LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE (LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE + LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE)\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem768_H_DEFINED\n#endif /* libcrux_mlkem768_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem768_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem768_avx2.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_avx2.h\"\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate_avx2\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_19(Eurydice_arr_7d *private_key, Eurydice_arr_2b *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_661(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.decapsulate\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic Eurydice_arr_ec\ndecapsulate_19(Eurydice_arr_7d *private_key, Eurydice_arr_2b *ciphertext)\n{\n  return decapsulate_avx2_19(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 768\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem768PrivateKey`] and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_avx2_decapsulate(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  return decapsulate_19(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate_avx2\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_f4 encapsulate_avx2_26(Eurydice_arr_5f *public_key, Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_a11(public_key, randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.encapsulate\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_f4 encapsulate_26(Eurydice_arr_5f *public_key, Eurydice_arr_ec *randomness)\n{\n  return encapsulate_avx2_26(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 768\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_avx2_encapsulate(\n  Eurydice_arr_5f *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_26(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair_avx2\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem768_MlKem768KeyPair\ngenerate_keypair_avx2_e9(Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_db1(randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.generate_keypair\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem768_MlKem768KeyPair generate_keypair_e9(Eurydice_arr_c7 *randomness)\n{\n  return generate_keypair_avx2_e9(randomness);\n}\n\n/**\n Generate ML-KEM 768 Key Pair\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_mlkem768_avx2_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_e9(&randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_avx2\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nstatic bool\nvalidate_private_key_avx2_d3(Eurydice_arr_7d *private_key, Eurydice_arr_2b *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_d50(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nstatic bool validate_private_key_d3(Eurydice_arr_7d *private_key, Eurydice_arr_2b *ciphertext)\n{\n  return validate_private_key_avx2_d3(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_avx2_validate_private_key(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  return validate_private_key_d3(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_private_key_only\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_3b(Eurydice_arr_7d *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_a4(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_avx2_validate_private_key_only(Eurydice_arr_7d *private_key)\n{\n  return validate_private_key_only_3b(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key_avx2\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic bool validate_public_key_avx2_3b(Eurydice_arr_5f *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_79(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.validate_public_key\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic bool validate_public_key_3b(Eurydice_arr_5f *public_key)\n{\n  return validate_public_key_avx2_3b(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_avx2_validate_public_key(Eurydice_arr_5f *public_key)\n{\n  return validate_public_key_3b(public_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate_avx2\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic Eurydice_arr_ec\ndecapsulate_avx2_190(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_d91(key_pair, ciphertext);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.decapsulate\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic Eurydice_arr_ec\ndecapsulate_190(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  return decapsulate_avx2_190(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 768 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem768KeyPairUnpacked`]\n and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_avx2_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *private_key,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  return decapsulate_190(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate_avx2\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_f4\nencapsulate_avx2_260(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a81(public_key, randomness);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.encapsulate\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_f4\nencapsulate_260(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  return encapsulate_avx2_260(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 768 (unpacked)\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem768PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_avx2_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_260(public_key, &randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair_avx2\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic void\ngenerate_keypair_avx2_e90(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_db1(randomness, out);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.generate_keypair\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic void\ngenerate_keypair_e90(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *out\n)\n{\n  generate_keypair_avx2_e90(randomness, out);\n}\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_e90(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_avx2_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_e3();\n  libcrux_ml_kem_mlkem768_avx2_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_avx2_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_e3();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_mlkem768_avx2_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_e3();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.keypair_from_private_key\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_71(\n  Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_3e(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_71(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_d4(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_7d *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_d4(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_79(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_79(key_pair, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_public_key(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *pk\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\n  uu____0 =\n    libcrux_ml_kem_ind_cca_unpacked_clone_d7_e3(libcrux_ml_kem_ind_cca_unpacked_public_key_11_e3(key_pair));\n  pk[0U] = uu____0;\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_79(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key_avx2\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic void\nunpack_public_key_avx2_d3(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a1(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.avx2.unpacked.unpack_public_key\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic void\nunpack_public_key_d3(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  unpack_public_key_avx2_d3(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_avx2_unpacked_unpacked_public_key(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  unpack_public_key_d3(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem768_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem768_avx2_H\n#define libcrux_mlkem768_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 768\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem768PrivateKey`] and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_avx2_decapsulate(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 768\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_avx2_encapsulate(\n  Eurydice_arr_5f *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 768 Key Pair\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_mlkem768_avx2_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_avx2_validate_private_key(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_avx2_validate_private_key_only(Eurydice_arr_7d *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_avx2_validate_public_key(Eurydice_arr_5f *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem768_avx2_H_DEFINED\n#endif /* libcrux_mlkem768_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem768_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem768_portable.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_portable.h\"\n\n/**\n Portable decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.decapsulate\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic Eurydice_arr_ec\ndecapsulate_19(Eurydice_arr_7d *private_key, Eurydice_arr_2b *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_decapsulate_fd(private_key, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 768\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem768PrivateKey`] and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_portable_decapsulate(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  return decapsulate_19(private_key, ciphertext);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.encapsulate\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic tuple_f4 encapsulate_26(Eurydice_arr_5f *public_key, Eurydice_arr_ec *randomness)\n{\n  return libcrux_ml_kem_ind_cca_encapsulate_99(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 768\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_portable_encapsulate(\n  Eurydice_arr_5f *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_26(public_key, &randomness);\n}\n\n/**\n Portable generate key pair.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.generate_keypair\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic libcrux_ml_kem_mlkem768_MlKem768KeyPair generate_keypair_e9(Eurydice_arr_c7 *randomness)\n{\n  return libcrux_ml_kem_ind_cca_generate_keypair_b8(randomness);\n}\n\n/**\n Generate ML-KEM 768 Key Pair\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_mlkem768_portable_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  return generate_keypair_e9(&randomness);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nstatic KRML_MUSTINLINE bool\nvalidate_private_key_d3(Eurydice_arr_7d *private_key, Eurydice_arr_2b *ciphertext)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_ba(private_key, ciphertext);\n}\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_portable_validate_private_key(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  return validate_private_key_d3(private_key, ciphertext);\n}\n\n/**\n Private key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key_only\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nstatic KRML_MUSTINLINE bool validate_private_key_only_3b(Eurydice_arr_7d *private_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_52(private_key);\n}\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_portable_validate_private_key_only(Eurydice_arr_7d *private_key)\n{\n  return validate_private_key_only_3b(private_key);\n}\n\n/**\n Public key validation\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.validate_public_key\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE bool validate_public_key_3b(Eurydice_arr_5f *public_key)\n{\n  return libcrux_ml_kem_ind_cca_validate_public_key_b6(public_key);\n}\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_portable_validate_public_key(Eurydice_arr_5f *public_key)\n{\n  return validate_public_key_3b(public_key);\n}\n\n/**\n Unpacked decapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.decapsulate\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecapsulate_190(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_decapsulate_0c(key_pair, ciphertext);\n}\n\n/**\n Decapsulate ML-KEM 768 (unpacked)\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an unpacked key pair of type [`MlKem768KeyPairUnpacked`]\n and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_portable_unpacked_decapsulate(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *private_key,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  return decapsulate_190(private_key, ciphertext);\n}\n\n/**\n Unpacked encapsulate\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.encapsulate\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_f4\nencapsulate_260(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_encapsulate_a7(public_key, randomness);\n}\n\n/**\n Encapsulate ML-KEM 768 (unpacked)\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an unpacked public key of type [`MlKem768PublicKeyUnpacked`],\n the SHA3-256 hash of this public key, and [`SHARED_SECRET_SIZE`] bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_portable_unpacked_encapsulate(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_ec randomness\n)\n{\n  return encapsulate_260(public_key, &randomness);\n}\n\n/**\n Generate a key pair\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.generate_keypair\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_e90(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *out\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_generate_keypair_b8(randomness, out);\n}\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair_mut(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  generate_keypair_e90(randomness, key_pair);\n}\n\n/**\n Generate ML-KEM 768 Key Pair in \"unpacked\" form.\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair(Eurydice_arr_c7 randomness)\n{\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\n  key_pair = libcrux_ml_kem_ind_cca_unpacked_default_7b_68();\n  libcrux_ml_kem_mlkem768_portable_unpacked_generate_key_pair_mut(randomness, &key_pair);\n  return key_pair;\n}\n\n/**\n Create a new, empty unpacked key.\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_mlkem768_portable_unpacked_init_key_pair(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_7b_68();\n}\n\n/**\n Create a new, empty unpacked public key.\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_mlkem768_portable_unpacked_init_public_key(void)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_default_30_68();\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.keypair_from_private_key\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE void\nkeypair_from_private_key_71(\n  Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_01(private_key, key_pair);\n}\n\n/**\n Get an unpacked key from a private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_from_private_mut(\n  Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  keypair_from_private_key_71(private_key, key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_private_key(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_21(key_pair);\n}\n\n/**\n Get the serialized private key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_private_key_mut(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_7d *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(key_pair, serialized);\n}\n\n/**\n Get the serialized public key.\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_public_key(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  return libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_b6(key_pair);\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_key_pair_serialized_public_key_mut(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_b6(key_pair, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_public_key(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *pk\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\n  uu____0 =\n    libcrux_ml_kem_ind_cca_unpacked_clone_d7_68(libcrux_ml_kem_ind_cca_unpacked_public_key_11_68(key_pair));\n  pk[0U] = uu____0;\n}\n\n/**\n Get the serialized public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_serialized_public_key(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(public_key, serialized);\n}\n\n/**\n Get the unpacked public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.instantiations.portable.unpacked.unpack_public_key\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE void\nunpack_public_key_d3(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_unpack_public_key_22(public_key, unpacked_public_key);\n}\n\n/**\n Get the unpacked public key.\n*/\nvoid\nlibcrux_ml_kem_mlkem768_portable_unpacked_unpacked_public_key(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key\n)\n{\n  unpack_public_key_d3(public_key, unpacked_public_key);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem768_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem768_portable_H\n#define libcrux_mlkem768_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\n Decapsulate ML-KEM 768\n\n Generates an [`MlKemSharedSecret`].\n The input is a reference to an [`MlKem768PrivateKey`] and an [`MlKem768Ciphertext`].\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_mlkem768_portable_decapsulate(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n);\n\n/**\n Encapsulate ML-KEM 768\n\n Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.\n The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]\n bytes of `randomness`.\n*/\ntuple_f4\nlibcrux_ml_kem_mlkem768_portable_encapsulate(\n  Eurydice_arr_5f *public_key,\n  Eurydice_arr_ec randomness\n);\n\n/**\n Generate ML-KEM 768 Key Pair\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_mlkem768_portable_generate_key_pair(Eurydice_arr_c7 randomness);\n\n/**\n Validate a private key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool\nlibcrux_ml_kem_mlkem768_portable_validate_private_key(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n);\n\n/**\n Validate the private key only.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_portable_validate_private_key_only(Eurydice_arr_7d *private_key);\n\n/**\n Validate a public key.\n\n Returns `true` if valid, and `false` otherwise.\n*/\nbool libcrux_ml_kem_mlkem768_portable_validate_public_key(Eurydice_arr_5f *public_key);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem768_portable_H_DEFINED\n#endif /* libcrux_mlkem768_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem_avx2.h\"\n\n#include \"libcrux_sha3_portable.h\"\n#include \"libcrux_sha3_avx2.h\"\n#include \"libcrux_mlkem_portable.h\"\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_mlkem_portable.h\"\n#include \"internal/libcrux_core.h\"\n\nKRML_MUSTINLINE Eurydice_arr_c7\nlibcrux_ml_kem_hash_functions_avx2_G(Eurydice_mut_borrow_slice_u8 input)\n{\n  Eurydice_arr_c7 digest = { .data = { 0U } };\n  libcrux_sha3_portable_sha512(Eurydice_array_to_slice_mut_17(&digest), input);\n  return digest;\n}\n\nKRML_MUSTINLINE Eurydice_arr_ec\nlibcrux_ml_kem_hash_functions_avx2_H(Eurydice_mut_borrow_slice_u8 input)\n{\n  Eurydice_arr_ec digest = { .data = { 0U } };\n  libcrux_sha3_portable_sha256(Eurydice_array_to_slice_mut_01(&digest), input);\n  return digest;\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_vec_zero(void)\n{\n  return mm256_setzero_si256();\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_ZERO_f5(void)\n{\n  return libcrux_ml_kem_vector_avx2_vec_zero();\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_vec_from_i16_array(Eurydice_mut_borrow_slice_i16 array)\n{\n  return mm256_loadu_si256_i16(array);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_from_i16_array_f5(Eurydice_mut_borrow_slice_i16 array)\n{\n  return libcrux_ml_kem_vector_avx2_vec_from_i16_array(array);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6 libcrux_ml_kem_vector_avx2_vec_to_i16_array(__m256i v)\n{\n  Eurydice_arr_d6 output = { .data = { 0U } };\n  mm256_storeu_si256_i16(Eurydice_array_to_slice_mut_8a(&output), v);\n  return output;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_arr_d6 libcrux_ml_kem_vector_avx2_to_i16_array_f5(__m256i x)\n{\n  return libcrux_ml_kem_vector_avx2_vec_to_i16_array(x);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_from_bytes(Eurydice_mut_borrow_slice_u8 array)\n{\n  return\n    mm256_loadu_si256_u8(Eurydice_slice_subslice_mut_c8(array,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)32U })));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_from_bytes_f5(Eurydice_mut_borrow_slice_u8 array)\n{\n  return libcrux_ml_kem_vector_avx2_from_bytes(array);\n}\n\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_avx2_to_bytes(__m256i x, Eurydice_mut_borrow_slice_u8 bytes)\n{\n  mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(bytes,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)32U })),\n    x);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_avx2_to_bytes_f5(__m256i x, Eurydice_mut_borrow_slice_u8 bytes)\n{\n  libcrux_ml_kem_vector_avx2_to_bytes(x, bytes);\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_arithmetic_add(__m256i lhs, __m256i rhs)\n{\n  return mm256_add_epi16(lhs, rhs);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_add_f5(__m256i lhs, __m256i *rhs)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_add(lhs, rhs[0U]);\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_arithmetic_sub(__m256i lhs, __m256i rhs)\n{\n  return mm256_sub_epi16(lhs, rhs);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_sub_f5(__m256i lhs, __m256i *rhs)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_sub(lhs, rhs[0U]);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_multiply_by_constant(__m256i vector, int16_t constant)\n{\n  __m256i cv = mm256_set1_epi16(constant);\n  return mm256_mullo_epi16(vector, cv);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_multiply_by_constant_f5(__m256i vec, int16_t c)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_multiply_by_constant(vec, c);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_cond_subtract_3329(__m256i vector)\n{\n  __m256i field_modulus = mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i v_minus_field_modulus = mm256_sub_epi16(vector, field_modulus);\n  __m256i sign_mask = mm256_srai_epi16(15, v_minus_field_modulus, __m256i);\n  __m256i conditional_add_field_modulus = mm256_and_si256(sign_mask, field_modulus);\n  return mm256_add_epi16(v_minus_field_modulus, conditional_add_field_modulus);\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_cond_subtract_3329(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_cond_subtract_3329(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_cond_subtract_3329_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_cond_subtract_3329(vector);\n}\n\n/**\n See Section 3.2 of the implementation notes document for an explanation\n of this code.\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_arithmetic_barrett_reduce(__m256i vector)\n{\n  __m256i\n  t0 =\n    mm256_mulhi_epi16(vector,\n      mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_AVX2_ARITHMETIC_BARRETT_MULTIPLIER));\n  __m256i t512 = mm256_set1_epi16(512);\n  __m256i t1 = mm256_add_epi16(t0, t512);\n  __m256i quotient = mm256_srai_epi16(10, t1, __m256i);\n  __m256i\n  quotient_times_field_modulus =\n    mm256_mullo_epi16(quotient,\n      mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n  return mm256_sub_epi16(vector, quotient_times_field_modulus);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_barrett_reduce_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_barrett_reduce(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constant(\n  __m256i vector,\n  int16_t constant\n)\n{\n  __m256i vec_constant = mm256_set1_epi16(constant);\n  __m256i value_low = mm256_mullo_epi16(vector, vec_constant);\n  __m256i\n  k =\n    mm256_mullo_epi16(value_low,\n      mm256_set1_epi16((int16_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));\n  __m256i modulus = mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i k_times_modulus = mm256_mulhi_epi16(k, modulus);\n  __m256i value_high = mm256_mulhi_epi16(vector, vec_constant);\n  return mm256_sub_epi16(value_high, k_times_modulus);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(__m256i vector, int16_t constant)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constant(vector, constant);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_bitwise_and_with_constant(\n  __m256i vector,\n  int16_t constant\n)\n{\n  __m256i cv = mm256_set1_epi16(constant);\n  return mm256_and_si256(vector, cv);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.arithmetic.shift_right\nwith const generics\n- SHIFT_BY= 15\n*/\nstatic KRML_MUSTINLINE __m256i shift_right_ef(__m256i vector)\n{\n  return mm256_srai_epi16(15, vector, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_to_unsigned_representative(__m256i a)\n{\n  __m256i t = shift_right_ef(a);\n  __m256i\n  fm =\n    libcrux_ml_kem_vector_avx2_arithmetic_bitwise_and_with_constant(t,\n      LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  return libcrux_ml_kem_vector_avx2_arithmetic_add(a, fm);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_to_unsigned_representative_f5(__m256i a)\n{\n  return libcrux_ml_kem_vector_avx2_arithmetic_to_unsigned_representative(a);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_compress_compress_message_coefficient(__m256i vector)\n{\n  __m256i\n  field_modulus_halved = mm256_set1_epi16((LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 2);\n  __m256i\n  field_modulus_quartered =\n    mm256_set1_epi16((LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 4);\n  __m256i shifted = mm256_sub_epi16(field_modulus_halved, vector);\n  __m256i mask = mm256_srai_epi16(15, shifted, __m256i);\n  __m256i shifted_to_positive = mm256_xor_si256(mask, shifted);\n  __m256i\n  shifted_to_positive_in_range = mm256_sub_epi16(shifted_to_positive, field_modulus_quartered);\n  return mm256_srli_epi16(15, shifted_to_positive_in_range, __m256i);\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_compress_1(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_compress_compress_message_coefficient(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_compress_1_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_compress_1(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(__m256i lhs, __m256i rhs)\n{\n  __m256i prod02 = mm256_mul_epu32(lhs, rhs);\n  __m256i\n  prod13 =\n    mm256_mul_epu32(mm256_shuffle_epi32(245, lhs, __m256i),\n      mm256_shuffle_epi32(245, rhs, __m256i));\n  return\n    mm256_unpackhi_epi64(mm256_unpacklo_epi32(prod02, prod13),\n      mm256_unpackhi_epi32(prod02, prod13));\n}\n\nKRML_MUSTINLINE __m256i libcrux_ml_kem_vector_avx2_compress_decompress_1(__m256i a)\n{\n  __m256i z = mm256_setzero_si256();\n  __m256i s = libcrux_ml_kem_vector_avx2_arithmetic_sub(z, a);\n  return libcrux_ml_kem_vector_avx2_arithmetic_bitwise_and_with_constant(s, 1665);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_decompress_1_f5(__m256i a)\n{\n  return libcrux_ml_kem_vector_avx2_compress_decompress_1(a);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(\n  __m256i vec,\n  __m256i constants\n)\n{\n  __m256i value_low = mm256_mullo_epi16(vec, constants);\n  __m256i\n  k =\n    mm256_mullo_epi16(value_low,\n      mm256_set1_epi16((int16_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));\n  __m256i modulus = mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i k_times_modulus = mm256_mulhi_epi16(k, modulus);\n  __m256i value_high = mm256_mulhi_epi16(vec, constants);\n  return mm256_sub_epi16(value_high, k_times_modulus);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  __m256i\n  zetas =\n    mm256_set_epi16(-zeta3,\n      -zeta3,\n      zeta3,\n      zeta3,\n      -zeta2,\n      -zeta2,\n      zeta2,\n      zeta2,\n      -zeta1,\n      -zeta1,\n      zeta1,\n      zeta1,\n      -zeta0,\n      -zeta0,\n      zeta0,\n      zeta0);\n  __m256i rhs = mm256_shuffle_epi32(245, vector, __m256i);\n  __m256i\n  rhs0 = libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(rhs, zetas);\n  __m256i lhs = mm256_shuffle_epi32(160, vector, __m256i);\n  return mm256_add_epi16(lhs, rhs0);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_ntt_layer_1_step(vector, zeta0, zeta1, zeta2, zeta3);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_1_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_layer_1_step(vector, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1)\n{\n  __m256i\n  zetas =\n    mm256_set_epi16(-zeta1,\n      -zeta1,\n      -zeta1,\n      -zeta1,\n      zeta1,\n      zeta1,\n      zeta1,\n      zeta1,\n      -zeta0,\n      -zeta0,\n      -zeta0,\n      -zeta0,\n      zeta0,\n      zeta0,\n      zeta0,\n      zeta0);\n  __m256i rhs = mm256_shuffle_epi32(238, vector, __m256i);\n  __m256i\n  rhs0 = libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(rhs, zetas);\n  __m256i lhs = mm256_shuffle_epi32(68, vector, __m256i);\n  return mm256_add_epi16(lhs, rhs0);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_ntt_layer_2_step(vector, zeta0, zeta1);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_2_step_f5(__m256i vector, int16_t zeta0, int16_t zeta1)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_layer_2_step(vector, zeta0, zeta1);\n}\n\nKRML_MUSTINLINE __m128i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_m128i_by_constants(\n  __m128i vec,\n  __m128i constants\n)\n{\n  __m128i value_low = mm_mullo_epi16(vec, constants);\n  __m128i\n  k =\n    mm_mullo_epi16(value_low,\n      mm_set1_epi16((int16_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));\n  __m128i modulus = mm_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m128i k_times_modulus = mm_mulhi_epi16(k, modulus);\n  __m128i value_high = mm_mulhi_epi16(vec, constants);\n  return mm_sub_epi16(value_high, k_times_modulus);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_layer_3_step(__m256i vector, int16_t zeta)\n{\n  __m128i rhs = mm256_extracti128_si256(1, vector, __m128i);\n  __m128i\n  rhs0 =\n    libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_m128i_by_constants(rhs,\n      mm_set1_epi16(zeta));\n  __m128i lhs = mm256_castsi256_si128(vector);\n  __m128i lower_coefficients = mm_add_epi16(lhs, rhs0);\n  __m128i upper_coefficients = mm_sub_epi16(lhs, rhs0);\n  __m256i combined = mm256_castsi128_si256(lower_coefficients);\n  return mm256_inserti128_si256(1, combined, upper_coefficients, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_3_step(__m256i vector, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_ntt_layer_3_step(vector, zeta);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_3_step_f5(__m256i vector, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_layer_3_step(vector, zeta);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  __m256i lhs = mm256_shuffle_epi32(245, vector, __m256i);\n  __m256i rhs = mm256_shuffle_epi32(160, vector, __m256i);\n  __m256i\n  rhs0 =\n    mm256_mullo_epi16(rhs,\n      mm256_set_epi16(-1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1));\n  __m256i sum0 = mm256_add_epi16(lhs, rhs0);\n  __m256i\n  sum_times_zetas =\n    libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(sum0,\n      mm256_set_epi16(zeta3,\n        zeta3,\n        0,\n        0,\n        zeta2,\n        zeta2,\n        0,\n        0,\n        zeta1,\n        zeta1,\n        0,\n        0,\n        zeta0,\n        zeta0,\n        0,\n        0));\n  __m256i sum = libcrux_ml_kem_vector_avx2_arithmetic_barrett_reduce(sum0);\n  return mm256_blend_epi16(204, sum, sum_times_zetas, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_1_step(vector, zeta0, zeta1, zeta2, zeta3);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step(vector, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_2_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  __m256i lhs = mm256_permute4x64_epi64(245, vector, __m256i);\n  __m256i rhs = mm256_permute4x64_epi64(160, vector, __m256i);\n  __m256i\n  rhs0 =\n    mm256_mullo_epi16(rhs,\n      mm256_set_epi16(-1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1));\n  __m256i sum = mm256_add_epi16(lhs, rhs0);\n  __m256i\n  sum_times_zetas =\n    libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(sum,\n      mm256_set_epi16(zeta1,\n        zeta1,\n        zeta1,\n        zeta1,\n        0,\n        0,\n        0,\n        0,\n        zeta0,\n        zeta0,\n        zeta0,\n        zeta0,\n        0,\n        0,\n        0,\n        0));\n  return mm256_blend_epi16(240, sum, sum_times_zetas, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_2_step(vector, zeta0, zeta1);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  return libcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step(vector, zeta0, zeta1);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_3_step(__m256i vector, int16_t zeta)\n{\n  __m128i lhs = mm256_extracti128_si256(1, vector, __m128i);\n  __m128i rhs = mm256_castsi256_si128(vector);\n  __m128i lower_coefficients = mm_add_epi16(lhs, rhs);\n  __m128i upper_coefficients = mm_sub_epi16(lhs, rhs);\n  __m128i\n  upper_coefficients0 =\n    libcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_m128i_by_constants(upper_coefficients,\n      mm_set1_epi16(zeta));\n  __m256i combined = mm256_castsi128_si256(lower_coefficients);\n  return mm256_inserti128_si256(1, combined, upper_coefficients0, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step(__m256i vector, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_3_step(vector, zeta);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step_f5(__m256i vector, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step(vector, zeta);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_reduce_i32s(__m256i vec)\n{\n  __m256i\n  k =\n    mm256_mullo_epi16(vec,\n      mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));\n  __m256i\n  k_times_modulus =\n    mm256_mulhi_epi16(k,\n      mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n  __m256i value_high = mm256_srli_epi32(16, vec, __m256i);\n  __m256i result = mm256_sub_epi16(value_high, k_times_modulus);\n  __m256i result0 = mm256_slli_epi32(16, result, __m256i);\n  return mm256_srai_epi32(16, result0, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_multiply(\n  __m256i lhs,\n  __m256i rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  __m256i\n  shuffle_with =\n    mm256_set_epi8(15,\n      14,\n      11,\n      10,\n      7,\n      6,\n      3,\n      2,\n      13,\n      12,\n      9,\n      8,\n      5,\n      4,\n      1,\n      0,\n      15,\n      14,\n      11,\n      10,\n      7,\n      6,\n      3,\n      2,\n      13,\n      12,\n      9,\n      8,\n      5,\n      4,\n      1,\n      0);\n  __m256i lhs_shuffled = mm256_shuffle_epi8(lhs, shuffle_with);\n  __m256i lhs_shuffled0 = mm256_permute4x64_epi64(216, lhs_shuffled, __m256i);\n  __m128i lhs_evens = mm256_castsi256_si128(lhs_shuffled0);\n  __m256i lhs_evens0 = mm256_cvtepi16_epi32(lhs_evens);\n  __m128i lhs_odds = mm256_extracti128_si256(1, lhs_shuffled0, __m128i);\n  __m256i lhs_odds0 = mm256_cvtepi16_epi32(lhs_odds);\n  __m256i rhs_shuffled = mm256_shuffle_epi8(rhs, shuffle_with);\n  __m256i rhs_shuffled0 = mm256_permute4x64_epi64(216, rhs_shuffled, __m256i);\n  __m128i rhs_evens = mm256_castsi256_si128(rhs_shuffled0);\n  __m256i rhs_evens0 = mm256_cvtepi16_epi32(rhs_evens);\n  __m128i rhs_odds = mm256_extracti128_si256(1, rhs_shuffled0, __m128i);\n  __m256i rhs_odds0 = mm256_cvtepi16_epi32(rhs_odds);\n  __m256i left = mm256_mullo_epi32(lhs_evens0, rhs_evens0);\n  __m256i right = mm256_mullo_epi32(lhs_odds0, rhs_odds0);\n  __m256i right0 = libcrux_ml_kem_vector_avx2_arithmetic_montgomery_reduce_i32s(right);\n  __m256i\n  right1 =\n    mm256_mullo_epi32(right0,\n      mm256_set_epi32(-(int32_t)zeta3,\n        (int32_t)zeta3,\n        -(int32_t)zeta2,\n        (int32_t)zeta2,\n        -(int32_t)zeta1,\n        (int32_t)zeta1,\n        -(int32_t)zeta0,\n        (int32_t)zeta0));\n  __m256i products_left = mm256_add_epi32(left, right1);\n  __m256i\n  products_left0 = libcrux_ml_kem_vector_avx2_arithmetic_montgomery_reduce_i32s(products_left);\n  __m256i\n  rhs_adjacent_swapped =\n    mm256_shuffle_epi8(rhs,\n      mm256_set_epi8(13,\n        12,\n        15,\n        14,\n        9,\n        8,\n        11,\n        10,\n        5,\n        4,\n        7,\n        6,\n        1,\n        0,\n        3,\n        2,\n        13,\n        12,\n        15,\n        14,\n        9,\n        8,\n        11,\n        10,\n        5,\n        4,\n        7,\n        6,\n        1,\n        0,\n        3,\n        2));\n  __m256i products_right = mm256_madd_epi16(lhs, rhs_adjacent_swapped);\n  __m256i\n  products_right0 = libcrux_ml_kem_vector_avx2_arithmetic_montgomery_reduce_i32s(products_right);\n  __m256i products_right1 = mm256_slli_epi32(16, products_right0, __m256i);\n  return mm256_blend_epi16(170, products_left0, products_right1, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_multiply(\n  __m256i *lhs,\n  __m256i *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return\n    libcrux_ml_kem_vector_avx2_ntt_ntt_multiply(lhs[0U],\n      rhs[0U],\n      zeta0,\n      zeta1,\n      zeta2,\n      zeta3);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_ntt_multiply_f5(\n  __m256i *lhs,\n  __m256i *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_avx2_ntt_multiply(lhs, rhs, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x2\nlibcrux_ml_kem_vector_avx2_serialize_serialize_1(__m256i vector)\n{\n  __m256i lsb_to_msb = mm256_slli_epi16(15, vector, __m256i);\n  __m128i low_msbs = mm256_castsi256_si128(lsb_to_msb);\n  __m128i high_msbs = mm256_extracti128_si256(1, lsb_to_msb, __m128i);\n  __m128i msbs = mm_packs_epi16(low_msbs, high_msbs);\n  int32_t bits_packed = mm_movemask_epi8(msbs);\n  Eurydice_array_u8x2\n  result = { .data = { (uint8_t)bits_packed, (uint8_t)(bits_packed >> 8U) } };\n  return result;\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x2 libcrux_ml_kem_vector_avx2_serialize_1(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_1(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_array_u8x2 libcrux_ml_kem_vector_avx2_serialize_1_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_1(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_i16s(int16_t a, int16_t b)\n{\n  __m256i coefficients = mm256_set_epi16(b, b, b, b, b, b, b, b, a, a, a, a, a, a, a, a);\n  __m256i\n  coefficients_in_msb =\n    mm256_mullo_epi16(coefficients,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 8U),\n        (int16_t)((uint32_t)1 << 9U),\n        (int16_t)((uint32_t)1 << 10U),\n        (int16_t)((uint32_t)1 << 11U),\n        (int16_t)((uint32_t)1 << 12U),\n        (int16_t)((uint32_t)1 << 13U),\n        (int16_t)((uint32_t)1 << 14U),\n        -32768,\n        (int16_t)((uint32_t)1 << 8U),\n        (int16_t)((uint32_t)1 << 9U),\n        (int16_t)((uint32_t)1 << 10U),\n        (int16_t)((uint32_t)1 << 11U),\n        (int16_t)((uint32_t)1 << 12U),\n        (int16_t)((uint32_t)1 << 13U),\n        (int16_t)((uint32_t)1 << 14U),\n        -32768));\n  return mm256_srli_epi16(15, coefficients_in_msb, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_u8s(uint8_t a, uint8_t b)\n{\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_i16s((int16_t)a,\n      (int16_t)b);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_1(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_u8s(bytes.ptr[0U],\n      bytes.ptr[1U]);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_1(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_1(bytes);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_1_f5(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_deserialize_1(bytes);\n}\n\n/**\n `mm256_concat_pairs_n(n, x)` is then a sequence of 32 bits packets\n of the shape `0b0…0b₁…bₙa₁…aₙ`, if `x` is a sequence of pairs of\n 16 bits, of the shape `(0b0…0a₁…aₙ, 0b0…0b₁…bₙ)` (where the last\n `n` bits are non-zero).\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_mm256_concat_pairs_n(uint8_t n, __m256i x)\n{\n  int16_t n0 = (int16_t)((uint32_t)1 << (uint32_t)n);\n  return\n    mm256_madd_epi16(x,\n      mm256_set_epi16(n0, 1, n0, 1, n0, 1, n0, 1, n0, 1, n0, 1, n0, 1, n0, 1));\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x8\nlibcrux_ml_kem_vector_avx2_serialize_serialize_4(__m256i vector)\n{\n  Eurydice_arr_b2 serialized = { .data = { 0U } };\n  __m256i\n  adjacent_2_combined = libcrux_ml_kem_vector_avx2_serialize_mm256_concat_pairs_n(4U, vector);\n  __m256i\n  adjacent_8_combined =\n    mm256_shuffle_epi8(adjacent_2_combined,\n      mm256_set_epi8(-1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        12,\n        8,\n        4,\n        0,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        12,\n        8,\n        4,\n        0));\n  __m256i\n  combined =\n    mm256_permutevar8x32_epi32(adjacent_8_combined,\n      mm256_set_epi32(0, 0, 0, 0, 0, 0, 4, 0));\n  __m128i combined0 = mm256_castsi256_si128(combined);\n  mm_storeu_bytes_si128(Eurydice_array_to_slice_mut_29(&serialized), combined0);\n  Eurydice_array_u8x8 arr;\n  memcpy(arr.data,\n    Eurydice_array_to_subslice_mut_d45(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })).ptr,\n    (size_t)8U * sizeof (uint8_t));\n  return\n    core_result_unwrap_26_e0((\n        KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x8 libcrux_ml_kem_vector_avx2_serialize_4(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_4(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_array_u8x8 libcrux_ml_kem_vector_avx2_serialize_4_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_4(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_i16s(\n  int16_t b0,\n  int16_t b1,\n  int16_t b2,\n  int16_t b3,\n  int16_t b4,\n  int16_t b5,\n  int16_t b6,\n  int16_t b7\n)\n{\n  __m256i\n  coefficients = mm256_set_epi16(b7, b7, b6, b6, b5, b5, b4, b4, b3, b3, b2, b2, b1, b1, b0, b0);\n  __m256i\n  coefficients_in_msb =\n    mm256_mullo_epi16(coefficients,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U)));\n  __m256i coefficients_in_lsb = mm256_srli_epi16(4, coefficients_in_msb, __m256i);\n  return\n    mm256_and_si256(coefficients_in_lsb,\n      mm256_set1_epi16((int16_t)((uint32_t)1 << 4U) - 1));\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_u8s(\n  uint8_t b0,\n  uint8_t b1,\n  uint8_t b2,\n  uint8_t b3,\n  uint8_t b4,\n  uint8_t b5,\n  uint8_t b6,\n  uint8_t b7\n)\n{\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_i16s((int16_t)b0,\n      (int16_t)b1,\n      (int16_t)b2,\n      (int16_t)b3,\n      (int16_t)b4,\n      (int16_t)b5,\n      (int16_t)b6,\n      (int16_t)b7);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_4(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_u8s(bytes.ptr[0U],\n      bytes.ptr[1U],\n      bytes.ptr[2U],\n      bytes.ptr[3U],\n      bytes.ptr[4U],\n      bytes.ptr[5U],\n      bytes.ptr[6U],\n      bytes.ptr[7U]);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_4(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_4(bytes);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_4_f5(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_deserialize_4(bytes);\n}\n\nKRML_MUSTINLINE Eurydice_arr_6d\nlibcrux_ml_kem_vector_avx2_serialize_serialize_5(__m256i vector)\n{\n  Eurydice_arr_ec serialized = { .data = { 0U } };\n  __m256i\n  adjacent_2_combined =\n    mm256_madd_epi16(vector,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1,\n        (int16_t)((uint32_t)1 << 5U),\n        1));\n  __m256i\n  adjacent_4_combined =\n    mm256_sllv_epi32(adjacent_2_combined,\n      mm256_set_epi32(0, 22, 0, 22, 0, 22, 0, 22));\n  __m256i adjacent_4_combined0 = mm256_srli_epi64(22, adjacent_4_combined, __m256i);\n  __m256i adjacent_8_combined = mm256_shuffle_epi32(8, adjacent_4_combined0, __m256i);\n  __m256i\n  adjacent_8_combined0 =\n    mm256_sllv_epi32(adjacent_8_combined,\n      mm256_set_epi32(0, 0, 0, 12, 0, 0, 0, 12));\n  __m256i adjacent_8_combined1 = mm256_srli_epi64(12, adjacent_8_combined0, __m256i);\n  __m128i lower_8 = mm256_castsi256_si128(adjacent_8_combined1);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })),\n    lower_8);\n  __m128i upper_8 = mm256_extracti128_si256(1, adjacent_8_combined1, __m128i);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)5U, .end = (size_t)21U })),\n    upper_8);\n  Eurydice_arr_6d arr;\n  memcpy(arr.data,\n    Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)10U })).ptr,\n    (size_t)10U * sizeof (uint8_t));\n  return\n    core_result_unwrap_26_63((\n        KRML_CLITERAL(core_result_Result_80){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_arr_6d libcrux_ml_kem_vector_avx2_serialize_5_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_5(vector);\n}\n\n/**\n We cannot model `mm256_inserti128_si256` on its own: it produces a\n Vec256 where the upper 128 bits are undefined. Thus\n `mm256_inserti128_si256` is not pure.\n\n Luckily, we always call `mm256_castsi128_si256` right after\n `mm256_inserti128_si256`: this composition sets the upper bits,\n making the whole computation pure again.\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_mm256_si256_from_two_si128(__m128i lower, __m128i upper)\n{\n  return mm256_inserti128_si256(1, mm256_castsi128_si256(lower), upper, __m256i);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_5(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  __m128i\n  coefficients =\n    mm_set_epi8((int8_t)bytes.ptr[9U],\n      (int8_t)bytes.ptr[8U],\n      (int8_t)bytes.ptr[8U],\n      (int8_t)bytes.ptr[7U],\n      (int8_t)bytes.ptr[7U],\n      (int8_t)bytes.ptr[6U],\n      (int8_t)bytes.ptr[6U],\n      (int8_t)bytes.ptr[5U],\n      (int8_t)bytes.ptr[4U],\n      (int8_t)bytes.ptr[3U],\n      (int8_t)bytes.ptr[3U],\n      (int8_t)bytes.ptr[2U],\n      (int8_t)bytes.ptr[2U],\n      (int8_t)bytes.ptr[1U],\n      (int8_t)bytes.ptr[1U],\n      (int8_t)bytes.ptr[0U]);\n  __m256i\n  coefficients_loaded =\n    libcrux_ml_kem_vector_avx2_serialize_mm256_si256_from_two_si128(coefficients,\n      coefficients);\n  __m256i\n  coefficients0 =\n    mm256_shuffle_epi8(coefficients_loaded,\n      mm256_set_epi8(15,\n        14,\n        15,\n        14,\n        13,\n        12,\n        13,\n        12,\n        11,\n        10,\n        11,\n        10,\n        9,\n        8,\n        9,\n        8,\n        7,\n        6,\n        7,\n        6,\n        5,\n        4,\n        5,\n        4,\n        3,\n        2,\n        3,\n        2,\n        1,\n        0,\n        1,\n        0));\n  __m256i\n  coefficients1 =\n    mm256_mullo_epi16(coefficients0,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 5U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 7U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 9U),\n        (int16_t)((uint32_t)1 << 6U),\n        (int16_t)((uint32_t)1 << 11U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 5U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 7U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 9U),\n        (int16_t)((uint32_t)1 << 6U),\n        (int16_t)((uint32_t)1 << 11U)));\n  return mm256_srli_epi16(11, coefficients1, __m256i);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_5_f5(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_5(bytes);\n}\n\ncore_core_arch_x86___m128i_x2\nlibcrux_ml_kem_vector_avx2_serialize_serialize_10_serialize_10_vec(__m256i vector)\n{\n  __m256i\n  adjacent_2_combined = libcrux_ml_kem_vector_avx2_serialize_mm256_concat_pairs_n(10U, vector);\n  __m256i\n  adjacent_4_combined =\n    mm256_sllv_epi32(adjacent_2_combined,\n      mm256_set_epi32(0, 12, 0, 12, 0, 12, 0, 12));\n  __m256i adjacent_4_combined0 = mm256_srli_epi64(12, adjacent_4_combined, __m256i);\n  __m256i\n  adjacent_8_combined =\n    mm256_shuffle_epi8(adjacent_4_combined0,\n      mm256_set_epi8(-1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        12,\n        11,\n        10,\n        9,\n        8,\n        4,\n        3,\n        2,\n        1,\n        0,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        -1,\n        12,\n        11,\n        10,\n        9,\n        8,\n        4,\n        3,\n        2,\n        1,\n        0));\n  __m128i lower_8 = mm256_castsi256_si128(adjacent_8_combined);\n  __m128i upper_8 = mm256_extracti128_si256(1, adjacent_8_combined, __m128i);\n  return (KRML_CLITERAL(core_core_arch_x86___m128i_x2){ .fst = lower_8, .snd = upper_8 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_fc\nlibcrux_ml_kem_vector_avx2_serialize_serialize_10(__m256i vector)\n{\n  core_core_arch_x86___m128i_x2\n  uu____0 = libcrux_ml_kem_vector_avx2_serialize_serialize_10_serialize_10_vec(vector);\n  __m128i lower_8 = uu____0.fst;\n  __m128i upper_8 = uu____0.snd;\n  Eurydice_arr_ec serialized = { .data = { 0U } };\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })),\n    lower_8);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)10U, .end = (size_t)26U })),\n    upper_8);\n  Eurydice_arr_fc arr;\n  memcpy(arr.data,\n    Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)20U })).ptr,\n    (size_t)20U * sizeof (uint8_t));\n  return\n    core_result_unwrap_26_7d((\n        KRML_CLITERAL(core_result_Result_83){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n}\n\nKRML_MUSTINLINE Eurydice_arr_fc libcrux_ml_kem_vector_avx2_serialize_10(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_10(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_arr_fc libcrux_ml_kem_vector_avx2_serialize_10_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_10(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_10_deserialize_10_vec(\n  __m128i lower_coefficients0,\n  __m128i upper_coefficients0\n)\n{\n  __m128i\n  lower_coefficients =\n    mm_shuffle_epi8(lower_coefficients0,\n      mm_set_epi8(9, 8, 8, 7, 7, 6, 6, 5, 4, 3, 3, 2, 2, 1, 1, 0));\n  __m128i\n  upper_coefficients =\n    mm_shuffle_epi8(upper_coefficients0,\n      mm_set_epi8(15, 14, 14, 13, 13, 12, 12, 11, 10, 9, 9, 8, 8, 7, 7, 6));\n  __m256i\n  coefficients =\n    libcrux_ml_kem_vector_avx2_serialize_mm256_si256_from_two_si128(lower_coefficients,\n      upper_coefficients);\n  __m256i\n  coefficients0 =\n    mm256_mullo_epi16(coefficients,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 6U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 6U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 6U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 2U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 6U)));\n  __m256i coefficients1 = mm256_srli_epi16(6, coefficients0, __m256i);\n  return mm256_and_si256(coefficients1, mm256_set1_epi16((int16_t)((uint32_t)1 << 10U) - 1));\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_10(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  Eurydice_mut_borrow_slice_u8\n  lower_coefficients =\n    Eurydice_slice_subslice_mut_c8(bytes,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U }));\n  Eurydice_mut_borrow_slice_u8\n  upper_coefficients =\n    Eurydice_slice_subslice_mut_c8(bytes,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)20U }));\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_10_deserialize_10_vec(mm_loadu_si128(lower_coefficients),\n      mm_loadu_si128(upper_coefficients));\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_10(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_10(bytes);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_10_f5(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_deserialize_10(bytes);\n}\n\nKRML_MUSTINLINE Eurydice_arr_80\nlibcrux_ml_kem_vector_avx2_serialize_serialize_11(__m256i vector)\n{\n  Eurydice_arr_d6 array = { .data = { 0U } };\n  mm256_storeu_si256_i16(Eurydice_array_to_slice_mut_8a(&array), vector);\n  Eurydice_arr_d6\n  input =\n    libcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_array_to_slice_mut_8a(&array));\n  return libcrux_ml_kem_vector_portable_serialize_11_b8(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_arr_80 libcrux_ml_kem_vector_avx2_serialize_11_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_11(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_11(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  Eurydice_arr_d6 output = libcrux_ml_kem_vector_portable_deserialize_11_b8(bytes);\n  Eurydice_arr_d6 array = libcrux_ml_kem_vector_portable_to_i16_array_b8(output);\n  return mm256_loadu_si256_i16(Eurydice_array_to_slice_mut_8a(&array));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_11_f5(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_11(bytes);\n}\n\nKRML_MUSTINLINE core_core_arch_x86___m128i_x2\nlibcrux_ml_kem_vector_avx2_serialize_serialize_12_serialize_12_vec(__m256i vector)\n{\n  __m256i\n  adjacent_2_combined = libcrux_ml_kem_vector_avx2_serialize_mm256_concat_pairs_n(12U, vector);\n  __m256i\n  adjacent_4_combined =\n    mm256_sllv_epi32(adjacent_2_combined,\n      mm256_set_epi32(0, 8, 0, 8, 0, 8, 0, 8));\n  __m256i adjacent_4_combined0 = mm256_srli_epi64(8, adjacent_4_combined, __m256i);\n  __m256i\n  adjacent_8_combined =\n    mm256_shuffle_epi8(adjacent_4_combined0,\n      mm256_set_epi8(-1,\n        -1,\n        -1,\n        -1,\n        13,\n        12,\n        11,\n        10,\n        9,\n        8,\n        5,\n        4,\n        3,\n        2,\n        1,\n        0,\n        -1,\n        -1,\n        -1,\n        -1,\n        13,\n        12,\n        11,\n        10,\n        9,\n        8,\n        5,\n        4,\n        3,\n        2,\n        1,\n        0));\n  __m128i lower_8 = mm256_castsi256_si128(adjacent_8_combined);\n  __m128i upper_8 = mm256_extracti128_si256(1, adjacent_8_combined, __m128i);\n  return (KRML_CLITERAL(core_core_arch_x86___m128i_x2){ .fst = lower_8, .snd = upper_8 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_94\nlibcrux_ml_kem_vector_avx2_serialize_serialize_12(__m256i vector)\n{\n  Eurydice_arr_ec serialized = { .data = { 0U } };\n  core_core_arch_x86___m128i_x2\n  uu____0 = libcrux_ml_kem_vector_avx2_serialize_serialize_12_serialize_12_vec(vector);\n  __m128i lower_8 = uu____0.fst;\n  __m128i upper_8 = uu____0.snd;\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })),\n    lower_8);\n  mm_storeu_bytes_si128(Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)28U })),\n    upper_8);\n  Eurydice_arr_94 arr;\n  memcpy(arr.data,\n    Eurydice_array_to_subslice_mut_d44(&serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)24U })).ptr,\n    (size_t)24U * sizeof (uint8_t));\n  return\n    core_result_unwrap_26_78((\n        KRML_CLITERAL(core_result_Result_57){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n}\n\nKRML_MUSTINLINE Eurydice_arr_94 libcrux_ml_kem_vector_avx2_serialize_12(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_serialize_12(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE Eurydice_arr_94 libcrux_ml_kem_vector_avx2_serialize_12_f5(__m256i vector)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_12(vector);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_12_deserialize_12_vec(\n  __m128i lower_coefficients0,\n  __m128i upper_coefficients0\n)\n{\n  __m128i\n  lower_coefficients =\n    mm_shuffle_epi8(lower_coefficients0,\n      mm_set_epi8(11, 10, 10, 9, 8, 7, 7, 6, 5, 4, 4, 3, 2, 1, 1, 0));\n  __m128i\n  upper_coefficients =\n    mm_shuffle_epi8(upper_coefficients0,\n      mm_set_epi8(15, 14, 14, 13, 12, 11, 11, 10, 9, 8, 8, 7, 6, 5, 5, 4));\n  __m256i\n  coefficients =\n    libcrux_ml_kem_vector_avx2_serialize_mm256_si256_from_two_si128(lower_coefficients,\n      upper_coefficients);\n  __m256i\n  coefficients0 =\n    mm256_mullo_epi16(coefficients,\n      mm256_set_epi16((int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U),\n        (int16_t)((uint32_t)1 << 0U),\n        (int16_t)((uint32_t)1 << 4U)));\n  __m256i coefficients1 = mm256_srli_epi16(4, coefficients0, __m256i);\n  return mm256_and_si256(coefficients1, mm256_set1_epi16((int16_t)((uint32_t)1 << 12U) - 1));\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_12(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  __m128i\n  lower_coefficients =\n    mm_loadu_si128(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })));\n  __m128i\n  upper_coefficients =\n    mm_loadu_si128(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)24U })));\n  return\n    libcrux_ml_kem_vector_avx2_serialize_deserialize_12_deserialize_12_vec(lower_coefficients,\n      upper_coefficients);\n}\n\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_12(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_serialize_deserialize_12(bytes);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE __m256i\nlibcrux_ml_kem_vector_avx2_deserialize_12_f5(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  return libcrux_ml_kem_vector_avx2_deserialize_12(bytes);\n}\n\nKRML_MUSTINLINE size_t\nlibcrux_ml_kem_vector_avx2_sampling_rejection_sample(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_i16 output\n)\n{\n  __m256i field_modulus = mm256_set1_epi16(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i potential_coefficients = libcrux_ml_kem_vector_avx2_serialize_deserialize_12(input);\n  __m256i compare_with_field_modulus = mm256_cmpgt_epi16(field_modulus, potential_coefficients);\n  Eurydice_array_u8x2\n  good = libcrux_ml_kem_vector_avx2_serialize_serialize_1(compare_with_field_modulus);\n  Eurydice_arr_b2\n  lower_shuffles =\n    LIBCRUX_ML_KEM_VECTOR_REJ_SAMPLE_TABLE_REJECTION_SAMPLE_SHUFFLE_TABLE.data[(size_t)good.data[0U]];\n  __m128i lower_shuffles0 = mm_loadu_si128(Eurydice_array_to_slice_mut_29(&lower_shuffles));\n  __m128i lower_coefficients = mm256_castsi256_si128(potential_coefficients);\n  __m128i lower_coefficients0 = mm_shuffle_epi8(lower_coefficients, lower_shuffles0);\n  mm_storeu_si128(output, lower_coefficients0);\n  size_t sampled_count = (size_t)core_num__u8__count_ones(good.data[0U]);\n  Eurydice_arr_b2\n  upper_shuffles =\n    LIBCRUX_ML_KEM_VECTOR_REJ_SAMPLE_TABLE_REJECTION_SAMPLE_SHUFFLE_TABLE.data[(size_t)good.data[1U]];\n  __m128i upper_shuffles0 = mm_loadu_si128(Eurydice_array_to_slice_mut_29(&upper_shuffles));\n  __m128i upper_coefficients = mm256_extracti128_si256(1, potential_coefficients, __m128i);\n  __m128i upper_coefficients0 = mm_shuffle_epi8(upper_coefficients, upper_shuffles0);\n  mm_storeu_si128(Eurydice_slice_subslice_mut_a6(output,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = sampled_count,\n          .end = sampled_count + (size_t)8U\n        }\n      )),\n    upper_coefficients0);\n  size_t uu____0 = sampled_count;\n  return uu____0 + (size_t)core_num__u8__count_ones(good.data[1U]);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nKRML_MUSTINLINE size_t\nlibcrux_ml_kem_vector_avx2_rej_sample_f5(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_i16 output\n)\n{\n  return libcrux_ml_kem_vector_avx2_sampling_rejection_sample(input, output);\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\ninline __m256i libcrux_ml_kem_vector_avx2_clone_fd(__m256i *self)\n{\n  return self[0U];\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ZERO_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic Eurydice_arr_13 ZERO_d6_84(void)\n{\n  Eurydice_arr_13 lit;\n  __m256i repeat_expression[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_kem_vector_avx2_ZERO_f5(););\n  memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (__m256i));\n  return lit;\n}\n\n/**\n Only use with public values.\n\n This MUST NOT be used with secret inputs, like its caller `deserialize_ring_elements_reduced`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_reduced_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_to_reduced_ring_element_84(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)24U,\n            .end = i0 * (size_t)24U + (size_t)24U\n          }\n        ));\n    __m256i coefficient = libcrux_ml_kem_vector_avx2_deserialize_12_f5(bytes);\n    re.data[i0] = libcrux_ml_kem_vector_avx2_cond_subtract_3329_f5(coefficient);\n  }\n  return re;\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_e3(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_60 *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_mut_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_13 uu____0 = deserialize_to_reduced_ring_element_84(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40 shake128_init_absorb_final_78(Eurydice_arr_81 *input)\n{\n  Eurydice_arr_c40 state = libcrux_sha3_avx2_x4_incremental_init();\n  libcrux_sha3_avx2_x4_incremental_shake128_absorb_final(&state,\n    Eurydice_array_to_slice_mut_e9(input->data),\n    Eurydice_array_to_slice_mut_e9(&input->data[1U]),\n    Eurydice_array_to_slice_mut_e9(&input->data[2U]),\n    Eurydice_array_to_slice_mut_e9(input->data));\n  return state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final_41\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40\nshake128_init_absorb_final_41_78(Eurydice_arr_81 *input)\n{\n  return shake128_init_absorb_final_78(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7e\nshake128_squeeze_first_three_blocks_78(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_7e\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_79 out0 = { .data = { 0U } };\n  Eurydice_arr_79 out1 = { .data = { 0U } };\n  Eurydice_arr_79 out2 = { .data = { 0U } };\n  Eurydice_arr_79 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(st,\n    Eurydice_array_to_slice_mut_48(&out0),\n    Eurydice_array_to_slice_mut_48(&out1),\n    Eurydice_array_to_slice_mut_48(&out2),\n    Eurydice_array_to_slice_mut_48(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks_41\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7e\nshake128_squeeze_first_three_blocks_41_78(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_first_three_blocks_78(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_79(\n  Eurydice_arr_7e *randomness,\n  Eurydice_arr_eb0 *sampled_coefficients,\n  Eurydice_arr_b1 *out\n)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_mut_d49(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2c shake128_squeeze_next_block_78(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_2c\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c5 out0 = { .data = { 0U } };\n  Eurydice_arr_c5 out1 = { .data = { 0U } };\n  Eurydice_arr_c5 out2 = { .data = { 0U } };\n  Eurydice_arr_c5 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(st,\n    Eurydice_array_to_slice_mut_2c(&out0),\n    Eurydice_array_to_slice_mut_2c(&out1),\n    Eurydice_array_to_slice_mut_2c(&out2),\n    Eurydice_array_to_slice_mut_2c(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block_41\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2c\nshake128_squeeze_next_block_41_78(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_next_block_78(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_790(\n  Eurydice_arr_2c *randomness,\n  Eurydice_arr_eb0 *sampled_coefficients,\n  Eurydice_arr_b1 *out\n)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_mut_d41(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ZERO\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic Eurydice_arr_13 ZERO_84(void)\n{\n  Eurydice_arr_13 lit;\n  __m256i repeat_expression[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_kem_vector_avx2_ZERO_f5(););\n  memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (__m256i));\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13 from_i16_array_84(Eurydice_mut_borrow_slice_i16 a)\n{\n  Eurydice_arr_13 result = ZERO_84();\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    result.data[i0] =\n      libcrux_ml_kem_vector_avx2_from_i16_array_f5(Eurydice_slice_subslice_mut_a6(a,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * (size_t)16U,\n              .end = (i0 + (size_t)1U) * (size_t)16U\n            }\n          )));\n  }\n  return result;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13 from_i16_array_d6_84(Eurydice_mut_borrow_slice_i16 a)\n{\n  return from_i16_array_84(a);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_13 call_mut_0a_281(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_mut_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_60 sample_from_xof_281(Eurydice_arr_81 *seeds)\n{\n  Eurydice_arr_eb0 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_b1\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c40 xof_state = shake128_init_absorb_final_41_78(seeds);\n  Eurydice_arr_7e randomness0 = shake128_squeeze_first_three_blocks_41_78(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_79(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_2c randomness = shake128_squeeze_next_block_41_78(&xof_state);\n      done = sample_from_uniform_distribution_next_790(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_60 arr_mapped_str;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_281(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_281(Eurydice_arr_ea *A_transpose, Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_81 seeds;\n    Eurydice_arr_31 repeat_expression[3U];\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_60 sampled = sample_from_xof_281(&seeds);\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.H_41\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec H_41_78(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a1(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_mut_211(public_key, (size_t)1152U);\n  deserialize_ring_elements_reduced_e3(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_mut_5f4(public_key,\n        (size_t)1152U));\n  Eurydice_arr_ea *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_mut_5f4(public_key,\n        (size_t)1152U));\n  sample_matrix_A_281(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_41_78(Eurydice_array_to_slice_mut_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\n*libcrux_ml_kem_ind_cca_unpacked_public_key_11_e3(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  return &self->public_key;\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.clone_91\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic inline libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef\nclone_91_e3(libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *self)\n{\n  Eurydice_arr_60\n  uu____0 =\n    core_array__core__clone__Clone_for__T__N___clone((size_t)3U,\n      &self->t_as_ntt,\n      Eurydice_arr_13,\n      Eurydice_arr_60);\n  Eurydice_arr_ec\n  uu____1 =\n    core_array__core__clone__Clone_for__T__N___clone((size_t)32U,\n      &self->seed_for_A,\n      uint8_t,\n      Eurydice_arr_ec);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef){\n        .t_as_ntt = uu____0,\n        .seed_for_A = uu____1,\n        .A = core_array__core__clone__Clone_for__T__N___clone((size_t)3U,\n          &self->A,\n          Eurydice_arr_60,\n          Eurydice_arr_ea)\n      }\n    );\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.clone_d7\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_ind_cca_unpacked_clone_d7_e3(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *self\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef\n  uu____0 = clone_91_e3(&self->ind_cpa_public_key);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef){\n        .ind_cpa_public_key = uu____0,\n        .public_key_hash = core_array__core__clone__Clone_for__T__N___clone((size_t)32U,\n          &self->public_key_hash,\n          uint8_t,\n          Eurydice_arr_ec)\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.to_unsigned_field_modulus\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE __m256i to_unsigned_field_modulus_84(__m256i a)\n{\n  return libcrux_ml_kem_vector_avx2_to_unsigned_representative_f5(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.serialize_uncompressed_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b20\nserialize_uncompressed_ring_element_84(Eurydice_arr_13 *re)\n{\n  Eurydice_arr_b20 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i coefficient = to_unsigned_field_modulus_84(re->data[i0]);\n    Eurydice_arr_94 bytes = libcrux_ml_kem_vector_avx2_serialize_12_f5(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d413(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)24U * i0,\n            .end = (size_t)24U * i0 + (size_t)24U\n          }\n        )),\n      Eurydice_array_to_slice_mut_ed(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_e3(Eurydice_arr_60 *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_84(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_79(\n  Eurydice_arr_60 *t_as_ntt,\n  Eurydice_mut_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_5f *serialized\n)\n{\n  serialize_vector_e3(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d417(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f4(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_79(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *self,\n  Eurydice_arr_5f *serialized\n)\n{\n  serialize_public_key_mut_79(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_79(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_79(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5f\nserialize_public_key_79(Eurydice_arr_60 *t_as_ntt, Eurydice_mut_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_5f public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_79(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5f\nserialized_dd_79(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_3d(serialize_public_key_79(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_79(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  return serialized_dd_79(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PRIVATE_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair768\nserialize_unpacked_secret_key_15(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_60 *private_key\n)\n{\n  Eurydice_arr_5f\n  public_key_serialized =\n    serialize_public_key_79(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&public_key->seed_for_A));\n  Eurydice_arr_0e secret_key_serialized = { .data = { 0U } };\n  serialize_vector_e3(private_key, Eurydice_array_to_slice_mut_f4(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair768){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_d4(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_7d *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair768\n  uu____0 =\n    serialize_unpacked_secret_key_15(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_0e ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_5f ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(Eurydice_array_to_slice_mut_f4(&ind_cpa_private_key),\n    Eurydice_array_to_slice_mut_ff(&ind_cpa_public_key),\n    Eurydice_array_to_slice_mut_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_d4(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_7d sk = libcrux_ml_kem_types_default_d3_79();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_d4(self, &sk);\n  return sk;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_uncompressed_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_to_uncompressed_ring_element_84(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)24U,\n            .end = i0 * (size_t)24U + (size_t)24U\n          }\n        ));\n    re.data[i0] = libcrux_ml_kem_vector_avx2_deserialize_12_f5(bytes);\n  }\n  return re;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_e3(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_60 *secret_as_ntt)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_84(Eurydice_slice_subslice_mut_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_13 call_mut_0a_7e1(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_mut_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_60 sample_from_xof_7e1(Eurydice_arr_81 *seeds)\n{\n  Eurydice_arr_eb0 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_b1\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_1b\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_78(seeds);\n  Eurydice_arr_7e\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_78(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_79(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_2c\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_78(&xof_state);\n      done = sample_from_uniform_distribution_next_790(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_60 arr_mapped_str;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_7e1(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_7e1(Eurydice_arr_ea *A_transpose, Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_81 seeds;\n    Eurydice_arr_31 repeat_expression[3U];\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_60 sampled = sample_from_xof_7e1(&seeds);\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_101(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_e3(Eurydice_slice_subslice_to_mut_72(public_key,\n      (size_t)1152U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_mut_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_mut_6d(public_key, (size_t)1152U);\n  Eurydice_arr_ea *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_7e1(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_3e(\n  Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_64(Eurydice_array_to_slice_mut_51(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_e3(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_101(ind_cpa_public_key,\n    &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_mut_6d(ind_cpa_public_key, (size_t)1152U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_60 default_70_e3(void)\n{\n  Eurydice_arr_60 lit;\n  Eurydice_arr_13 repeat_expression[3U];\n  KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n  memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_13));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef default_8b_e3(void)\n{\n  Eurydice_arr_60 uu____0;\n  Eurydice_arr_13 repeat_expression0[3U];\n  KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression0[i] = ZERO_d6_84(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)3U * sizeof (Eurydice_arr_13));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_60 repeat_expression1[3U];\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    Eurydice_arr_60 lit;\n    Eurydice_arr_13 repeat_expression[3U];\n    KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n    memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_13));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)3U * sizeof (Eurydice_arr_60));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef\nlibcrux_ml_kem_ind_cca_unpacked_default_30_e3(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef){\n        .ind_cpa_public_key = default_8b_e3(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_e3(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_ef\n  uu____0 =\n    { .ind_cpa_private_key = default_70_e3(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_e3()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.G_41\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7 G_41_78(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_b6(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d411(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)3U;\n  return G_41_78(Eurydice_array_to_slice_mut_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_58 PRFxN_3b(Eurydice_arr_801 *input)\n{\n  Eurydice_arr_58\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_89 out0 = { .data = { 0U } };\n  Eurydice_arr_89 out1 = { .data = { 0U } };\n  Eurydice_arr_89 out2 = { .data = { 0U } };\n  Eurydice_arr_89 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_shake256(Eurydice_array_to_slice_mut_b5(input->data),\n    Eurydice_array_to_slice_mut_b5(&input->data[1U]),\n    Eurydice_array_to_slice_mut_b5(&input->data[2U]),\n    Eurydice_array_to_slice_mut_b5(input->data),\n    Eurydice_array_to_slice_mut_78(&out0),\n    Eurydice_array_to_slice_mut_78(&out1),\n    Eurydice_array_to_slice_mut_78(&out2),\n    Eurydice_array_to_slice_mut_78(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN_41\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_58 PRFxN_41_3b(Eurydice_arr_801 *input)\n{\n  return PRFxN_3b(input);\n}\n\n/**\n Given a series of uniformly random bytes in `randomness`, for some number `eta`,\n the `sample_from_binomial_distribution_{eta}` functions sample\n a ring element from a binomial distribution centered at 0 that uses two sets\n of `eta` coin flips. If, for example,\n `eta = ETA`, each ring coefficient is a value `v` such\n such that `v ∈ {-ETA, -ETA + 1, ..., 0, ..., ETA + 1, ETA}` and:\n\n ```plaintext\n - If v < 0, Pr[v] = Pr[-v]\n - If v >= 0, Pr[v] = BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2 ^ (2 * ETA)\n ```\n\n The values `v < 0` are mapped to the appropriate `KyberFieldElement`.\n\n The expected value is:\n\n ```plaintext\n E[X] = (-ETA)Pr[-ETA] + (-(ETA - 1))Pr[-(ETA - 1)] + ... + (ETA - 1)Pr[ETA - 1] + (ETA)Pr[ETA]\n      = 0 since Pr[-v] = Pr[v] when v < 0.\n ```\n\n And the variance is:\n\n ```plaintext\n Var(X) = E[(X - E[X])^2]\n        = E[X^2]\n        = sum_(v=-ETA to ETA)v^2 * (BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2^(2 * ETA))\n        = ETA / 2\n ```\n\n This function implements <strong>Algorithm 7</strong> of the NIST FIPS 203 standard, which is\n reproduced below:\n\n ```plaintext\n Input: byte array B ∈ 𝔹^{64η}.\n Output: array f ∈ ℤ₂₅₆.\n\n b ← BytesToBits(B)\n for (i ← 0; i < 256; i++)\n     x ← ∑(j=0 to η - 1) b[2iη + j]\n     y ← ∑(j=0 to η - 1) b[2iη + η + j]\n     f[i] ← x−y mod q\n end for\n return f\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution_2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsample_from_binomial_distribution_2_84(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_04 sampled_i16s = { .data = { 0U } };\n  for (size_t i0 = (size_t)0U; i0 < randomness.meta / (size_t)4U; i0++)\n  {\n    size_t chunk_number = i0;\n    Eurydice_mut_borrow_slice_u8\n    byte_chunk =\n      Eurydice_slice_subslice_mut_c8(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = chunk_number * (size_t)4U,\n            .end = chunk_number * (size_t)4U + (size_t)4U\n          }\n        ));\n    uint32_t\n    random_bits_as_u32 =\n      (((uint32_t)byte_chunk.ptr[0U] | (uint32_t)byte_chunk.ptr[1U] << 8U) |\n        (uint32_t)byte_chunk.ptr[2U] << 16U)\n      | (uint32_t)byte_chunk.ptr[3U] << 24U;\n    uint32_t even_bits = random_bits_as_u32 & 1431655765U;\n    uint32_t odd_bits = random_bits_as_u32 >> 1U & 1431655765U;\n    uint32_t coin_toss_outcomes = even_bits + odd_bits;\n    for (uint32_t i = 0U; i < 32U / 4U; i++)\n    {\n      uint32_t outcome_set = i;\n      uint32_t outcome_set0 = outcome_set * 4U;\n      int16_t outcome_1 = (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 3U);\n      int16_t outcome_2 = (int16_t)(coin_toss_outcomes >> (uint32_t)(outcome_set0 + 2U) & 3U);\n      size_t offset = (size_t)(outcome_set0 >> 2U);\n      sampled_i16s.data[(size_t)8U * chunk_number + offset] = outcome_1 - outcome_2;\n    }\n  }\n  return from_i16_array_d6_84(Eurydice_array_to_slice_mut_990(&sampled_i16s));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution_3\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsample_from_binomial_distribution_3_84(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_04 sampled_i16s = { .data = { 0U } };\n  for (size_t i0 = (size_t)0U; i0 < randomness.meta / (size_t)3U; i0++)\n  {\n    size_t chunk_number = i0;\n    Eurydice_mut_borrow_slice_u8\n    byte_chunk =\n      Eurydice_slice_subslice_mut_c8(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = chunk_number * (size_t)3U,\n            .end = chunk_number * (size_t)3U + (size_t)3U\n          }\n        ));\n    uint32_t\n    random_bits_as_u24 =\n      ((uint32_t)byte_chunk.ptr[0U] | (uint32_t)byte_chunk.ptr[1U] << 8U) |\n        (uint32_t)byte_chunk.ptr[2U] << 16U;\n    uint32_t first_bits = random_bits_as_u24 & 2396745U;\n    uint32_t second_bits = random_bits_as_u24 >> 1U & 2396745U;\n    uint32_t third_bits = random_bits_as_u24 >> 2U & 2396745U;\n    uint32_t coin_toss_outcomes = first_bits + second_bits + third_bits;\n    for (int32_t i = 0; i < 24 / 6; i++)\n    {\n      int32_t outcome_set = i;\n      int32_t outcome_set0 = outcome_set * 6;\n      int16_t outcome_1 = (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 7U);\n      int16_t outcome_2 = (int16_t)(coin_toss_outcomes >> (uint32_t)(outcome_set0 + 3) & 7U);\n      size_t offset = (size_t)(outcome_set0 / 6);\n      sampled_i16s.data[(size_t)4U * chunk_number + offset] = outcome_1 - outcome_2;\n    }\n  }\n  return from_i16_array_d6_84(Eurydice_array_to_slice_mut_990(&sampled_i16s));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- ETA= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsample_from_binomial_distribution_16(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  return sample_from_binomial_distribution_2_84(randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_7\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_7_84(Eurydice_arr_13 *re)\n{\n  size_t step = LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT / (size_t)2U;\n  for (size_t i = (size_t)0U; i < step; i++)\n  {\n    size_t j = i;\n    __m256i t = libcrux_ml_kem_vector_avx2_multiply_by_constant_f5(re->data[j + step], -1600);\n    re->data[j + step] = libcrux_ml_kem_vector_avx2_sub_f5(re->data[j], &t);\n    re->data[j] = libcrux_ml_kem_vector_avx2_add_f5(re->data[j], &t);\n  }\n}\n\ntypedef struct libcrux_ml_kem_vector_avx2_SIMD256Vector_x2_s\n{\n  __m256i fst;\n  __m256i snd;\n}\nlibcrux_ml_kem_vector_avx2_SIMD256Vector_x2;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_layer_int_vec_step\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_vector_avx2_SIMD256Vector_x2\nntt_layer_int_vec_step_84(__m256i a, __m256i b, int16_t zeta_r)\n{\n  __m256i t = libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(b, zeta_r);\n  b = libcrux_ml_kem_vector_avx2_sub_f5(a, &t);\n  a = libcrux_ml_kem_vector_avx2_add_f5(a, &t);\n  return (KRML_CLITERAL(libcrux_ml_kem_vector_avx2_SIMD256Vector_x2){ .fst = a, .snd = b });\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_4_plus\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nntt_at_layer_4_plus_84(size_t *zeta_i, Eurydice_arr_13 *re, size_t layer)\n{\n  size_t step = (size_t)1U << (uint32_t)layer;\n  for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++)\n  {\n    size_t round = i0;\n    zeta_i[0U]++;\n    size_t offset = round * step * (size_t)2U;\n    size_t offset_vec = offset / (size_t)16U;\n    size_t step_vec = step / (size_t)16U;\n    for (size_t i = offset_vec; i < offset_vec + step_vec; i++)\n    {\n      size_t j = i;\n      libcrux_ml_kem_vector_avx2_SIMD256Vector_x2\n      uu____0 =\n        ntt_layer_int_vec_step_84(re->data[j],\n          re->data[j + step_vec],\n          libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n      __m256i x = uu____0.fst;\n      __m256i y = uu____0.snd;\n      re->data[j] = x;\n      re->data[j + step_vec] = y;\n    }\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_3\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_3_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_ntt_layer_3_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U])););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_2_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_ntt_layer_2_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)1U));\n    zeta_i[0U]++;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_1_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_ntt_layer_1_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)3U));\n    zeta_i[0U] += (size_t)3U;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void poly_barrett_reduce_84(Eurydice_arr_13 *myself)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    myself->data[i0] = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(myself->data[i0]);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void poly_barrett_reduce_d6_84(Eurydice_arr_13 *self)\n{\n  poly_barrett_reduce_84(self);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_binomially_sampled_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_binomially_sampled_ring_element_84(Eurydice_arr_13 *re)\n{\n  ntt_at_layer_7_84(re);\n  size_t zeta_i = (size_t)1U;\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_84(&zeta_i, re);\n  ntt_at_layer_2_84(&zeta_i, re);\n  ntt_at_layer_1_84(&zeta_i, re);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- ETA= 2\n- ETA_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_d61(\n  Eurydice_arr_60 *re_as_ntt,\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_801 prf_inputs;\n  Eurydice_arr_fa repeat_expression[3U];\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_78(&prf_inputs, domain_separator);\n  Eurydice_arr_58 prf_outputs = PRFxN_41_3b(&prf_inputs);\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_16(Eurydice_array_to_slice_mut_78(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_84(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_73_ab1(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Given two `KyberPolynomialRingElement`s in their NTT representations,\n compute their product. Given two polynomials in the NTT domain `f^` and `ĵ`,\n the `iᵗʰ` coefficient of the product `k̂` is determined by the calculation:\n\n ```plaintext\n ĥ[2·i] + ĥ[2·i + 1]X = (f^[2·i] + f^[2·i + 1]X)·(ĝ[2·i] + ĝ[2·i + 1]X) mod (X² - ζ^(2·BitRev₇(i) + 1))\n ```\n\n This function almost implements <strong>Algorithm 10</strong> of the\n NIST FIPS 203 standard, which is reproduced below:\n\n ```plaintext\n Input: Two arrays fˆ ∈ ℤ₂₅₆ and ĝ ∈ ℤ₂₅₆.\n Output: An array ĥ ∈ ℤq.\n\n for(i ← 0; i < 128; i++)\n     (ĥ[2i], ĥ[2i+1]) ← BaseCaseMultiply(fˆ[2i], fˆ[2i+1], ĝ[2i], ĝ[2i+1], ζ^(2·BitRev₇(i) + 1))\n end for\n return ĥ\n ```\n We say \"almost\" because the coefficients of the ring element output by\n this function are in the Montgomery domain.\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nntt_multiply_84(Eurydice_arr_13 *myself, Eurydice_arr_13 *rhs)\n{\n  Eurydice_arr_13 out = ZERO_84();\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    out.data[i0] =\n      libcrux_ml_kem_vector_avx2_ntt_multiply_f5(&myself->data[i0],\n        &rhs->data[i0],\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)3U));\n  }\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nntt_multiply_d6_84(Eurydice_arr_13 *self, Eurydice_arr_13 *rhs)\n{\n  return ntt_multiply_84(self, rhs);\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_e3(Eurydice_arr_13 *myself, Eurydice_arr_13 *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    myself->data[i0] = libcrux_ml_kem_vector_avx2_add_f5(myself->data[i0], &rhs->data[i0]););\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_e3(Eurydice_arr_13 *self, Eurydice_arr_13 *rhs)\n{\n  add_to_ring_element_e3(self, rhs);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.to_standard_domain\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE __m256i to_standard_domain_84(__m256i vector)\n{\n  return\n    libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(vector,\n      LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_standard_error_reduce_84(Eurydice_arr_13 *myself, Eurydice_arr_13 *error)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t j = i;\n    __m256i coefficient_normal_form = to_standard_domain_84(myself->data[j]);\n    __m256i sum = libcrux_ml_kem_vector_avx2_add_f5(coefficient_normal_form, &error->data[j]);\n    __m256i red = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(sum);\n    myself->data[j] = red;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_standard_error_reduce_d6_84(Eurydice_arr_13 *self, Eurydice_arr_13 *error)\n{\n  add_standard_error_reduce_84(self, error);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_e3(\n  Eurydice_arr_60 *t_as_ntt,\n  Eurydice_arr_ea *matrix_A,\n  Eurydice_arr_60 *s_as_ntt,\n  Eurydice_arr_60 *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_60 *row = &matrix_A->data[i0];\n    Eurydice_arr_13 uu____0 = ZERO_d6_84();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR3(i1,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i1;\n      Eurydice_arr_13 *matrix_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_e3(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_84(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_ab1(\n  Eurydice_mut_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_60 *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_b6(key_generation_seed);\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_ea *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_281(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_d61(private_key, &prf_input, 0U);\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_ab1(&lvalue););\n  Eurydice_arr_60 error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_d61(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_e3(&public_key->t_as_ntt, &public_key->A, private_key, &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_13 call_mut_b4_e3(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_60 call_mut_22_e3(void **_)\n{\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_e3(&lvalue););\n  return arr_struct;\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.clone_c1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic inline Eurydice_arr_13 clone_c1_84(Eurydice_arr_13 *self)\n{\n  return\n    core_array__core__clone__Clone_for__T__N___clone((size_t)16U,\n      self,\n      __m256i,\n      Eurydice_arr_13);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_ea transpose_a_e3(Eurydice_arr_ea ind_cpa_a)\n{\n  Eurydice_arr_ea arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_e3(&lvalue););\n  Eurydice_arr_ea A = arr_struct;\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 uu____0 = clone_c1_84(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db1(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *out\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_ab1(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_ea A = transpose_a_e3(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_5f\n  pk_serialized =\n    serialize_public_key_79(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_41_78(Eurydice_array_to_slice_mut_ff(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_b6(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_mut_borrow_slice_u8 pk_hash\n)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_41_78(Eurydice_array_to_slice_mut_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_60, libcrux_ml_kem_polynomial_PolynomialRingElement_f6\n\n*/\ntypedef struct tuple_7f_s\n{\n  Eurydice_arr_60 fst;\n  Eurydice_arr_13 snd;\n}\ntuple_7f;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_f1_781(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_dd_781(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_d61(\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_60 *error_1\n)\n{\n  Eurydice_arr_801 prf_inputs;\n  Eurydice_arr_fa repeat_expression[3U];\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_78(&prf_inputs, domain_separator);\n  Eurydice_arr_58 prf_outputs = PRFxN_41_3b(&prf_inputs);\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_16(Eurydice_array_to_slice_mut_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF\nwith const generics\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_89 PRF_ec(Eurydice_mut_borrow_slice_u8 input)\n{\n  Eurydice_arr_89 digest = { .data = { 0U } };\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&digest), input);\n  return digest;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_89 PRF_41_3b0(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_13 call_mut_a8_e3(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_1_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)3U));\n    zeta_i[0U] -= (size_t)3U;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_2_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)1U));\n    zeta_i[0U]--;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_3\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_3_84(size_t *zeta_i, Eurydice_arr_13 *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    re->data[round] =\n      libcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step_f5(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U])););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.inv_ntt_layer_int_vec_step_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_vector_avx2_SIMD256Vector_x2\ninv_ntt_layer_int_vec_step_reduce_84(__m256i a, __m256i b, int16_t zeta_r)\n{\n  __m256i a_minus_b = libcrux_ml_kem_vector_avx2_sub_f5(b, &a);\n  a = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(libcrux_ml_kem_vector_avx2_add_f5(a, &b));\n  b = libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(a_minus_b, zeta_r);\n  return (KRML_CLITERAL(libcrux_ml_kem_vector_avx2_SIMD256Vector_x2){ .fst = a, .snd = b });\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_4_plus\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ninvert_ntt_at_layer_4_plus_84(size_t *zeta_i, Eurydice_arr_13 *re, size_t layer)\n{\n  size_t step = (size_t)1U << (uint32_t)layer;\n  for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++)\n  {\n    size_t round = i0;\n    zeta_i[0U]--;\n    size_t offset = round * step * (size_t)2U;\n    size_t offset_vec = offset / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;\n    size_t step_vec = step / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;\n    for (size_t i = offset_vec; i < offset_vec + step_vec; i++)\n    {\n      size_t j = i;\n      libcrux_ml_kem_vector_avx2_SIMD256Vector_x2\n      uu____0 =\n        inv_ntt_layer_int_vec_step_reduce_84(re->data[j],\n          re->data[j + step_vec],\n          libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n      __m256i x = uu____0.fst;\n      __m256i y = uu____0.snd;\n      re->data[j] = x;\n      re->data[j + step_vec] = y;\n    }\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_e3(Eurydice_arr_13 *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_84(&zeta_i, re);\n  invert_ntt_at_layer_2_84(&zeta_i, re);\n  invert_ntt_at_layer_3_84(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_error_reduce_84(Eurydice_arr_13 *myself, Eurydice_arr_13 *error)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t j = i;\n    __m256i\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(myself->data[j],\n        1441);\n    __m256i sum = libcrux_ml_kem_vector_avx2_add_f5(coefficient_normal_form, &error->data[j]);\n    __m256i red = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(sum);\n    myself->data[j] = red;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_error_reduce_d6_84(Eurydice_arr_13 *self, Eurydice_arr_13 *error)\n{\n  add_error_reduce_84(self, error);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_60\ncompute_vector_u_e3(\n  Eurydice_arr_ea *a_as_ntt,\n  Eurydice_arr_60 *r_as_ntt,\n  Eurydice_arr_60 *error_1\n)\n{\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_e3(&lvalue););\n  Eurydice_arr_60 result = arr_struct;\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_60 *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 *a_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_e3(&result.data[i1], &product););\n    invert_ntt_montgomery_e3(&result.data[i1]);\n    add_error_reduce_d6_84(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.compress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE __m256i compress_ciphertext_coefficient_ef(__m256i vector)\n{\n  __m256i\n  field_modulus_halved =\n    mm256_set1_epi32(((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 2);\n  __m256i compression_factor = mm256_set1_epi32(10321340);\n  __m256i coefficient_bits_mask = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)10) - 1);\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i compressed_low = mm256_slli_epi32(10, coefficients_low0, __m256i);\n  __m256i compressed_low0 = mm256_add_epi32(compressed_low, field_modulus_halved);\n  __m256i\n  compressed_low1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_low0,\n      compression_factor);\n  __m256i compressed_low2 = mm256_srli_epi32(3, compressed_low1, __m256i);\n  __m256i compressed_low3 = mm256_and_si256(compressed_low2, coefficient_bits_mask);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i compressed_high = mm256_slli_epi32(10, coefficients_high0, __m256i);\n  __m256i compressed_high0 = mm256_add_epi32(compressed_high, field_modulus_halved);\n  __m256i\n  compressed_high1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_high0,\n      compression_factor);\n  __m256i compressed_high2 = mm256_srli_epi32(3, compressed_high1, __m256i);\n  __m256i compressed_high3 = mm256_and_si256(compressed_high2, coefficient_bits_mask);\n  __m256i compressed = mm256_packs_epi32(compressed_low3, compressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE __m256i compress_ef(__m256i vector)\n{\n  return compress_ciphertext_coefficient_ef(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress_f5\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE __m256i compress_f5_ef(__m256i vector)\n{\n  return compress_ef(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_10\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- OUT_LEN= 320\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b0 compress_then_serialize_10_03(Eurydice_arr_13 *re)\n{\n  Eurydice_arr_b0 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i coefficient = compress_f5_ef(to_unsigned_field_modulus_84(re->data[i0]));\n    Eurydice_arr_fc bytes = libcrux_ml_kem_vector_avx2_serialize_10_f5(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d412(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)20U * i0,\n            .end = (size_t)20U * i0 + (size_t)20U\n          }\n        )),\n      Eurydice_array_to_slice_mut_8f(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.compress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE __m256i compress_ciphertext_coefficient_c4(__m256i vector)\n{\n  __m256i\n  field_modulus_halved =\n    mm256_set1_epi32(((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 2);\n  __m256i compression_factor = mm256_set1_epi32(10321340);\n  __m256i coefficient_bits_mask = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)11) - 1);\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i compressed_low = mm256_slli_epi32(11, coefficients_low0, __m256i);\n  __m256i compressed_low0 = mm256_add_epi32(compressed_low, field_modulus_halved);\n  __m256i\n  compressed_low1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_low0,\n      compression_factor);\n  __m256i compressed_low2 = mm256_srli_epi32(3, compressed_low1, __m256i);\n  __m256i compressed_low3 = mm256_and_si256(compressed_low2, coefficient_bits_mask);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i compressed_high = mm256_slli_epi32(11, coefficients_high0, __m256i);\n  __m256i compressed_high0 = mm256_add_epi32(compressed_high, field_modulus_halved);\n  __m256i\n  compressed_high1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_high0,\n      compression_factor);\n  __m256i compressed_high2 = mm256_srli_epi32(3, compressed_high1, __m256i);\n  __m256i compressed_high3 = mm256_and_si256(compressed_high2, coefficient_bits_mask);\n  __m256i compressed = mm256_packs_epi32(compressed_low3, compressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE __m256i compress_c4(__m256i vector)\n{\n  return compress_ciphertext_coefficient_c4(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress_f5\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE __m256i compress_f5_c4(__m256i vector)\n{\n  return compress_c4(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- COMPRESSION_FACTOR= 10\n- OUT_LEN= 320\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b0\ncompress_then_serialize_ring_element_u_81(Eurydice_arr_13 *re)\n{\n  return compress_then_serialize_10_03(re);\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- OUT_LEN= 960\n- COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_d4(Eurydice_arr_60 input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)960U / (size_t)3U),\n            .end = (i0 + (size_t)1U) * ((size_t)960U / (size_t)3U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b0 lvalue = compress_then_serialize_ring_element_u_81(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_56(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_7f\nencrypt_c1_781(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_arr_ea *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_60 arr_struct0;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_781(&lvalue););\n  Eurydice_arr_60 r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_d61(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_781(&lvalue););\n  Eurydice_arr_60 error_1 = arr_struct;\n  uint8_t\n  domain_separator = sample_ring_element_cbd_d61(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_41_3b0(Eurydice_array_to_slice_mut_b5(&prf_input));\n  Eurydice_arr_13\n  error_2 = sample_from_binomial_distribution_16(Eurydice_array_to_slice_mut_78(&prf_output));\n  Eurydice_arr_60 u = compute_vector_u_e3(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_d4(u, ciphertext);\n  return (KRML_CLITERAL(tuple_7f){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_message\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_message_84(Eurydice_arr_ec *serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    __m256i\n    coefficient_compressed =\n      libcrux_ml_kem_vector_avx2_deserialize_1_f5(Eurydice_array_to_subslice_mut_d44(serialized,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = (size_t)2U * i0,\n              .end = (size_t)2U * i0 + (size_t)2U\n            }\n          )));\n    re.data[i0] = libcrux_ml_kem_vector_avx2_decompress_1_f5(coefficient_compressed););\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nadd_message_error_reduce_84(\n  Eurydice_arr_13 *myself,\n  Eurydice_arr_13 *message,\n  Eurydice_arr_13 result\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(result.data[i0],\n        1441);\n    __m256i sum1 = libcrux_ml_kem_vector_avx2_add_f5(myself->data[i0], &message->data[i0]);\n    __m256i sum2 = libcrux_ml_kem_vector_avx2_add_f5(coefficient_normal_form, &sum1);\n    __m256i red = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(sum2);\n    result.data[i0] = red;\n  }\n  return result;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nadd_message_error_reduce_d6_84(\n  Eurydice_arr_13 *self,\n  Eurydice_arr_13 *message,\n  Eurydice_arr_13 result\n)\n{\n  return add_message_error_reduce_84(self, message, result);\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_ring_element_v_e3(\n  Eurydice_arr_60 *t_as_ntt,\n  Eurydice_arr_60 *r_as_ntt,\n  Eurydice_arr_13 *error_2,\n  Eurydice_arr_13 *message\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_e3(&result, &product););\n  invert_ntt_montgomery_e3(&result);\n  return add_message_error_reduce_d6_84(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.compress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE __m256i compress_ciphertext_coefficient_d1(__m256i vector)\n{\n  __m256i\n  field_modulus_halved =\n    mm256_set1_epi32(((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 2);\n  __m256i compression_factor = mm256_set1_epi32(10321340);\n  __m256i coefficient_bits_mask = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)4) - 1);\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i compressed_low = mm256_slli_epi32(4, coefficients_low0, __m256i);\n  __m256i compressed_low0 = mm256_add_epi32(compressed_low, field_modulus_halved);\n  __m256i\n  compressed_low1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_low0,\n      compression_factor);\n  __m256i compressed_low2 = mm256_srli_epi32(3, compressed_low1, __m256i);\n  __m256i compressed_low3 = mm256_and_si256(compressed_low2, coefficient_bits_mask);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i compressed_high = mm256_slli_epi32(4, coefficients_high0, __m256i);\n  __m256i compressed_high0 = mm256_add_epi32(compressed_high, field_modulus_halved);\n  __m256i\n  compressed_high1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_high0,\n      compression_factor);\n  __m256i compressed_high2 = mm256_srli_epi32(3, compressed_high1, __m256i);\n  __m256i compressed_high3 = mm256_and_si256(compressed_high2, coefficient_bits_mask);\n  __m256i compressed = mm256_packs_epi32(compressed_low3, compressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE __m256i compress_d1(__m256i vector)\n{\n  return compress_ciphertext_coefficient_d1(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress_f5\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE __m256i compress_f5_d1(__m256i vector)\n{\n  return compress_d1(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_4\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_4_84(Eurydice_arr_13 re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i coefficient = compress_f5_d1(to_unsigned_field_modulus_84(re.data[i0]));\n    Eurydice_array_u8x8 bytes = libcrux_ml_kem_vector_avx2_serialize_4_f5(coefficient);\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)8U * i0,\n            .end = (size_t)8U * i0 + (size_t)8U\n          }\n        )),\n      Eurydice_array_to_slice_mut_6e(&bytes),\n      uint8_t);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.compress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE __m256i compress_ciphertext_coefficient_f4(__m256i vector)\n{\n  __m256i\n  field_modulus_halved =\n    mm256_set1_epi32(((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS - 1) / 2);\n  __m256i compression_factor = mm256_set1_epi32(10321340);\n  __m256i coefficient_bits_mask = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)5) - 1);\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i compressed_low = mm256_slli_epi32(5, coefficients_low0, __m256i);\n  __m256i compressed_low0 = mm256_add_epi32(compressed_low, field_modulus_halved);\n  __m256i\n  compressed_low1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_low0,\n      compression_factor);\n  __m256i compressed_low2 = mm256_srli_epi32(3, compressed_low1, __m256i);\n  __m256i compressed_low3 = mm256_and_si256(compressed_low2, coefficient_bits_mask);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i compressed_high = mm256_slli_epi32(5, coefficients_high0, __m256i);\n  __m256i compressed_high0 = mm256_add_epi32(compressed_high, field_modulus_halved);\n  __m256i\n  compressed_high1 =\n    libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(compressed_high0,\n      compression_factor);\n  __m256i compressed_high2 = mm256_srli_epi32(3, compressed_high1, __m256i);\n  __m256i compressed_high3 = mm256_and_si256(compressed_high2, coefficient_bits_mask);\n  __m256i compressed = mm256_packs_epi32(compressed_low3, compressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE __m256i compress_f4(__m256i vector)\n{\n  return compress_ciphertext_coefficient_f4(vector);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress_f5\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE __m256i compress_f5_f4(__m256i vector)\n{\n  return compress_f4(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_5\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_5_84(Eurydice_arr_13 re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i\n    coefficients =\n      compress_f5_f4(libcrux_ml_kem_vector_avx2_to_unsigned_representative_f5(re.data[i0]));\n    Eurydice_arr_6d bytes = libcrux_ml_kem_vector_avx2_serialize_5_f5(coefficients);\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)10U * i0,\n            .end = (size_t)10U * i0 + (size_t)10U\n          }\n        )),\n      Eurydice_array_to_slice_mut_30(&bytes),\n      uint8_t);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- COMPRESSION_FACTOR= 4\n- OUT_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_15(Eurydice_arr_13 re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_4_84(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- V_COMPRESSION_FACTOR= 4\n- C2_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_15(\n  Eurydice_arr_60 *t_as_ntt,\n  Eurydice_arr_60 *r_as_ntt,\n  Eurydice_arr_13 *error_2,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_13 message_as_ring_element = deserialize_then_decompress_message_84(message);\n  Eurydice_arr_13\n  v = compute_ring_element_v_e3(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_15(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_LEN= 960\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2b\nencrypt_unpacked_281(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_2b ciphertext = { .data = { 0U } };\n  tuple_7f\n  uu____0 =\n    encrypt_c1_781(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d415(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)960U })));\n  Eurydice_arr_60 r_as_ntt = uu____0.fst;\n  Eurydice_arr_13 error_2 = uu____0.snd;\n  encrypt_c2_15(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f2(&ciphertext, (size_t)960U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a81(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_ef *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_b6(Eurydice_array_to_slice_mut_01(randomness),\n      Eurydice_array_to_slice_mut_01(&public_key->public_key_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_2b\n  ciphertext =\n    encrypt_unpacked_281(&public_key->ind_cpa_public_key,\n      randomness,\n      pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_f4){\n        .fst = libcrux_ml_kem_types_from_19_52(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic Eurydice_arr_13 call_mut_35_15(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_ef(__m256i vector)\n{\n  __m256i field_modulus = mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i two_pow_coefficient_bits = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)10));\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i decompressed_low = mm256_mullo_epi32(coefficients_low0, field_modulus);\n  __m256i decompressed_low0 = mm256_slli_epi32(1, decompressed_low, __m256i);\n  __m256i decompressed_low1 = mm256_add_epi32(decompressed_low0, two_pow_coefficient_bits);\n  __m256i decompressed_low2 = mm256_srli_epi32(10, decompressed_low1, __m256i);\n  __m256i decompressed_low3 = mm256_srli_epi32(1, decompressed_low2, __m256i);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i decompressed_high = mm256_mullo_epi32(coefficients_high0, field_modulus);\n  __m256i decompressed_high0 = mm256_slli_epi32(1, decompressed_high, __m256i);\n  __m256i decompressed_high1 = mm256_add_epi32(decompressed_high0, two_pow_coefficient_bits);\n  __m256i decompressed_high2 = mm256_srli_epi32(10, decompressed_high1, __m256i);\n  __m256i decompressed_high3 = mm256_srli_epi32(1, decompressed_high2, __m256i);\n  __m256i compressed = mm256_packs_epi32(decompressed_low3, decompressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.decompress_ciphertext_coefficient_f5\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_f5_ef(__m256i vector)\n{\n  return decompress_ciphertext_coefficient_ef(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_10\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_10_84(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)20U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)20U,\n            .end = i0 * (size_t)20U + (size_t)20U\n          }\n        ));\n    __m256i coefficient = libcrux_ml_kem_vector_avx2_deserialize_10_f5(bytes);\n    re.data[i0] = decompress_ciphertext_coefficient_f5_ef(coefficient);\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_c4(__m256i vector)\n{\n  __m256i field_modulus = mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i two_pow_coefficient_bits = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)11));\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i decompressed_low = mm256_mullo_epi32(coefficients_low0, field_modulus);\n  __m256i decompressed_low0 = mm256_slli_epi32(1, decompressed_low, __m256i);\n  __m256i decompressed_low1 = mm256_add_epi32(decompressed_low0, two_pow_coefficient_bits);\n  __m256i decompressed_low2 = mm256_srli_epi32(11, decompressed_low1, __m256i);\n  __m256i decompressed_low3 = mm256_srli_epi32(1, decompressed_low2, __m256i);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i decompressed_high = mm256_mullo_epi32(coefficients_high0, field_modulus);\n  __m256i decompressed_high0 = mm256_slli_epi32(1, decompressed_high, __m256i);\n  __m256i decompressed_high1 = mm256_add_epi32(decompressed_high0, two_pow_coefficient_bits);\n  __m256i decompressed_high2 = mm256_srli_epi32(11, decompressed_high1, __m256i);\n  __m256i decompressed_high3 = mm256_srli_epi32(1, decompressed_high2, __m256i);\n  __m256i compressed = mm256_packs_epi32(decompressed_low3, decompressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.decompress_ciphertext_coefficient_f5\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_f5_c4(__m256i vector)\n{\n  return decompress_ciphertext_coefficient_c4(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_11_84(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)22U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)22U,\n            .end = i0 * (size_t)22U + (size_t)22U\n          }\n        ));\n    __m256i coefficient = libcrux_ml_kem_vector_avx2_deserialize_11_f5(bytes);\n    re.data[i0] = decompress_ciphertext_coefficient_f5_c4(coefficient);\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_ring_element_u_d0(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_10_84(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- VECTOR_U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE void ntt_vector_u_d0(Eurydice_arr_13 *re)\n{\n  size_t zeta_i = (size_t)0U;\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)7U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_84(&zeta_i, re);\n  ntt_at_layer_2_84(&zeta_i, re);\n  ntt_at_layer_1_84(&zeta_i, re);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_60\ndeserialize_then_decompress_u_15(Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_15(&lvalue););\n  Eurydice_arr_60 u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)1088U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_mut_d415(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_d0(u_bytes);\n    ntt_vector_u_d0(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_d1(__m256i vector)\n{\n  __m256i field_modulus = mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i two_pow_coefficient_bits = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)4));\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i decompressed_low = mm256_mullo_epi32(coefficients_low0, field_modulus);\n  __m256i decompressed_low0 = mm256_slli_epi32(1, decompressed_low, __m256i);\n  __m256i decompressed_low1 = mm256_add_epi32(decompressed_low0, two_pow_coefficient_bits);\n  __m256i decompressed_low2 = mm256_srli_epi32(4, decompressed_low1, __m256i);\n  __m256i decompressed_low3 = mm256_srli_epi32(1, decompressed_low2, __m256i);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i decompressed_high = mm256_mullo_epi32(coefficients_high0, field_modulus);\n  __m256i decompressed_high0 = mm256_slli_epi32(1, decompressed_high, __m256i);\n  __m256i decompressed_high1 = mm256_add_epi32(decompressed_high0, two_pow_coefficient_bits);\n  __m256i decompressed_high2 = mm256_srli_epi32(4, decompressed_high1, __m256i);\n  __m256i decompressed_high3 = mm256_srli_epi32(1, decompressed_high2, __m256i);\n  __m256i compressed = mm256_packs_epi32(decompressed_low3, decompressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.decompress_ciphertext_coefficient_f5\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_f5_d1(__m256i vector)\n{\n  return decompress_ciphertext_coefficient_d1(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_4\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_4_84(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)8U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)8U,\n            .end = i0 * (size_t)8U + (size_t)8U\n          }\n        ));\n    __m256i coefficient = libcrux_ml_kem_vector_avx2_deserialize_4_f5(bytes);\n    re.data[i0] = decompress_ciphertext_coefficient_f5_d1(coefficient);\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_f4(__m256i vector)\n{\n  __m256i field_modulus = mm256_set1_epi32((int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  __m256i two_pow_coefficient_bits = mm256_set1_epi32((int32_t)((uint32_t)1 << (uint32_t)5));\n  __m128i coefficients_low = mm256_castsi256_si128(vector);\n  __m256i coefficients_low0 = mm256_cvtepi16_epi32(coefficients_low);\n  __m256i decompressed_low = mm256_mullo_epi32(coefficients_low0, field_modulus);\n  __m256i decompressed_low0 = mm256_slli_epi32(1, decompressed_low, __m256i);\n  __m256i decompressed_low1 = mm256_add_epi32(decompressed_low0, two_pow_coefficient_bits);\n  __m256i decompressed_low2 = mm256_srli_epi32(5, decompressed_low1, __m256i);\n  __m256i decompressed_low3 = mm256_srli_epi32(1, decompressed_low2, __m256i);\n  __m128i coefficients_high = mm256_extracti128_si256(1, vector, __m128i);\n  __m256i coefficients_high0 = mm256_cvtepi16_epi32(coefficients_high);\n  __m256i decompressed_high = mm256_mullo_epi32(coefficients_high0, field_modulus);\n  __m256i decompressed_high0 = mm256_slli_epi32(1, decompressed_high, __m256i);\n  __m256i decompressed_high1 = mm256_add_epi32(decompressed_high0, two_pow_coefficient_bits);\n  __m256i decompressed_high2 = mm256_srli_epi32(5, decompressed_high1, __m256i);\n  __m256i decompressed_high3 = mm256_srli_epi32(1, decompressed_high2, __m256i);\n  __m256i compressed = mm256_packs_epi32(decompressed_low3, decompressed_high3);\n  return mm256_permute4x64_epi64(216, compressed, __m256i);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.avx2.decompress_ciphertext_coefficient_f5\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE __m256i decompress_ciphertext_coefficient_f5_f4(__m256i vector)\n{\n  return decompress_ciphertext_coefficient_f4(vector);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_5\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_5_84(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_13 re = ZERO_d6_84();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)10U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)10U,\n            .end = i0 * (size_t)10U + (size_t)10U\n          }\n        ));\n    re.data[i0] = libcrux_ml_kem_vector_avx2_deserialize_5_f5(bytes);\n    re.data[i0] = decompress_ciphertext_coefficient_f5_f4(re.data[i0]);\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_ring_element_v_79(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_4_84(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsubtract_reduce_84(Eurydice_arr_13 *myself, Eurydice_arr_13 b)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(b.data[i0],\n        1441);\n    __m256i diff = libcrux_ml_kem_vector_avx2_sub_f5(myself->data[i0], &coefficient_normal_form);\n    __m256i red = libcrux_ml_kem_vector_avx2_barrett_reduce_f5(diff);\n    b.data[i0] = red;\n  }\n  return b;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsubtract_reduce_d6_84(Eurydice_arr_13 *self, Eurydice_arr_13 b)\n{\n  return subtract_reduce_84(self, b);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_message_e3(\n  Eurydice_arr_13 *v,\n  Eurydice_arr_60 *secret_as_ntt,\n  Eurydice_arr_60 *u_as_ntt\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_e3(&result, &product););\n  invert_ntt_montgomery_e3(&result);\n  return subtract_reduce_d6_84(v, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_message\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec compress_then_serialize_message_84(Eurydice_arr_13 re)\n{\n  Eurydice_arr_ec serialized = { .data = { 0U } };\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    __m256i coefficient = to_unsigned_field_modulus_84(re.data[i0]);\n    __m256i coefficient_compressed = libcrux_ml_kem_vector_avx2_compress_1_f5(coefficient);\n    Eurydice_array_u8x2 bytes = libcrux_ml_kem_vector_avx2_serialize_1_f5(coefficient_compressed);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)2U * i0,\n            .end = (size_t)2U * i0 + (size_t)2U\n          }\n        )),\n      Eurydice_array_to_slice_mut_82(&bytes),\n      uint8_t););\n  return serialized;\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_3e(Eurydice_arr_60 *secret_key, Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_60 u_as_ntt = deserialize_then_decompress_u_15(ciphertext);\n  Eurydice_arr_13\n  v =\n    deserialize_then_decompress_ring_element_v_79(Eurydice_array_to_subslice_from_mut_5f2(ciphertext,\n        (size_t)960U));\n  Eurydice_arr_13 message = compute_message_e3(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_84(message);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF\nwith const generics\n- LEN= 32\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec PRF_ce(Eurydice_mut_borrow_slice_u8 input)\n{\n  Eurydice_arr_ec digest = { .data = { 0U } };\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_01(&digest), input);\n  return digest;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 3\n- LEN= 32\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec PRF_41_3b(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d91(\n  libcrux_ml_kem_mlkem768_avx2_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_3e(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_78(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_af\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_66(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f3(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_52(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_3b(Eurydice_array_to_slice_mut_81(&to_hash));\n  Eurydice_arr_2b\n  expected_ciphertext =\n    encrypt_unpacked_281(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_mut_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_52(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_mut_06(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_13 call_mut_0b_e3(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_60\ndeserialize_ring_elements_reduced_out_e3(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_e3(&lvalue););\n  Eurydice_arr_60 deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_e3(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_79(Eurydice_arr_5f *public_key)\n{\n  Eurydice_arr_60\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_e3(Eurydice_array_to_subslice_to_mut_211(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)));\n  Eurydice_arr_5f\n  public_key_serialized =\n    serialize_public_key_79(&deserialized_pk,\n      Eurydice_array_to_subslice_from_mut_5f4(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)));\n  return Eurydice_array_eq((size_t)1184U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_a4(Eurydice_arr_7d *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_41_78(Eurydice_array_to_subslice_mut_d418(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)3U,\n            .end = (size_t)768U * (size_t)3U + (size_t)32U\n          }\n        )));\n  Eurydice_mut_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_mut_d418(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)3U + (size_t)32U,\n          .end = (size_t)768U * (size_t)3U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_mut((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_d50(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_a4(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- PRIVATE_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair768\ngenerate_keypair_cc1(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_60 private_key = default_70_e3();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef public_key = default_8b_e3();\n  generate_keypair_unpacked_ab1(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_15(&public_key, &private_key);\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SERIALIZED_KEY_LEN= 2400\n*/\nstatic KRML_MUSTINLINE void\nserialize_kem_secret_key_mut_a4(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_7d *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d418(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d418(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d418(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_41_78(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d418(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- SERIALIZED_KEY_LEN= 2400\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7d\nserialize_kem_secret_key_a4(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_7d out = { .data = { 0U } };\n  serialize_kem_secret_key_mut_a4(private_key, public_key, implicit_rejection_value, &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_db1(Eurydice_arr_c7 *randomness)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair768\n  uu____0 = generate_keypair_cc1(ind_cpa_keypair_randomness);\n  Eurydice_arr_0e ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_5f public_key = uu____0.snd;\n  Eurydice_arr_7d\n  secret_key_serialized =\n    serialize_kem_secret_key_a4(Eurydice_array_to_slice_mut_f4(&ind_cpa_private_key),\n      Eurydice_array_to_slice_mut_ff(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_7d private_key = libcrux_ml_kem_types_from_b2_79(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_bc(private_key,\n      libcrux_ml_kem_types_from_51_3d(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_b6(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_911(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_e3(Eurydice_slice_subslice_to_mut_72(public_key,\n      (size_t)1152U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_mut_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_mut_6d(public_key, (size_t)1152U);\n  Eurydice_arr_ea *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_281(uu____0, &lvalue, false);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef\nbuild_unpacked_public_key_911(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef\n  unpacked_public_key = default_8b_e3();\n  build_unpacked_public_key_mut_911(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_LEN= 960\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2b\nencrypt_281(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_ef\n  unpacked_public_key = build_unpacked_public_key_911(public_key);\n  return encrypt_unpacked_281(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_a4(Eurydice_mut_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_encapsulate_a11(\n  Eurydice_arr_5f *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_b6(Eurydice_array_to_slice_mut_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_41_78(Eurydice_array_to_slice_mut_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_41_78(Eurydice_array_to_slice_mut_17(&to_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_2b\n  ciphertext =\n    encrypt_281(Eurydice_array_to_slice_mut_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_2b uu____2 = libcrux_ml_kem_types_from_19_52(ciphertext);\n  return (KRML_CLITERAL(tuple_f4){ .fst = uu____2, .snd = kdf_39_a4(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic Eurydice_arr_13 call_mut_0b_3e(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_3e(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_60 arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_3e(&lvalue););\n  Eurydice_arr_60 secret_key_unpacked = arr_struct;\n  deserialize_vector_e3(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_3e(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_661(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_64(Eurydice_array_to_slice_mut_51(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_3e(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_78(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_af to_hash = libcrux_ml_kem_utils_into_padded_array_66(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f3(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_52(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_3b(Eurydice_array_to_slice_mut_81(&to_hash));\n  Eurydice_arr_2b\n  expected_ciphertext = encrypt_281(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_mut_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_a4(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_a4(shared_secret0);\n  Eurydice_mut_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_52(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_mut_06(&expected_ciphertext),\n      Eurydice_array_to_slice_mut_01(&shared_secret),\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret0));\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_5b(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_3b *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_mut_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_13 uu____0 = deserialize_to_reduced_ring_element_84(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40 shake128_init_absorb_final_23(Eurydice_arr_56 *input)\n{\n  Eurydice_arr_c40 state = libcrux_sha3_avx2_x4_incremental_init();\n  libcrux_sha3_avx2_x4_incremental_shake128_absorb_final(&state,\n    Eurydice_array_to_slice_mut_e9(input->data),\n    Eurydice_array_to_slice_mut_e9(&input->data[1U]),\n    Eurydice_array_to_slice_mut_e9(&input->data[2U]),\n    Eurydice_array_to_slice_mut_e9(&input->data[3U]));\n  return state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final_41\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40\nshake128_init_absorb_final_41_23(Eurydice_arr_56 *input)\n{\n  return shake128_init_absorb_final_23(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7c0\nshake128_squeeze_first_three_blocks_23(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_7c0\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_79 out0 = { .data = { 0U } };\n  Eurydice_arr_79 out1 = { .data = { 0U } };\n  Eurydice_arr_79 out2 = { .data = { 0U } };\n  Eurydice_arr_79 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(st,\n    Eurydice_array_to_slice_mut_48(&out0),\n    Eurydice_array_to_slice_mut_48(&out1),\n    Eurydice_array_to_slice_mut_48(&out2),\n    Eurydice_array_to_slice_mut_48(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  out.data[3U] = out3;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks_41\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7c0\nshake128_squeeze_first_three_blocks_41_23(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_first_three_blocks_23(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_74(\n  Eurydice_arr_7c0 *randomness,\n  Eurydice_arr_cc *sampled_coefficients,\n  Eurydice_arr_24 *out\n)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_mut_d49(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9c shake128_squeeze_next_block_23(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_9c\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c5 out0 = { .data = { 0U } };\n  Eurydice_arr_c5 out1 = { .data = { 0U } };\n  Eurydice_arr_c5 out2 = { .data = { 0U } };\n  Eurydice_arr_c5 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(st,\n    Eurydice_array_to_slice_mut_2c(&out0),\n    Eurydice_array_to_slice_mut_2c(&out1),\n    Eurydice_array_to_slice_mut_2c(&out2),\n    Eurydice_array_to_slice_mut_2c(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  out.data[3U] = out3;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block_41\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9c\nshake128_squeeze_next_block_41_23(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_next_block_23(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_740(\n  Eurydice_arr_9c *randomness,\n  Eurydice_arr_cc *sampled_coefficients,\n  Eurydice_arr_24 *out\n)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_mut_d41(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_13 call_mut_0a_280(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_mut_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b sample_from_xof_280(Eurydice_arr_56 *seeds)\n{\n  Eurydice_arr_cc sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_24\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c40 xof_state = shake128_init_absorb_final_41_23(seeds);\n  Eurydice_arr_7c0 randomness0 = shake128_squeeze_first_three_blocks_41_23(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_74(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_9c randomness = shake128_squeeze_next_block_41_23(&xof_state);\n      done = sample_from_uniform_distribution_next_740(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_3b arr_mapped_str;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_280(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_280(Eurydice_arr_cd *A_transpose, Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_56 seeds;\n    Eurydice_arr_31 repeat_expression[4U];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_3b sampled = sample_from_xof_280(&seeds);\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.H_41\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec H_41_23(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a0(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_mut_212(public_key, (size_t)1536U);\n  deserialize_ring_elements_reduced_5b(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_mut_5f5(public_key,\n        (size_t)1536U));\n  Eurydice_arr_cd *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_mut_5f5(public_key,\n        (size_t)1536U));\n  sample_matrix_A_280(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_41_23(Eurydice_array_to_slice_mut_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_5b(Eurydice_arr_3b *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_84(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_74(\n  Eurydice_arr_3b *t_as_ntt,\n  Eurydice_mut_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_d1 *serialized\n)\n{\n  serialize_vector_5b(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d419(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f5(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_74(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *self,\n  Eurydice_arr_d1 *serialized\n)\n{\n  serialize_public_key_mut_74(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_74(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_74(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nserialize_public_key_74(Eurydice_arr_3b *t_as_ntt, Eurydice_mut_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_d1 public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_74(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nserialized_dd_74(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_d9(serialize_public_key_74(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_74(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self\n)\n{\n  return serialized_dd_74(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PRIVATE_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair1024\nserialize_unpacked_secret_key_72(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_3b *private_key\n)\n{\n  Eurydice_arr_d1\n  public_key_serialized =\n    serialize_public_key_74(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&public_key->seed_for_A));\n  Eurydice_arr_df secret_key_serialized = { .data = { 0U } };\n  serialize_vector_5b(private_key, Eurydice_array_to_slice_mut_2f(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair1024){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_f8(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_a8 *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair1024\n  uu____0 =\n    serialize_unpacked_secret_key_72(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_df ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_d1 ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_4c(Eurydice_array_to_slice_mut_2f(&ind_cpa_private_key),\n    Eurydice_array_to_slice_mut_b50(&ind_cpa_public_key),\n    Eurydice_array_to_slice_mut_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_f8(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_a8 sk = libcrux_ml_kem_types_default_d3_0e();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_f8(self, &sk);\n  return sk;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_5b(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_3b *secret_as_ntt)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_84(Eurydice_slice_subslice_mut_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_13 call_mut_0a_7e0(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_mut_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b sample_from_xof_7e0(Eurydice_arr_56 *seeds)\n{\n  Eurydice_arr_cc sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_24\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_4a\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_23(seeds);\n  Eurydice_arr_7c0\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_23(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_74(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_9c\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_23(&xof_state);\n      done = sample_from_uniform_distribution_next_740(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_3b arr_mapped_str;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_7e0(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_7e0(Eurydice_arr_cd *A_transpose, Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_56 seeds;\n    Eurydice_arr_31 repeat_expression[4U];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_3b sampled = sample_from_xof_7e0(&seeds);\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_100(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_5b(Eurydice_slice_subslice_to_mut_72(public_key,\n      (size_t)1536U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_mut_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_mut_6d(public_key, (size_t)1536U);\n  Eurydice_arr_cd *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_7e0(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_b2(\n  Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e3(Eurydice_array_to_slice_mut_68(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_5b(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_100(ind_cpa_public_key,\n    &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_mut_6d(ind_cpa_public_key, (size_t)1536U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_3b default_70_5b(void)\n{\n  Eurydice_arr_3b lit;\n  Eurydice_arr_13 repeat_expression[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n  memcpy(lit.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_13));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 default_8b_5b(void)\n{\n  Eurydice_arr_3b uu____0;\n  Eurydice_arr_13 repeat_expression0[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression0[i] = ZERO_d6_84(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)4U * sizeof (Eurydice_arr_13));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_3b repeat_expression1[4U];\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    Eurydice_arr_3b lit;\n    Eurydice_arr_13 repeat_expression[4U];\n    KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n    memcpy(lit.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_13));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)4U * sizeof (Eurydice_arr_3b));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4\nlibcrux_ml_kem_ind_cca_unpacked_default_30_5b(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4){\n        .ind_cpa_public_key = default_8b_5b(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_5b(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_d4\n  uu____0 =\n    { .ind_cpa_private_key = default_70_5b(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_5b()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.G_41\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7 G_41_23(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_39(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d411(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)4U;\n  return G_41_23(Eurydice_array_to_slice_mut_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b0 PRFxN_f5(Eurydice_arr_890 *input)\n{\n  Eurydice_arr_3b0\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_89 out0 = { .data = { 0U } };\n  Eurydice_arr_89 out1 = { .data = { 0U } };\n  Eurydice_arr_89 out2 = { .data = { 0U } };\n  Eurydice_arr_89 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_shake256(Eurydice_array_to_slice_mut_b5(input->data),\n    Eurydice_array_to_slice_mut_b5(&input->data[1U]),\n    Eurydice_array_to_slice_mut_b5(&input->data[2U]),\n    Eurydice_array_to_slice_mut_b5(&input->data[3U]),\n    Eurydice_array_to_slice_mut_78(&out0),\n    Eurydice_array_to_slice_mut_78(&out1),\n    Eurydice_array_to_slice_mut_78(&out2),\n    Eurydice_array_to_slice_mut_78(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  out.data[2U] = out2;\n  out.data[3U] = out3;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN_41\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b0 PRFxN_41_f5(Eurydice_arr_890 *input)\n{\n  return PRFxN_f5(input);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- ETA= 2\n- ETA_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_d60(\n  Eurydice_arr_3b *re_as_ntt,\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_890 prf_inputs;\n  Eurydice_arr_fa repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_23(&prf_inputs, domain_separator);\n  Eurydice_arr_3b0 prf_outputs = PRFxN_41_f5(&prf_inputs);\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_16(Eurydice_array_to_slice_mut_78(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_84(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_73_ab0(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_5b(Eurydice_arr_13 *myself, Eurydice_arr_13 *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    myself->data[i0] = libcrux_ml_kem_vector_avx2_add_f5(myself->data[i0], &rhs->data[i0]););\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_5b(Eurydice_arr_13 *self, Eurydice_arr_13 *rhs)\n{\n  add_to_ring_element_5b(self, rhs);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_5b(\n  Eurydice_arr_3b *t_as_ntt,\n  Eurydice_arr_cd *matrix_A,\n  Eurydice_arr_3b *s_as_ntt,\n  Eurydice_arr_3b *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_3b *row = &matrix_A->data[i0];\n    Eurydice_arr_13 uu____0 = ZERO_d6_84();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR4(i1,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i1;\n      Eurydice_arr_13 *matrix_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_5b(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_84(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_ab0(\n  Eurydice_mut_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_3b *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_39(key_generation_seed);\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_cd *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_280(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_d60(private_key, &prf_input, 0U);\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_ab0(&lvalue););\n  Eurydice_arr_3b error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_d60(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_5b(&public_key->t_as_ntt, &public_key->A, private_key, &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_13 call_mut_b4_5b(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_3b call_mut_22_5b(void **_)\n{\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_5b(&lvalue););\n  return arr_struct;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_cd transpose_a_5b(Eurydice_arr_cd ind_cpa_a)\n{\n  Eurydice_arr_cd arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_5b(&lvalue););\n  Eurydice_arr_cd A = arr_struct;\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 uu____0 = clone_c1_84(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db0(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *out\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_ab0(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_cd A = transpose_a_5b(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_d1\n  pk_serialized =\n    serialize_public_key_74(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_41_23(Eurydice_array_to_slice_mut_b50(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_39(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_mut_borrow_slice_u8 pk_hash\n)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_41_23(Eurydice_array_to_slice_mut_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_3b, libcrux_ml_kem_polynomial_PolynomialRingElement_f6\n\n*/\ntypedef struct tuple_03_s\n{\n  Eurydice_arr_3b fst;\n  Eurydice_arr_13 snd;\n}\ntuple_03;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_f1_780(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_dd_780(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_d60(\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_3b *error_1\n)\n{\n  Eurydice_arr_890 prf_inputs;\n  Eurydice_arr_fa repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_23(&prf_inputs, domain_separator);\n  Eurydice_arr_3b0 prf_outputs = PRFxN_41_f5(&prf_inputs);\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_16(Eurydice_array_to_slice_mut_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_89 PRF_41_f50(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_13 call_mut_a8_5b(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_5b(Eurydice_arr_13 *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_84(&zeta_i, re);\n  invert_ntt_at_layer_2_84(&zeta_i, re);\n  invert_ntt_at_layer_3_84(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b\ncompute_vector_u_5b(\n  Eurydice_arr_cd *a_as_ntt,\n  Eurydice_arr_3b *r_as_ntt,\n  Eurydice_arr_3b *error_1\n)\n{\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_5b(&lvalue););\n  Eurydice_arr_3b result = arr_struct;\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_3b *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 *a_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_5b(&result.data[i1], &product););\n    invert_ntt_montgomery_5b(&result.data[i1]);\n    add_error_reduce_d6_84(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- OUT_LEN= 352\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_e7 compress_then_serialize_11_fe(Eurydice_arr_13 *re)\n{\n  Eurydice_arr_e7 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    __m256i\n    coefficient =\n      compress_f5_c4(libcrux_ml_kem_vector_avx2_to_unsigned_representative_f5(re->data[i0]));\n    Eurydice_arr_80 bytes = libcrux_ml_kem_vector_avx2_serialize_11_f5(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d421(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)22U * i0,\n            .end = (size_t)22U * i0 + (size_t)22U\n          }\n        )),\n      Eurydice_array_to_slice_mut_98(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- COMPRESSION_FACTOR= 11\n- OUT_LEN= 352\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_e7\ncompress_then_serialize_ring_element_u_d4(Eurydice_arr_13 *re)\n{\n  return compress_then_serialize_11_fe(re);\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- OUT_LEN= 1408\n- COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_f8(Eurydice_arr_3b input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)1408U / (size_t)4U),\n            .end = (i0 + (size_t)1U) * ((size_t)1408U / (size_t)4U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_e7 lvalue = compress_then_serialize_ring_element_u_d4(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_25(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_03\nencrypt_c1_780(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_arr_cd *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_3b arr_struct0;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_780(&lvalue););\n  Eurydice_arr_3b r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_d60(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_780(&lvalue););\n  Eurydice_arr_3b error_1 = arr_struct;\n  uint8_t\n  domain_separator = sample_ring_element_cbd_d60(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_41_f50(Eurydice_array_to_slice_mut_b5(&prf_input));\n  Eurydice_arr_13\n  error_2 = sample_from_binomial_distribution_16(Eurydice_array_to_slice_mut_78(&prf_output));\n  Eurydice_arr_3b u = compute_vector_u_5b(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_f8(u, ciphertext);\n  return (KRML_CLITERAL(tuple_03){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_ring_element_v_5b(\n  Eurydice_arr_3b *t_as_ntt,\n  Eurydice_arr_3b *r_as_ntt,\n  Eurydice_arr_13 *error_2,\n  Eurydice_arr_13 *message\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_5b(&result, &product););\n  invert_ntt_montgomery_5b(&result);\n  return add_message_error_reduce_d6_84(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- COMPRESSION_FACTOR= 5\n- OUT_LEN= 160\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_72(Eurydice_arr_13 re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_5_84(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- V_COMPRESSION_FACTOR= 5\n- C2_LEN= 160\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_72(\n  Eurydice_arr_3b *t_as_ntt,\n  Eurydice_arr_3b *r_as_ntt,\n  Eurydice_arr_13 *error_2,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_13 message_as_ring_element = deserialize_then_decompress_message_84(message);\n  Eurydice_arr_13\n  v = compute_ring_element_v_5b(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_72(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_LEN= 1408\n- C2_LEN= 160\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nencrypt_unpacked_280(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_d1 ciphertext = { .data = { 0U } };\n  tuple_03\n  uu____0 =\n    encrypt_c1_780(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d419(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)1408U })));\n  Eurydice_arr_3b r_as_ntt = uu____0.fst;\n  Eurydice_arr_13 error_2 = uu____0.snd;\n  encrypt_c2_72(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f5(&ciphertext, (size_t)1408U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a80(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_d4 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_39(Eurydice_array_to_slice_mut_01(randomness),\n      Eurydice_array_to_slice_mut_01(&public_key->public_key_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_d1\n  ciphertext =\n    encrypt_unpacked_280(&public_key->ind_cpa_public_key,\n      randomness,\n      pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_25){\n        .fst = libcrux_ml_kem_types_from_19_d9(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- U_COMPRESSION_FACTOR= 11\n*/\nstatic Eurydice_arr_13 call_mut_35_72(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_ring_element_u_95(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_11_84(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- VECTOR_U_COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE void ntt_vector_u_95(Eurydice_arr_13 *re)\n{\n  size_t zeta_i = (size_t)0U;\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)7U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_84(&zeta_i, re);\n  ntt_at_layer_2_84(&zeta_i, re);\n  ntt_at_layer_1_84(&zeta_i, re);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- U_COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b\ndeserialize_then_decompress_u_72(Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_72(&lvalue););\n  Eurydice_arr_3b u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)1568U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_mut_d419(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_95(u_bytes);\n    ntt_vector_u_95(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_ring_element_v_74(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_5_84(serialized);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_message_5b(\n  Eurydice_arr_13 *v,\n  Eurydice_arr_3b *secret_as_ntt,\n  Eurydice_arr_3b *u_as_ntt\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_5b(&result, &product););\n  invert_ntt_montgomery_5b(&result);\n  return subtract_reduce_d6_84(v, result);\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_b2(Eurydice_arr_3b *secret_key, Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_3b u_as_ntt = deserialize_then_decompress_u_72(ciphertext);\n  Eurydice_arr_13\n  v =\n    deserialize_then_decompress_ring_element_v_74(Eurydice_array_to_subslice_from_mut_5f5(ciphertext,\n        (size_t)1408U));\n  Eurydice_arr_13 message = compute_message_5b(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_84(message);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 4\n- LEN= 32\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec PRF_41_f5(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d90(\n  libcrux_ml_kem_mlkem1024_avx2_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_b2(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_23(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_14\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_49(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f6(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_d9(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_f5(Eurydice_array_to_slice_mut_720(&to_hash));\n  Eurydice_arr_d1\n  expected_ciphertext =\n    encrypt_unpacked_280(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_mut_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_d9(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_mut_b50(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_13 call_mut_0b_5b(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_3b\ndeserialize_ring_elements_reduced_out_5b(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_5b(&lvalue););\n  Eurydice_arr_3b deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_5b(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_74(Eurydice_arr_d1 *public_key)\n{\n  Eurydice_arr_3b\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_5b(Eurydice_array_to_subslice_to_mut_212(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)));\n  Eurydice_arr_d1\n  public_key_serialized =\n    serialize_public_key_74(&deserialized_pk,\n      Eurydice_array_to_subslice_from_mut_5f5(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)));\n  return Eurydice_array_eq((size_t)1568U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_f8(Eurydice_arr_a8 *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_41_23(Eurydice_array_to_subslice_mut_d422(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)4U,\n            .end = (size_t)768U * (size_t)4U + (size_t)32U\n          }\n        )));\n  Eurydice_mut_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_mut_d422(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)4U + (size_t)32U,\n          .end = (size_t)768U * (size_t)4U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_mut((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_b3(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_f8(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- PRIVATE_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair1024\ngenerate_keypair_cc0(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_3b private_key = default_70_5b();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 public_key = default_8b_5b();\n  generate_keypair_unpacked_ab0(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_72(&public_key, &private_key);\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SERIALIZED_KEY_LEN= 3168\n*/\nstatic KRML_MUSTINLINE void\nserialize_kem_secret_key_mut_f8(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_a8 *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d422(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d422(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d422(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_41_23(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d422(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- SERIALIZED_KEY_LEN= 3168\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_a8\nserialize_kem_secret_key_f8(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_a8 out = { .data = { 0U } };\n  serialize_kem_secret_key_mut_f8(private_key, public_key, implicit_rejection_value, &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_db0(Eurydice_arr_c7 *randomness)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair1024\n  uu____0 = generate_keypair_cc0(ind_cpa_keypair_randomness);\n  Eurydice_arr_df ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_d1 public_key = uu____0.snd;\n  Eurydice_arr_a8\n  secret_key_serialized =\n    serialize_kem_secret_key_f8(Eurydice_array_to_slice_mut_2f(&ind_cpa_private_key),\n      Eurydice_array_to_slice_mut_b50(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_a8 private_key = libcrux_ml_kem_types_from_b2_0e(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_70(private_key,\n      libcrux_ml_kem_types_from_51_d9(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_39(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_910(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_5b(Eurydice_slice_subslice_to_mut_72(public_key,\n      (size_t)1536U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_mut_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_mut_6d(public_key, (size_t)1536U);\n  Eurydice_arr_cd *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_280(uu____0, &lvalue, false);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4\nbuild_unpacked_public_key_910(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4\n  unpacked_public_key = default_8b_5b();\n  build_unpacked_public_key_mut_910(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_LEN= 1408\n- C2_LEN= 160\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nencrypt_280(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_d4\n  unpacked_public_key = build_unpacked_public_key_910(public_key);\n  return encrypt_unpacked_280(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_f8(Eurydice_mut_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_encapsulate_a10(\n  Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_39(Eurydice_array_to_slice_mut_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_41_23(Eurydice_array_to_slice_mut_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_41_23(Eurydice_array_to_slice_mut_17(&to_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_d1\n  ciphertext =\n    encrypt_280(Eurydice_array_to_slice_mut_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_d1 uu____2 = libcrux_ml_kem_types_from_19_d9(ciphertext);\n  return (KRML_CLITERAL(tuple_25){ .fst = uu____2, .snd = kdf_39_f8(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic Eurydice_arr_13 call_mut_0b_b2(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_b2(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_3b arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_b2(&lvalue););\n  Eurydice_arr_3b secret_key_unpacked = arr_struct;\n  deserialize_vector_5b(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_b2(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_660(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e3(Eurydice_array_to_slice_mut_68(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_b2(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_23(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_14 to_hash = libcrux_ml_kem_utils_into_padded_array_49(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f6(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_d9(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_f5(Eurydice_array_to_slice_mut_720(&to_hash));\n  Eurydice_arr_d1\n  expected_ciphertext = encrypt_280(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_mut_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_f8(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_f8(shared_secret0);\n  Eurydice_mut_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_d9(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_mut_b50(&expected_ciphertext),\n      Eurydice_array_to_slice_mut_01(&shared_secret),\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret0));\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_16(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_ee *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_mut_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_13 uu____0 = deserialize_to_reduced_ring_element_84(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40 shake128_init_absorb_final_af(Eurydice_arr_bf *input)\n{\n  Eurydice_arr_c40 state = libcrux_sha3_avx2_x4_incremental_init();\n  libcrux_sha3_avx2_x4_incremental_shake128_absorb_final(&state,\n    Eurydice_array_to_slice_mut_e9(input->data),\n    Eurydice_array_to_slice_mut_e9(&input->data[1U]),\n    Eurydice_array_to_slice_mut_e9(input->data),\n    Eurydice_array_to_slice_mut_e9(input->data));\n  return state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_init_absorb_final_41\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40\nshake128_init_absorb_final_41_af(Eurydice_arr_bf *input)\n{\n  return shake128_init_absorb_final_af(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b8\nshake128_squeeze_first_three_blocks_af(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_b8 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_79 out0 = { .data = { 0U } };\n  Eurydice_arr_79 out1 = { .data = { 0U } };\n  Eurydice_arr_79 out2 = { .data = { 0U } };\n  Eurydice_arr_79 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(st,\n    Eurydice_array_to_slice_mut_48(&out0),\n    Eurydice_array_to_slice_mut_48(&out1),\n    Eurydice_array_to_slice_mut_48(&out2),\n    Eurydice_array_to_slice_mut_48(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_first_three_blocks_41\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b8\nshake128_squeeze_first_three_blocks_41_af(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_first_three_blocks_af(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_ce(\n  Eurydice_arr_b8 *randomness,\n  Eurydice_arr_85 *sampled_coefficients,\n  Eurydice_arr_800 *out\n)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_mut_d49(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5b0 shake128_squeeze_next_block_af(Eurydice_arr_c40 *st)\n{\n  Eurydice_arr_5b0 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c5 out0 = { .data = { 0U } };\n  Eurydice_arr_c5 out1 = { .data = { 0U } };\n  Eurydice_arr_c5 out2 = { .data = { 0U } };\n  Eurydice_arr_c5 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(st,\n    Eurydice_array_to_slice_mut_2c(&out0),\n    Eurydice_array_to_slice_mut_2c(&out1),\n    Eurydice_array_to_slice_mut_2c(&out2),\n    Eurydice_array_to_slice_mut_2c(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.shake128_squeeze_next_block_41\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5b0\nshake128_squeeze_next_block_41_af(Eurydice_arr_c40 *self)\n{\n  return shake128_squeeze_next_block_af(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_ce0(\n  Eurydice_arr_5b0 *randomness,\n  Eurydice_arr_85 *sampled_coefficients,\n  Eurydice_arr_800 *out\n)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_avx2_rej_sample_f5(Eurydice_array_to_subslice_mut_d41(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_13 call_mut_0a_28(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_mut_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ee sample_from_xof_28(Eurydice_arr_bf *seeds)\n{\n  Eurydice_arr_85 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_800 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_c40 xof_state = shake128_init_absorb_final_41_af(seeds);\n  Eurydice_arr_b8 randomness0 = shake128_squeeze_first_three_blocks_41_af(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_ce(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_5b0 randomness = shake128_squeeze_next_block_41_af(&xof_state);\n      done = sample_from_uniform_distribution_next_ce0(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_ee arr_mapped_str;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_28(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_28(Eurydice_arr_e2 *A_transpose, Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_bf seeds;\n    Eurydice_arr_31 repeat_expression[2U];\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_ee sampled = sample_from_xof_28(&seeds);\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.H_41\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec H_41_af(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_2a(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_mut_210(public_key, (size_t)768U);\n  deserialize_ring_elements_reduced_16(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_mut_5f1(public_key,\n        (size_t)768U));\n  Eurydice_arr_e2 *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_mut_5f1(public_key,\n        (size_t)768U));\n  sample_matrix_A_28(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_41_af(Eurydice_array_to_slice_mut_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_16(Eurydice_arr_ee *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_84(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_ce(\n  Eurydice_arr_ee *t_as_ntt,\n  Eurydice_mut_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_03 *serialized\n)\n{\n  serialize_vector_16(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d48(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f1(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_ce(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *self,\n  Eurydice_arr_03 *serialized\n)\n{\n  serialize_public_key_mut_ce(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_ce(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_ce(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_03\nserialize_public_key_ce(Eurydice_arr_ee *t_as_ntt, Eurydice_mut_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_03 public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_ce(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_03\nserialized_dd_ce(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_df(serialize_public_key_ce(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_03\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_ce(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self\n)\n{\n  return serialized_dd_ce(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PRIVATE_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair512\nserialize_unpacked_secret_key_e5(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_ee *private_key\n)\n{\n  Eurydice_arr_03\n  public_key_serialized =\n    serialize_public_key_ce(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&public_key->seed_for_A));\n  Eurydice_arr_d2 secret_key_serialized = { .data = { 0U } };\n  serialize_vector_16(private_key, Eurydice_array_to_slice_mut_27(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair512){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_4e(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair512\n  uu____0 =\n    serialize_unpacked_secret_key_e5(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_d2 ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_03 ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_e2(Eurydice_array_to_slice_mut_27(&ind_cpa_private_key),\n    Eurydice_array_to_slice_mut_3b(&ind_cpa_public_key),\n    Eurydice_array_to_slice_mut_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_4e(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_ab0 sk = libcrux_ml_kem_types_default_d3_be();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_4e(self, &sk);\n  return sk;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_16(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_ee *secret_as_ntt)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_84(Eurydice_slice_subslice_mut_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_13 call_mut_0a_7e(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_84(Eurydice_array_to_subslice_mut_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ee sample_from_xof_7e(Eurydice_arr_bf *seeds)\n{\n  Eurydice_arr_85 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_800 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_e3\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_af(seeds);\n  Eurydice_arr_b8\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_af(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_ce(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_5b0\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_af(&xof_state);\n      done = sample_from_uniform_distribution_next_ce0(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_ee arr_mapped_str;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_7e(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_7e(Eurydice_arr_e2 *A_transpose, Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_bf seeds;\n    Eurydice_arr_31 repeat_expression[2U];\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_ee sampled = sample_from_xof_7e(&seeds);\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_10(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_16(Eurydice_slice_subslice_to_mut_72(public_key,\n      (size_t)768U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_mut_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_mut_6d(public_key, (size_t)768U);\n  Eurydice_arr_e2 *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_7e(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_a4(\n  Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e0(Eurydice_array_to_slice_mut_99(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_16(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_10(ind_cpa_public_key, &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_mut_6d(ind_cpa_public_key, (size_t)768U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_ee default_70_16(void)\n{\n  Eurydice_arr_ee lit;\n  Eurydice_arr_13 repeat_expression[2U];\n  KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n  memcpy(lit.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_13));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 default_8b_16(void)\n{\n  Eurydice_arr_ee uu____0;\n  Eurydice_arr_13 repeat_expression0[2U];\n  KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression0[i] = ZERO_d6_84(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)2U * sizeof (Eurydice_arr_13));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_ee repeat_expression1[2U];\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    Eurydice_arr_ee lit;\n    Eurydice_arr_13 repeat_expression[2U];\n    KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression[i] = ZERO_d6_84(););\n    memcpy(lit.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_13));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)2U * sizeof (Eurydice_arr_ee));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7\nlibcrux_ml_kem_ind_cca_unpacked_default_30_16(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7){\n        .ind_cpa_public_key = default_8b_16(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_16(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_c7\n  uu____0 =\n    { .ind_cpa_private_key = default_70_16(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_16()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.G_41\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7 G_41_af(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_avx2_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_b1(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d411(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)2U;\n  return G_41_af(Eurydice_array_to_slice_mut_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN\nwith const generics\n- K= 2\n- LEN= 192\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_eb PRFxN_d5(Eurydice_arr_4d *input)\n{\n  Eurydice_arr_eb out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_1c out0 = { .data = { 0U } };\n  Eurydice_arr_1c out1 = { .data = { 0U } };\n  Eurydice_arr_1c out2 = { .data = { 0U } };\n  Eurydice_arr_1c out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_shake256(Eurydice_array_to_slice_mut_b5(input->data),\n    Eurydice_array_to_slice_mut_b5(&input->data[1U]),\n    Eurydice_array_to_slice_mut_b5(input->data),\n    Eurydice_array_to_slice_mut_b5(input->data),\n    Eurydice_array_to_slice_mut_d9(&out0),\n    Eurydice_array_to_slice_mut_d9(&out1),\n    Eurydice_array_to_slice_mut_d9(&out2),\n    Eurydice_array_to_slice_mut_d9(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN_41\nwith const generics\n- K= 2\n- LEN= 192\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_eb PRFxN_41_d5(Eurydice_arr_4d *input)\n{\n  return PRFxN_d5(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- ETA= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\nsample_from_binomial_distribution_e3(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  return sample_from_binomial_distribution_3_84(randomness);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- ETA= 3\n- ETA_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_d6(\n  Eurydice_arr_ee *re_as_ntt,\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_4d prf_inputs;\n  Eurydice_arr_fa repeat_expression[2U];\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_af(&prf_inputs, domain_separator);\n  Eurydice_arr_eb prf_outputs = PRFxN_41_d5(&prf_inputs);\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_e3(Eurydice_array_to_slice_mut_d9(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_84(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic Eurydice_arr_13 call_mut_73_ab(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_16(Eurydice_arr_13 *myself, Eurydice_arr_13 *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    myself->data[i0] = libcrux_ml_kem_vector_avx2_add_f5(myself->data[i0], &rhs->data[i0]););\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_16(Eurydice_arr_13 *self, Eurydice_arr_13 *rhs)\n{\n  add_to_ring_element_16(self, rhs);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_16(\n  Eurydice_arr_ee *t_as_ntt,\n  Eurydice_arr_e2 *matrix_A,\n  Eurydice_arr_ee *s_as_ntt,\n  Eurydice_arr_ee *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_ee *row = &matrix_A->data[i0];\n    Eurydice_arr_13 uu____0 = ZERO_d6_84();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR2(i1,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i1;\n      Eurydice_arr_13 *matrix_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_16(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_84(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_ab(\n  Eurydice_mut_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_ee *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_b1(key_generation_seed);\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_e2 *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_28(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_d6(private_key, &prf_input, 0U);\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_ab(&lvalue););\n  Eurydice_arr_ee error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_d6(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_16(&public_key->t_as_ntt, &public_key->A, private_key, &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_13 call_mut_b4_16(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_ee call_mut_22_16(void **_)\n{\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_16(&lvalue););\n  return arr_struct;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_e2 transpose_a_16(Eurydice_arr_e2 ind_cpa_a)\n{\n  Eurydice_arr_e2 arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_16(&lvalue););\n  Eurydice_arr_e2 A = arr_struct;\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 uu____0 = clone_c1_84(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_db(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *out\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_ab(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_e2 A = transpose_a_16(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_03\n  pk_serialized =\n    serialize_public_key_ce(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_41_af(Eurydice_array_to_slice_mut_3b(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_b1(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_mut_borrow_slice_u8 pk_hash\n)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_41_af(Eurydice_array_to_slice_mut_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_ee, libcrux_ml_kem_polynomial_PolynomialRingElement_f6\n\n*/\ntypedef struct tuple_91_s\n{\n  Eurydice_arr_ee fst;\n  Eurydice_arr_13 snd;\n}\ntuple_91;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_f1_78(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_13 call_mut_dd_78(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_f3 PRFxN_d50(Eurydice_arr_4d *input)\n{\n  Eurydice_arr_f3 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_89 out0 = { .data = { 0U } };\n  Eurydice_arr_89 out1 = { .data = { 0U } };\n  Eurydice_arr_89 out2 = { .data = { 0U } };\n  Eurydice_arr_89 out3 = { .data = { 0U } };\n  libcrux_sha3_avx2_x4_shake256(Eurydice_array_to_slice_mut_b5(input->data),\n    Eurydice_array_to_slice_mut_b5(&input->data[1U]),\n    Eurydice_array_to_slice_mut_b5(input->data),\n    Eurydice_array_to_slice_mut_b5(input->data),\n    Eurydice_array_to_slice_mut_78(&out0),\n    Eurydice_array_to_slice_mut_78(&out1),\n    Eurydice_array_to_slice_mut_78(&out2),\n    Eurydice_array_to_slice_mut_78(&out3));\n  out.data[0U] = out0;\n  out.data[1U] = out1;\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRFxN_41\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_f3 PRFxN_41_d50(Eurydice_arr_4d *input)\n{\n  return PRFxN_d50(input);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_d6(\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_ee *error_1\n)\n{\n  Eurydice_arr_4d prf_inputs;\n  Eurydice_arr_fa repeat_expression[2U];\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_af(&prf_inputs, domain_separator);\n  Eurydice_arr_f3 prf_outputs = PRFxN_41_d50(&prf_inputs);\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13\n    uu____0 =\n      sample_from_binomial_distribution_16(Eurydice_array_to_slice_mut_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_89 PRF_41_d50(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_13 call_mut_a8_16(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_16(Eurydice_arr_13 *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_84(&zeta_i, re);\n  invert_ntt_at_layer_2_84(&zeta_i, re);\n  invert_ntt_at_layer_3_84(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_84(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_84(re);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ee\ncompute_vector_u_16(\n  Eurydice_arr_e2 *a_as_ntt,\n  Eurydice_arr_ee *r_as_ntt,\n  Eurydice_arr_ee *error_1\n)\n{\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_16(&lvalue););\n  Eurydice_arr_ee result = arr_struct;\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_ee *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_13 *a_element = &row->data[j];\n      Eurydice_arr_13 product = ntt_multiply_d6_84(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_16(&result.data[i1], &product););\n    invert_ntt_montgomery_16(&result.data[i1]);\n    add_error_reduce_d6_84(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- OUT_LEN= 640\n- COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_4e(Eurydice_arr_ee input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)640U / (size_t)2U),\n            .end = (i0 + (size_t)1U) * ((size_t)640U / (size_t)2U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b0 lvalue = compress_then_serialize_ring_element_u_81(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_56(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_91\nencrypt_c1_78(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_arr_e2 *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_ee arr_struct0;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_78(&lvalue););\n  Eurydice_arr_ee r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_d6(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_78(&lvalue););\n  Eurydice_arr_ee error_1 = arr_struct;\n  uint8_t domain_separator = sample_ring_element_cbd_d6(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_41_d50(Eurydice_array_to_slice_mut_b5(&prf_input));\n  Eurydice_arr_13\n  error_2 = sample_from_binomial_distribution_16(Eurydice_array_to_slice_mut_78(&prf_output));\n  Eurydice_arr_ee u = compute_vector_u_16(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_4e(u, ciphertext);\n  return (KRML_CLITERAL(tuple_91){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_ring_element_v_16(\n  Eurydice_arr_ee *t_as_ntt,\n  Eurydice_arr_ee *r_as_ntt,\n  Eurydice_arr_13 *error_2,\n  Eurydice_arr_13 *message\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_16(&result, &product););\n  invert_ntt_montgomery_16(&result);\n  return add_message_error_reduce_d6_84(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- COMPRESSION_FACTOR= 4\n- OUT_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_e5(Eurydice_arr_13 re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_4_84(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- V_COMPRESSION_FACTOR= 4\n- C2_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_e5(\n  Eurydice_arr_ee *t_as_ntt,\n  Eurydice_arr_ee *r_as_ntt,\n  Eurydice_arr_13 *error_2,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_13 message_as_ring_element = deserialize_then_decompress_message_84(message);\n  Eurydice_arr_13\n  v = compute_ring_element_v_16(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_e5(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_LEN= 640\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d2\nencrypt_unpacked_28(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_d2 ciphertext = { .data = { 0U } };\n  tuple_91\n  uu____0 =\n    encrypt_c1_78(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d46(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)640U })));\n  Eurydice_arr_ee r_as_ntt = uu____0.fst;\n  Eurydice_arr_13 error_2 = uu____0.snd;\n  encrypt_c2_e5(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f(&ciphertext, (size_t)640U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a8(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_c7 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_b1(Eurydice_array_to_slice_mut_01(randomness),\n      Eurydice_array_to_slice_mut_01(&public_key->public_key_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_d2\n  ciphertext = encrypt_unpacked_28(&public_key->ind_cpa_public_key, randomness, pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_ab){\n        .fst = libcrux_ml_kem_types_from_19_80(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic Eurydice_arr_13 call_mut_35_e5(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ee\ndeserialize_then_decompress_u_e5(Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_e5(&lvalue););\n  Eurydice_arr_ee u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)768U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_mut_d46(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_d0(u_bytes);\n    ntt_vector_u_d0(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ndeserialize_then_decompress_ring_element_v_ce(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_4_84(serialized);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_13\ncompute_message_16(\n  Eurydice_arr_13 *v,\n  Eurydice_arr_ee *secret_as_ntt,\n  Eurydice_arr_ee *u_as_ntt\n)\n{\n  Eurydice_arr_13 result = ZERO_d6_84();\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_13 product = ntt_multiply_d6_84(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_16(&result, &product););\n  invert_ntt_montgomery_16(&result);\n  return subtract_reduce_d6_84(v, result);\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_a4(Eurydice_arr_ee *secret_key, Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_ee u_as_ntt = deserialize_then_decompress_u_e5(ciphertext);\n  Eurydice_arr_13\n  v =\n    deserialize_then_decompress_ring_element_v_ce(Eurydice_array_to_subslice_from_mut_5f(ciphertext,\n        (size_t)640U));\n  Eurydice_arr_13 message = compute_message_16(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_84(message);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::avx2::Simd256Hash}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.avx2.PRF_41\nwith const generics\n- K= 2\n- LEN= 32\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec PRF_41_d5(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_d9(\n  libcrux_ml_kem_mlkem512_avx2_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_a4(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_af(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_03\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_df(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f1(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_80(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_d5(Eurydice_array_to_slice_mut_3b(&to_hash));\n  Eurydice_arr_d2\n  expected_ciphertext =\n    encrypt_unpacked_28(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_mut_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_80(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_mut_27(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_13 call_mut_0b_16(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ee\ndeserialize_ring_elements_reduced_out_16(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_16(&lvalue););\n  Eurydice_arr_ee deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_16(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_ce(Eurydice_arr_03 *public_key)\n{\n  Eurydice_arr_ee\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_16(Eurydice_array_to_subslice_to_mut_210(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)));\n  Eurydice_arr_03\n  public_key_serialized =\n    serialize_public_key_ce(&deserialized_pk,\n      Eurydice_array_to_subslice_from_mut_5f1(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)));\n  return Eurydice_array_eq((size_t)800U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_37(Eurydice_arr_ab0 *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_41_af(Eurydice_array_to_subslice_mut_d414(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)2U,\n            .end = (size_t)768U * (size_t)2U + (size_t)32U\n          }\n        )));\n  Eurydice_mut_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_mut_d414(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)2U + (size_t)32U,\n          .end = (size_t)768U * (size_t)2U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_mut((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_85(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_37(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- PRIVATE_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair512\ngenerate_keypair_cc(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_ee private_key = default_70_16();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 public_key = default_8b_16();\n  generate_keypair_unpacked_ab(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_e5(&public_key, &private_key);\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SERIALIZED_KEY_LEN= 1632\n*/\nstatic KRML_MUSTINLINE void\nserialize_kem_secret_key_mut_37(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d414(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d414(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d414(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_41_af(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d414(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- SERIALIZED_KEY_LEN= 1632\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ab0\nserialize_kem_secret_key_37(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_ab0 out = { .data = { 0U } };\n  serialize_kem_secret_key_mut_37(private_key, public_key, implicit_rejection_value, &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_ind_cca_generate_keypair_db(Eurydice_arr_c7 *randomness)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair512\n  uu____0 = generate_keypair_cc(ind_cpa_keypair_randomness);\n  Eurydice_arr_d2 ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_03 public_key = uu____0.snd;\n  Eurydice_arr_ab0\n  secret_key_serialized =\n    serialize_kem_secret_key_37(Eurydice_array_to_slice_mut_27(&ind_cpa_private_key),\n      Eurydice_array_to_slice_mut_3b(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_ab0 private_key = libcrux_ml_kem_types_from_b2_be(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_d6(private_key,\n      libcrux_ml_kem_types_from_51_df(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_b1(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_91(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_16(Eurydice_slice_subslice_to_mut_72(public_key,\n      (size_t)768U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_mut_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_mut_6d(public_key, (size_t)768U);\n  Eurydice_arr_e2 *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_28(uu____0, &lvalue, false);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7\nbuild_unpacked_public_key_91(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7\n  unpacked_public_key = default_8b_16();\n  build_unpacked_public_key_mut_91(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_LEN= 640\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d2\nencrypt_28(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_c7\n  unpacked_public_key = build_unpacked_public_key_91(public_key);\n  return encrypt_unpacked_28(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_avx2_Simd256Hash\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_37(Eurydice_mut_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_encapsulate_a1(Eurydice_arr_03 *public_key, Eurydice_arr_ec *randomness)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_b1(Eurydice_array_to_slice_mut_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_41_af(Eurydice_array_to_slice_mut_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_41_af(Eurydice_array_to_slice_mut_17(&to_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_d2\n  ciphertext =\n    encrypt_28(Eurydice_array_to_slice_mut_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_d2 uu____2 = libcrux_ml_kem_types_from_19_80(ciphertext);\n  return (KRML_CLITERAL(tuple_ab){ .fst = uu____2, .snd = kdf_39_37(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic Eurydice_arr_13 call_mut_0b_a4(void **_)\n{\n  return ZERO_d6_84();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_a4(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_ee arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_a4(&lvalue););\n  Eurydice_arr_ee secret_key_unpacked = arr_struct;\n  deserialize_vector_16(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_a4(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_avx2_SIMD256Vector, libcrux_ml_kem_hash_functions_avx2_Simd256Hash, libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_66(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e0(Eurydice_array_to_slice_mut_99(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_a4(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_41_af(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_03 to_hash = libcrux_ml_kem_utils_into_padded_array_df(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f1(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_80(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_41_d5(Eurydice_array_to_slice_mut_3b(&to_hash));\n  Eurydice_arr_d2\n  expected_ciphertext = encrypt_28(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_mut_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_37(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_37(shared_secret0);\n  Eurydice_mut_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_80(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_mut_27(&expected_ciphertext),\n      Eurydice_array_to_slice_mut_01(&shared_secret),\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret0));\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem_avx2_H\n#define libcrux_mlkem_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"intrinsics/libcrux_intrinsics_avx2.h\"\n\n#include \"libcrux_sha3_avx2.h\"\n#include \"libcrux_core.h\"\n\nEurydice_arr_c7 libcrux_ml_kem_hash_functions_avx2_G(Eurydice_mut_borrow_slice_u8 input);\n\nEurydice_arr_ec libcrux_ml_kem_hash_functions_avx2_H(Eurydice_mut_borrow_slice_u8 input);\n\ntypedef libcrux_sha3_avx2_x4_incremental_KeccakState\nlibcrux_ml_kem_hash_functions_avx2_Simd256Hash;\n\ntypedef __m256i libcrux_ml_kem_vector_avx2_SIMD256Vector;\n\n__m256i libcrux_ml_kem_vector_avx2_vec_zero(void);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_ZERO_f5(void);\n\n__m256i libcrux_ml_kem_vector_avx2_vec_from_i16_array(Eurydice_mut_borrow_slice_i16 array);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_from_i16_array_f5(Eurydice_mut_borrow_slice_i16 array);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_avx2_vec_to_i16_array(__m256i v);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_avx2_to_i16_array_f5(__m256i x);\n\n__m256i libcrux_ml_kem_vector_avx2_from_bytes(Eurydice_mut_borrow_slice_u8 array);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_from_bytes_f5(Eurydice_mut_borrow_slice_u8 array);\n\nvoid libcrux_ml_kem_vector_avx2_to_bytes(__m256i x, Eurydice_mut_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nvoid libcrux_ml_kem_vector_avx2_to_bytes_f5(__m256i x, Eurydice_mut_borrow_slice_u8 bytes);\n\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_add(__m256i lhs, __m256i rhs);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_add_f5(__m256i lhs, __m256i *rhs);\n\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_sub(__m256i lhs, __m256i rhs);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_sub_f5(__m256i lhs, __m256i *rhs);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_multiply_by_constant(__m256i vector, int16_t constant);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_multiply_by_constant_f5(__m256i vec, int16_t c);\n\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_cond_subtract_3329(__m256i vector);\n\n__m256i libcrux_ml_kem_vector_avx2_cond_subtract_3329(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_cond_subtract_3329_f5(__m256i vector);\n\n#define LIBCRUX_ML_KEM_VECTOR_AVX2_ARITHMETIC_BARRETT_MULTIPLIER (20159)\n\n/**\n See Section 3.2 of the implementation notes document for an explanation\n of this code.\n*/\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_barrett_reduce(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_barrett_reduce_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constant(\n  __m256i vector,\n  int16_t constant\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_montgomery_multiply_by_constant_f5(__m256i vector, int16_t constant);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_bitwise_and_with_constant(\n  __m256i vector,\n  int16_t constant\n);\n\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_to_unsigned_representative(__m256i a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_to_unsigned_representative_f5(__m256i a);\n\n__m256i libcrux_ml_kem_vector_avx2_compress_compress_message_coefficient(__m256i vector);\n\n__m256i libcrux_ml_kem_vector_avx2_compress_1(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_compress_1_f5(__m256i vector);\n\n__m256i libcrux_ml_kem_vector_avx2_compress_mulhi_mm256_epi32(__m256i lhs, __m256i rhs);\n\n__m256i libcrux_ml_kem_vector_avx2_compress_decompress_1(__m256i a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_decompress_1_f5(__m256i a);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_by_constants(\n  __m256i vec,\n  __m256i constants\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_1_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_layer_2_step_f5(__m256i vector, int16_t zeta0, int16_t zeta1);\n\n__m128i\nlibcrux_ml_kem_vector_avx2_arithmetic_montgomery_multiply_m128i_by_constants(\n  __m128i vec,\n  __m128i constants\n);\n\n__m256i libcrux_ml_kem_vector_avx2_ntt_ntt_layer_3_step(__m256i vector, int16_t zeta);\n\n__m256i libcrux_ml_kem_vector_avx2_ntt_layer_3_step(__m256i vector, int16_t zeta);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_ntt_layer_3_step_f5(__m256i vector, int16_t zeta);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_1_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_2_step(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step(__m256i vector, int16_t zeta0, int16_t zeta1);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_inv_ntt_layer_2_step_f5(\n  __m256i vector,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\n__m256i libcrux_ml_kem_vector_avx2_ntt_inv_ntt_layer_3_step(__m256i vector, int16_t zeta);\n\n__m256i libcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step(__m256i vector, int16_t zeta);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_inv_ntt_layer_3_step_f5(__m256i vector, int16_t zeta);\n\n__m256i libcrux_ml_kem_vector_avx2_arithmetic_montgomery_reduce_i32s(__m256i vec);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_ntt_multiply(\n  __m256i lhs,\n  __m256i rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_multiply(\n  __m256i *lhs,\n  __m256i *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_ntt_multiply_f5(\n  __m256i *lhs,\n  __m256i *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\nEurydice_array_u8x2 libcrux_ml_kem_vector_avx2_serialize_serialize_1(__m256i vector);\n\nEurydice_array_u8x2 libcrux_ml_kem_vector_avx2_serialize_1(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_array_u8x2 libcrux_ml_kem_vector_avx2_serialize_1_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_i16s(int16_t a, int16_t b);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_1_deserialize_1_u8s(uint8_t a, uint8_t b);\n\n__m256i libcrux_ml_kem_vector_avx2_serialize_deserialize_1(Eurydice_mut_borrow_slice_u8 bytes);\n\n__m256i libcrux_ml_kem_vector_avx2_deserialize_1(Eurydice_mut_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_1_f5(Eurydice_mut_borrow_slice_u8 bytes);\n\n/**\n `mm256_concat_pairs_n(n, x)` is then a sequence of 32 bits packets\n of the shape `0b0…0b₁…bₙa₁…aₙ`, if `x` is a sequence of pairs of\n 16 bits, of the shape `(0b0…0a₁…aₙ, 0b0…0b₁…bₙ)` (where the last\n `n` bits are non-zero).\n*/\n__m256i libcrux_ml_kem_vector_avx2_serialize_mm256_concat_pairs_n(uint8_t n, __m256i x);\n\nEurydice_array_u8x8 libcrux_ml_kem_vector_avx2_serialize_serialize_4(__m256i vector);\n\nEurydice_array_u8x8 libcrux_ml_kem_vector_avx2_serialize_4(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_array_u8x8 libcrux_ml_kem_vector_avx2_serialize_4_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_i16s(\n  int16_t b0,\n  int16_t b1,\n  int16_t b2,\n  int16_t b3,\n  int16_t b4,\n  int16_t b5,\n  int16_t b6,\n  int16_t b7\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_4_deserialize_4_u8s(\n  uint8_t b0,\n  uint8_t b1,\n  uint8_t b2,\n  uint8_t b3,\n  uint8_t b4,\n  uint8_t b5,\n  uint8_t b6,\n  uint8_t b7\n);\n\n__m256i libcrux_ml_kem_vector_avx2_serialize_deserialize_4(Eurydice_mut_borrow_slice_u8 bytes);\n\n__m256i libcrux_ml_kem_vector_avx2_deserialize_4(Eurydice_mut_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_4_f5(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_6d libcrux_ml_kem_vector_avx2_serialize_serialize_5(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_arr_6d libcrux_ml_kem_vector_avx2_serialize_5_f5(__m256i vector);\n\n/**\n We cannot model `mm256_inserti128_si256` on its own: it produces a\n Vec256 where the upper 128 bits are undefined. Thus\n `mm256_inserti128_si256` is not pure.\n\n Luckily, we always call `mm256_castsi128_si256` right after\n `mm256_inserti128_si256`: this composition sets the upper bits,\n making the whole computation pure again.\n*/\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_mm256_si256_from_two_si128(__m128i lower, __m128i upper);\n\n__m256i libcrux_ml_kem_vector_avx2_serialize_deserialize_5(Eurydice_mut_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_5_f5(Eurydice_mut_borrow_slice_u8 bytes);\n\ntypedef struct core_core_arch_x86___m128i_x2_s\n{\n  __m128i fst;\n  __m128i snd;\n}\ncore_core_arch_x86___m128i_x2;\n\ncore_core_arch_x86___m128i_x2\nlibcrux_ml_kem_vector_avx2_serialize_serialize_10_serialize_10_vec(__m256i vector);\n\nEurydice_arr_fc libcrux_ml_kem_vector_avx2_serialize_serialize_10(__m256i vector);\n\nEurydice_arr_fc libcrux_ml_kem_vector_avx2_serialize_10(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_arr_fc libcrux_ml_kem_vector_avx2_serialize_10_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_10_deserialize_10_vec(\n  __m128i lower_coefficients0,\n  __m128i upper_coefficients0\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_10(Eurydice_mut_borrow_slice_u8 bytes);\n\n__m256i libcrux_ml_kem_vector_avx2_deserialize_10(Eurydice_mut_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_10_f5(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_80 libcrux_ml_kem_vector_avx2_serialize_serialize_11(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_arr_80 libcrux_ml_kem_vector_avx2_serialize_11_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_11(Eurydice_mut_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_11_f5(Eurydice_mut_borrow_slice_u8 bytes);\n\ncore_core_arch_x86___m128i_x2\nlibcrux_ml_kem_vector_avx2_serialize_serialize_12_serialize_12_vec(__m256i vector);\n\nEurydice_arr_94 libcrux_ml_kem_vector_avx2_serialize_serialize_12(__m256i vector);\n\nEurydice_arr_94 libcrux_ml_kem_vector_avx2_serialize_12(__m256i vector);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nEurydice_arr_94 libcrux_ml_kem_vector_avx2_serialize_12_f5(__m256i vector);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_12_deserialize_12_vec(\n  __m128i lower_coefficients0,\n  __m128i upper_coefficients0\n);\n\n__m256i\nlibcrux_ml_kem_vector_avx2_serialize_deserialize_12(Eurydice_mut_borrow_slice_u8 bytes);\n\n__m256i libcrux_ml_kem_vector_avx2_deserialize_12(Eurydice_mut_borrow_slice_u8 bytes);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_deserialize_12_f5(Eurydice_mut_borrow_slice_u8 bytes);\n\nsize_t\nlibcrux_ml_kem_vector_avx2_sampling_rejection_sample(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_i16 output\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\nsize_t\nlibcrux_ml_kem_vector_avx2_rej_sample_f5(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_i16 output\n);\n\n#define LIBCRUX_ML_KEM_VECTOR_AVX2_NTT_NTT_MULTIPLY_PERMUTE_WITH (216)\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::vector::avx2::SIMD256Vector}\n*/\n__m256i libcrux_ml_kem_vector_avx2_clone_fd(__m256i *self);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem_avx2_H_DEFINED\n#endif /* libcrux_mlkem_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"internal/libcrux_mlkem_portable.h\"\n\n#include \"libcrux_sha3_portable.h\"\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_core.h\"\n\ninline Eurydice_arr_c7\nlibcrux_ml_kem_hash_functions_portable_G(Eurydice_mut_borrow_slice_u8 input)\n{\n  Eurydice_arr_c7 digest = { .data = { 0U } };\n  libcrux_sha3_portable_sha512(Eurydice_array_to_slice_mut_17(&digest), input);\n  return digest;\n}\n\ninline Eurydice_arr_ec\nlibcrux_ml_kem_hash_functions_portable_H(Eurydice_mut_borrow_slice_u8 input)\n{\n  Eurydice_arr_ec digest = { .data = { 0U } };\n  libcrux_sha3_portable_sha256(Eurydice_array_to_slice_mut_01(&digest), input);\n  return digest;\n}\n\n#define ZETAS_TIMES_MONTGOMERY_R ((KRML_CLITERAL(Eurydice_arr_34){ .data = { -1044, -758, -359, -1517, 1493, 1422, 287, 202, -171, 622, 1577, 182, 962, -1202, -1474, 1468, 573, -1325, 264, 383, -829, 1458, -1602, -130, -681, 1017, 732, 608, -1542, 411, -205, -1571, 1223, 652, -552, 1015, -1293, 1491, -282, -1544, 516, -8, -320, -666, -1618, -1162, 126, 1469, -853, -90, -271, 830, 107, -1421, -247, -951, -398, 961, -1508, -725, 448, -1065, 677, -1275, -1103, 430, 555, 843, -1251, 871, 1550, 105, 422, 587, 177, -235, -291, -460, 1574, 1653, -246, 778, 1159, -147, -777, 1483, -602, 1119, -1590, 644, -872, 349, 418, 329, -156, -75, 817, 1097, 603, 610, 1322, -1285, -1465, 384, -1215, -136, 1218, -1335, -874, 220, -1187, -1659, -1185, -1530, -1278, 794, -1510, -854, -870, 478, -108, -308, 996, 991, 958, -1460, 1522, 1628 } }))\n\nint16_t libcrux_ml_kem_polynomial_zeta(size_t i)\n{\n  return ZETAS_TIMES_MONTGOMERY_R.data[i];\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_from_i16_array(Eurydice_mut_borrow_slice_i16 array)\n{\n  Eurydice_arr_d6 arr;\n  memcpy(arr.data,\n    Eurydice_slice_subslice_mut_a6(array,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)16U })).ptr,\n    (size_t)16U * sizeof (int16_t));\n  return\n    core_result_unwrap_26_d3((\n        KRML_CLITERAL(core_result_Result_ec){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_mut_borrow_slice_i16 array)\n{\n  return\n    libcrux_ml_kem_vector_portable_vector_type_from_i16_array(libcrux_secrets_int_classify_public_classify_ref_6d_39(array));\n}\n\nKRML_MUSTINLINE uint8_t_x11\nlibcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_mut_borrow_slice_i16 v)\n{\n  uint8_t r0 = libcrux_secrets_int_as_u8_f5(v.ptr[0U]);\n  uint8_t\n  r1 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U] & 31) << 3U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[0U] >> 8U);\n  uint8_t\n  r2 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U] & 3) << 6U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U] >> 5U);\n  uint8_t r3 = libcrux_secrets_int_as_u8_f5(v.ptr[2U] >> 2U & 255);\n  uint8_t\n  r4 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[3U] & 127) << 1U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U] >> 10U);\n  uint8_t\n  r5 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[4U] & 15) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[3U] >> 7U);\n  uint8_t\n  r6 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[5U] & 1) << 7U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[4U] >> 4U);\n  uint8_t r7 = libcrux_secrets_int_as_u8_f5(v.ptr[5U] >> 1U & 255);\n  uint8_t\n  r8 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[6U] & 63) << 2U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[5U] >> 9U);\n  uint8_t\n  r9 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[7U] & 7) << 5U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[6U] >> 6U);\n  uint8_t r10 = libcrux_secrets_int_as_u8_f5(v.ptr[7U] >> 3U);\n  return\n    (\n      KRML_CLITERAL(uint8_t_x11){\n        .fst = r0,\n        .snd = r1,\n        .thd = r2,\n        .f3 = r3,\n        .f4 = r4,\n        .f5 = r5,\n        .f6 = r6,\n        .f7 = r7,\n        .f8 = r8,\n        .f9 = r9,\n        .f10 = r10\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_80\nlibcrux_ml_kem_vector_portable_serialize_serialize_11(Eurydice_arr_d6 v)\n{\n  uint8_t_x11\n  r0_10 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })));\n  uint8_t_x11\n  r11_21 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_80){\n        .data = {\n          r0_10.fst, r0_10.snd, r0_10.thd, r0_10.f3, r0_10.f4, r0_10.f5, r0_10.f6, r0_10.f7,\n          r0_10.f8, r0_10.f9, r0_10.f10, r11_21.fst, r11_21.snd, r11_21.thd, r11_21.f3, r11_21.f4,\n          r11_21.f5, r11_21.f6, r11_21.f7, r11_21.f8, r11_21.f9, r11_21.f10\n        }\n      }\n    );\n}\n\nEurydice_arr_80 libcrux_ml_kem_vector_portable_serialize_11(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_0b(libcrux_ml_kem_vector_portable_serialize_serialize_11(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_80 libcrux_ml_kem_vector_portable_serialize_11_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_11(a);\n}\n\nKRML_MUSTINLINE int16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_11_int(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  int16_t\n  r0 =\n    (int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[1U]) & 7) << 8U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[0U]);\n  int16_t\n  r1 =\n    (int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[2U]) & 63) << 5U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[1U]) >> 3U;\n  int16_t\n  r2 =\n    ((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[4U]) & 1) << 10U) |\n      (int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[3U]) << 2U))\n    | libcrux_secrets_int_as_i16_59(bytes.ptr[2U]) >> 6U;\n  int16_t\n  r3 =\n    (int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[5U]) & 15) << 7U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[4U]) >> 1U;\n  int16_t\n  r4 =\n    (int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[6U]) & 127) << 4U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[5U]) >> 4U;\n  int16_t\n  r5 =\n    ((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[8U]) & 3) << 9U) |\n      (int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[7U]) << 1U))\n    | libcrux_secrets_int_as_i16_59(bytes.ptr[6U]) >> 7U;\n  int16_t\n  r6 =\n    (int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[9U]) & 31) << 6U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[8U]) >> 2U;\n  int16_t\n  r7 =\n    (int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[10U]) << 3U) |\n      libcrux_secrets_int_as_i16_59(bytes.ptr[9U]) >> 5U;\n  return\n    (\n      KRML_CLITERAL(int16_t_x8){\n        .fst = r0,\n        .snd = r1,\n        .thd = r2,\n        .f3 = r3,\n        .f4 = r4,\n        .f5 = r5,\n        .f6 = r6,\n        .f7 = r7\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_11(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  int16_t_x8\n  v0_7 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_11_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)11U })));\n  int16_t_x8\n  v8_15 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_11_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)11U, .end = (size_t)22U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, v0_7.f6, v0_7.f7, v8_15.fst,\n          v8_15.snd, v8_15.thd, v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_11(Eurydice_mut_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_11(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_deserialize_11_b8(Eurydice_mut_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_11(a);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_to_i16_array(Eurydice_arr_d6 x)\n{\n  return x;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_to_i16_array_b8(Eurydice_arr_d6 x)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_4b(libcrux_ml_kem_vector_portable_vector_type_to_i16_array(x));\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6 libcrux_ml_kem_vector_portable_vector_type_zero(void)\n{\n  return\n    libcrux_secrets_int_public_integers_classify_27_4b((\n        KRML_CLITERAL(Eurydice_arr_d6){ .data = { 0U } }\n      ));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_ZERO_b8(void)\n{\n  return libcrux_ml_kem_vector_portable_vector_type_zero();\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_from_bytes(Eurydice_mut_borrow_slice_u8 array)\n{\n  Eurydice_arr_d6 elements;\n  int16_t repeat_expression[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_secrets_int_I16(0););\n  memcpy(elements.data, repeat_expression, (size_t)16U * sizeof (int16_t));\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    elements.data[i0] =\n      (int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(array.ptr[(size_t)2U * i0 + (size_t)1U]) <<\n        8U)\n      | libcrux_secrets_int_as_i16_59(array.ptr[(size_t)2U * i0]);\n  }\n  return elements;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_from_bytes_b8(Eurydice_mut_borrow_slice_u8 array)\n{\n  return\n    libcrux_ml_kem_vector_portable_vector_type_from_bytes(libcrux_secrets_int_classify_public_classify_ref_6d_90(array));\n}\n\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_portable_vector_type_to_bytes(\n  Eurydice_arr_d6 x,\n  Eurydice_mut_borrow_slice_u8 bytes\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    bytes.ptr[(size_t)2U * i0 + (size_t)1U] = libcrux_secrets_int_as_u8_f5(x.data[i0] >> 8U);\n    bytes.ptr[(size_t)2U * i0] = libcrux_secrets_int_as_u8_f5(x.data[i0]);\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nvoid\nlibcrux_ml_kem_vector_portable_to_bytes_b8(\n  Eurydice_arr_d6 x,\n  Eurydice_mut_borrow_slice_u8 bytes\n)\n{\n  libcrux_ml_kem_vector_portable_vector_type_to_bytes(x,\n    libcrux_secrets_int_public_integers_classify_mut_slice_75(bytes));\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_add(Eurydice_arr_d6 lhs, Eurydice_arr_d6 *rhs)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    size_t uu____0 = i0;\n    lhs.data[uu____0] += rhs->data[i0];\n  }\n  return lhs;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_add_b8(Eurydice_arr_d6 lhs, Eurydice_arr_d6 *rhs)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_add(lhs, rhs);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_sub(Eurydice_arr_d6 lhs, Eurydice_arr_d6 *rhs)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    size_t uu____0 = i0;\n    lhs.data[uu____0] -= rhs->data[i0];\n  }\n  return lhs;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_sub_b8(Eurydice_arr_d6 lhs, Eurydice_arr_d6 *rhs)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_sub(lhs, rhs);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(Eurydice_arr_d6 vec, int16_t c)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    size_t uu____0 = i0;\n    vec.data[uu____0] *= c;\n  }\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_multiply_by_constant_b8(Eurydice_arr_d6 vec, int16_t c)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(vec, c);\n}\n\n/**\n Note: This function is not secret independent\n Only use with public values.\n*/\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(Eurydice_arr_d6 vec)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    if (libcrux_secrets_int_public_integers_declassify_d8_39(vec.data[i0]) >= 3329)\n    {\n      size_t uu____0 = i0;\n      vec.data[uu____0] -= 3329;\n    }\n  }\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_cond_subtract_3329_b8(Eurydice_arr_d6 v)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(v);\n}\n\n/**\n Signed Barrett Reduction\n\n Given an input `value`, `barrett_reduce` outputs a representative `result`\n such that:\n\n - result ≡ value (mod FIELD_MODULUS)\n - the absolute value of `result` is bound as follows:\n\n `|result| ≤ FIELD_MODULUS / 2 · (|value|/BARRETT_R + 1)\n\n Note: The input bound is 28296 to prevent overflow in the multiplication of quotient by FIELD_MODULUS\n\n*/\nint16_t libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(int16_t value)\n{\n  int32_t\n  t =\n    libcrux_secrets_int_as_i32_f5(value) *\n      LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_MULTIPLIER\n    + (LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_R >> 1U);\n  int16_t\n  quotient =\n    libcrux_secrets_int_as_i16_36(t >> (uint32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT);\n  return value - quotient * LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(Eurydice_arr_d6 vec)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int16_t vi = libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(vec.data[i0]);\n    vec.data[i0] = vi;\n  }\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_barrett_reduce_b8(Eurydice_arr_d6 vector)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(vector);\n}\n\n/**\n Signed Montgomery Reduction\n\n Given an input `value`, `montgomery_reduce` outputs a representative `o`\n such that:\n\n - o ≡ value · MONTGOMERY_R^(-1) (mod FIELD_MODULUS)\n - the absolute value of `o` is bound as follows:\n\n `|result| ≤ ceil(|value| / MONTGOMERY_R) + 1665\n\n In particular, if `|value| ≤ FIELD_MODULUS-1 * FIELD_MODULUS-1`, then `|o| <= FIELD_MODULUS-1`.\n And, if `|value| ≤ pow2 16 * FIELD_MODULUS-1`, then `|o| <= FIELD_MODULUS + 1664\n\n*/\nint16_t libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(int32_t value)\n{\n  int32_t\n  k =\n    libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_as_i16_36(value)) *\n      libcrux_secrets_int_as_i32_b8(libcrux_secrets_int_public_integers_classify_27_df(LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R));\n  int32_t\n  k_times_modulus =\n    libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_as_i16_36(k)) *\n      libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n  int16_t\n  c =\n    libcrux_secrets_int_as_i16_36(k_times_modulus >>\n        (uint32_t)LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT);\n  int16_t\n  value_high =\n    libcrux_secrets_int_as_i16_36(value >>\n        (uint32_t)LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT);\n  return value_high - c;\n}\n\n/**\n If `fe` is some field element 'x' of the Kyber field and `fer` is congruent to\n `y · MONTGOMERY_R`, this procedure outputs a value that is congruent to\n `x · y`, as follows:\n\n    `fe · fer ≡ x · y · MONTGOMERY_R (mod FIELD_MODULUS)`\n\n `montgomery_reduce` takes the value `x · y · MONTGOMERY_R` and outputs a representative\n `x · y · MONTGOMERY_R * MONTGOMERY_R^{-1} ≡ x · y (mod FIELD_MODULUS)`.\n*/\nKRML_MUSTINLINE int16_t\nlibcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(\n  int16_t fe,\n  int16_t fer\n)\n{\n  int32_t product = libcrux_secrets_int_as_i32_f5(fe) * libcrux_secrets_int_as_i32_f5(fer);\n  return libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(product);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant(\n  Eurydice_arr_d6 vec,\n  int16_t c\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    vec.data[i0] =\n      libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(vec.data[i0],\n        c);\n  }\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(\n  Eurydice_arr_d6 vector,\n  int16_t constant\n)\n{\n  return\n    libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant(vector,\n      libcrux_secrets_int_public_integers_classify_27_39(constant));\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(\n  Eurydice_arr_d6 vec,\n  int16_t c\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    size_t uu____0 = i0;\n    vec.data[uu____0] &= c;\n  }\n  return vec;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.arithmetic.shift_right\nwith const generics\n- SHIFT_BY= 15\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 shift_right_ef(Eurydice_arr_d6 vec)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    vec.data[i0] >>= (uint32_t)15;\n  }\n  return vec;\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative(Eurydice_arr_d6 a)\n{\n  Eurydice_arr_d6 t = shift_right_ef(a);\n  Eurydice_arr_d6\n  fm =\n    libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(t,\n      LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);\n  return libcrux_ml_kem_vector_portable_arithmetic_add(a, &fm);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative(a);\n}\n\n/**\n The `compress_*` functions implement the `Compress` function specified in the NIST FIPS\n 203 standard (Page 18, Expression 4.5), which is defined as:\n\n ```plaintext\n Compress_d: ℤq -> ℤ_{2ᵈ}\n Compress_d(x) = ⌈(2ᵈ/q)·x⌋\n ```\n\n Since `⌈x⌋ = ⌊x + 1/2⌋` we have:\n\n ```plaintext\n Compress_d(x) = ⌊(2ᵈ/q)·x + 1/2⌋\n               = ⌊(2^{d+1}·x + q) / 2q⌋\n ```\n\n For further information about the function implementations, consult the\n `implementation_notes.pdf` document in this directory.\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\nuint8_t libcrux_ml_kem_vector_portable_compress_compress_message_coefficient(uint16_t fe)\n{\n  int16_t\n  shifted =\n    libcrux_secrets_int_public_integers_classify_27_39(1664) - libcrux_secrets_int_as_i16_ca(fe);\n  int16_t mask = shifted >> 15U;\n  int16_t shifted_to_positive = mask ^ shifted;\n  int16_t shifted_positive_in_range = shifted_to_positive - 832;\n  int16_t r0 = shifted_positive_in_range >> 15U;\n  int16_t r1 = r0 & 1;\n  return libcrux_secrets_int_as_u8_f5(r1);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_compress_compress_1(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    a.data[i0] =\n      libcrux_secrets_int_as_i16_59(libcrux_ml_kem_vector_portable_compress_compress_message_coefficient(libcrux_secrets_int_as_u16_f5(a.data[i0])));\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_1_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_compress_compress_1(a);\n}\n\nKRML_MUSTINLINE uint32_t\nlibcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits(\n  uint8_t n,\n  uint32_t value\n)\n{\n  return value & ((1U << (uint32_t)n) - 1U);\n}\n\nint16_t\nlibcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient(\n  uint8_t coefficient_bits,\n  uint16_t fe\n)\n{\n  uint64_t compressed = libcrux_secrets_int_as_u64_ca(fe) << (uint32_t)coefficient_bits;\n  compressed += 1664ULL;\n  compressed *= 10321340ULL;\n  compressed >>= 35U;\n  return\n    libcrux_secrets_int_as_i16_b8(libcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits(coefficient_bits,\n        libcrux_secrets_int_as_u32_a3(compressed)));\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_compress_decompress_1(Eurydice_arr_d6 a)\n{\n  Eurydice_arr_d6 z = libcrux_ml_kem_vector_portable_vector_type_zero();\n  Eurydice_arr_d6 s = libcrux_ml_kem_vector_portable_arithmetic_sub(z, &a);\n  Eurydice_arr_d6\n  res = libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(s, 1665);\n  return res;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_decompress_1_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_compress_decompress_1(a);\n}\n\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_portable_ntt_ntt_step(\n  Eurydice_arr_d6 *vec,\n  int16_t zeta,\n  size_t i,\n  size_t j\n)\n{\n  int16_t\n  t =\n    libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(vec->data[j],\n      libcrux_secrets_int_public_integers_classify_27_39(zeta));\n  int16_t a_minus_t = vec->data[i] - t;\n  int16_t a_plus_t = vec->data[i] + t;\n  vec->data[j] = a_minus_t;\n  vec->data[i] = a_plus_t;\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)0U, (size_t)2U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)1U, (size_t)3U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)4U, (size_t)6U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)5U, (size_t)7U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta2, (size_t)8U, (size_t)10U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta2, (size_t)9U, (size_t)11U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta3, (size_t)12U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta3, (size_t)13U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_1_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step(a, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)0U, (size_t)4U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)1U, (size_t)5U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)2U, (size_t)6U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta0, (size_t)3U, (size_t)7U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)8U, (size_t)12U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)9U, (size_t)13U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)10U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta1, (size_t)11U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_2_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  return libcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step(a, zeta0, zeta1);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(Eurydice_arr_d6 vec, int16_t zeta)\n{\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)0U, (size_t)8U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)1U, (size_t)9U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)2U, (size_t)10U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)3U, (size_t)11U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)4U, (size_t)12U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)5U, (size_t)13U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)6U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_ntt_step(&vec, zeta, (size_t)7U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_3_step_b8(Eurydice_arr_d6 a, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(a, zeta);\n}\n\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_step(\n  Eurydice_arr_d6 *vec,\n  int16_t zeta,\n  size_t i,\n  size_t j\n)\n{\n  int16_t a_minus_b = vec->data[j] - vec->data[i];\n  int16_t a_plus_b = vec->data[j] + vec->data[i];\n  int16_t o0 = libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(a_plus_b);\n  int16_t\n  o1 =\n    libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(a_minus_b,\n      libcrux_secrets_int_public_integers_classify_27_39(zeta));\n  vec->data[i] = o0;\n  vec->data[j] = o1;\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)0U, (size_t)2U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)1U, (size_t)3U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)4U, (size_t)6U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)5U, (size_t)7U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta2, (size_t)8U, (size_t)10U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta2, (size_t)9U, (size_t)11U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta3, (size_t)12U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta3, (size_t)13U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step(a, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)0U, (size_t)4U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)1U, (size_t)5U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)2U, (size_t)6U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta0, (size_t)3U, (size_t)7U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)8U, (size_t)12U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)9U, (size_t)13U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)10U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta1, (size_t)11U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1\n)\n{\n  return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step(a, zeta0, zeta1);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(Eurydice_arr_d6 vec, int16_t zeta)\n{\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)0U, (size_t)8U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)1U, (size_t)9U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)2U, (size_t)10U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)3U, (size_t)11U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)4U, (size_t)12U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)5U, (size_t)13U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)6U, (size_t)14U);\n  libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&vec, zeta, (size_t)7U, (size_t)15U);\n  return vec;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8(Eurydice_arr_d6 a, int16_t zeta)\n{\n  return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(a, zeta);\n}\n\n/**\n Compute the product of two Kyber binomials with respect to the\n modulus `X² - zeta`.\n\n This function almost implements <strong>Algorithm 11</strong> of the\n NIST FIPS 203 standard, which is reproduced below:\n\n ```plaintext\n Input:  a₀, a₁, b₀, b₁ ∈ ℤq.\n Input: γ ∈ ℤq.\n Output: c₀, c₁ ∈ ℤq.\n\n c₀ ← a₀·b₀ + a₁·b₁·γ\n c₁ ← a₀·b₁ + a₁·b₀\n return c₀, c₁\n ```\n We say \"almost\" because the coefficients output by this function are in\n the Montgomery domain (unlike in the specification).\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\nKRML_MUSTINLINE void\nlibcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(\n  Eurydice_arr_d6 *a,\n  Eurydice_arr_d6 *b,\n  int16_t zeta,\n  size_t i,\n  Eurydice_arr_d6 *out\n)\n{\n  int16_t ai = a->data[(size_t)2U * i];\n  int16_t bi = b->data[(size_t)2U * i];\n  int16_t aj = a->data[(size_t)2U * i + (size_t)1U];\n  int16_t bj = b->data[(size_t)2U * i + (size_t)1U];\n  int32_t ai_bi = libcrux_secrets_int_as_i32_f5(ai) * libcrux_secrets_int_as_i32_f5(bi);\n  int32_t aj_bj_ = libcrux_secrets_int_as_i32_f5(aj) * libcrux_secrets_int_as_i32_f5(bj);\n  int16_t aj_bj = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(aj_bj_);\n  int32_t\n  aj_bj_zeta = libcrux_secrets_int_as_i32_f5(aj_bj) * libcrux_secrets_int_as_i32_f5(zeta);\n  int32_t ai_bi_aj_bj = ai_bi + aj_bj_zeta;\n  int16_t o0 = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(ai_bi_aj_bj);\n  int32_t ai_bj = libcrux_secrets_int_as_i32_f5(ai) * libcrux_secrets_int_as_i32_f5(bj);\n  int32_t aj_bi = libcrux_secrets_int_as_i32_f5(aj) * libcrux_secrets_int_as_i32_f5(bi);\n  int32_t ai_bj_aj_bi = ai_bj + aj_bi;\n  int16_t o1 = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(ai_bj_aj_bi);\n  out->data[(size_t)2U * i] = o0;\n  out->data[(size_t)2U * i + (size_t)1U] = o1;\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_multiply(\n  Eurydice_arr_d6 *lhs,\n  Eurydice_arr_d6 *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  int16_t nzeta0 = -zeta0;\n  int16_t nzeta1 = -zeta1;\n  int16_t nzeta2 = -zeta2;\n  int16_t nzeta3 = -zeta3;\n  Eurydice_arr_d6 out = libcrux_ml_kem_vector_portable_vector_type_zero();\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(zeta0),\n    (size_t)0U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(nzeta0),\n    (size_t)1U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(zeta1),\n    (size_t)2U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(nzeta1),\n    (size_t)3U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(zeta2),\n    (size_t)4U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(nzeta2),\n    (size_t)5U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(zeta3),\n    (size_t)6U,\n    &out);\n  libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(lhs,\n    rhs,\n    libcrux_secrets_int_public_integers_classify_27_39(nzeta3),\n    (size_t)7U,\n    &out);\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_multiply_b8(\n  Eurydice_arr_d6 *lhs,\n  Eurydice_arr_d6 *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n)\n{\n  return libcrux_ml_kem_vector_portable_ntt_ntt_multiply(lhs, rhs, zeta0, zeta1, zeta2, zeta3);\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x2\nlibcrux_ml_kem_vector_portable_serialize_serialize_1(Eurydice_arr_d6 v)\n{\n  uint8_t\n  result0 =\n    (((((((uint32_t)libcrux_secrets_int_as_u8_f5(v.data[0U]) |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[1U]) << 1U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[2U]) << 2U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[3U]) << 3U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[4U]) << 4U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[5U]) << 5U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[6U]) << 6U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[7U]) << 7U;\n  uint8_t\n  result1 =\n    (((((((uint32_t)libcrux_secrets_int_as_u8_f5(v.data[8U]) |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[9U]) << 1U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[10U]) << 2U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[11U]) << 3U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[12U]) << 4U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[13U]) << 5U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[14U]) << 6U)\n    | (uint32_t)libcrux_secrets_int_as_u8_f5(v.data[15U]) << 7U;\n  return (KRML_CLITERAL(Eurydice_array_u8x2){ .data = { result0, result1 } });\n}\n\nEurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_1(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_75(libcrux_ml_kem_vector_portable_serialize_serialize_1(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_1_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_1(a);\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_1(Eurydice_mut_borrow_slice_u8 v)\n{\n  int16_t result0 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] & 1U);\n  int16_t result1 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 1U & 1U);\n  int16_t result2 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 2U & 1U);\n  int16_t result3 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 3U & 1U);\n  int16_t result4 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 4U & 1U);\n  int16_t result5 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 5U & 1U);\n  int16_t result6 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 6U & 1U);\n  int16_t result7 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[0U] >> 7U & 1U);\n  int16_t result8 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] & 1U);\n  int16_t result9 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 1U & 1U);\n  int16_t result10 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 2U & 1U);\n  int16_t result11 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 3U & 1U);\n  int16_t result12 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 4U & 1U);\n  int16_t result13 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 5U & 1U);\n  int16_t result14 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 6U & 1U);\n  int16_t result15 = libcrux_secrets_int_as_i16_59((uint32_t)v.ptr[1U] >> 7U & 1U);\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          result0, result1, result2, result3, result4, result5, result6, result7, result8, result9,\n          result10, result11, result12, result13, result14, result15\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_1(Eurydice_mut_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_1(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_1_b8(Eurydice_mut_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_1(a);\n}\n\nKRML_MUSTINLINE uint8_t_x4\nlibcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_mut_borrow_slice_i16 v)\n{\n  uint8_t\n  result0 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U]) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[0U]);\n  uint8_t\n  result1 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[3U]) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U]);\n  uint8_t\n  result2 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[5U]) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[4U]);\n  uint8_t\n  result3 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[7U]) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[6U]);\n  return\n    (KRML_CLITERAL(uint8_t_x4){ .fst = result0, .snd = result1, .thd = result2, .f3 = result3 });\n}\n\nKRML_MUSTINLINE Eurydice_array_u8x8\nlibcrux_ml_kem_vector_portable_serialize_serialize_4(Eurydice_arr_d6 v)\n{\n  uint8_t_x4\n  result0_3 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })));\n  uint8_t_x4\n  result4_7 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_array_u8x8){\n        .data = {\n          result0_3.fst, result0_3.snd, result0_3.thd, result0_3.f3, result4_7.fst, result4_7.snd,\n          result4_7.thd, result4_7.f3\n        }\n      }\n    );\n}\n\nEurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_4(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_52(libcrux_ml_kem_vector_portable_serialize_serialize_4(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_4_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_4(a);\n}\n\nKRML_MUSTINLINE int16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  int16_t v0 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[0U] & 15U);\n  int16_t v1 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[0U] >> 4U & 15U);\n  int16_t v2 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[1U] & 15U);\n  int16_t v3 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[1U] >> 4U & 15U);\n  int16_t v4 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[2U] & 15U);\n  int16_t v5 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[2U] >> 4U & 15U);\n  int16_t v6 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[3U] & 15U);\n  int16_t v7 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[3U] >> 4U & 15U);\n  return\n    (\n      KRML_CLITERAL(int16_t_x8){\n        .fst = v0,\n        .snd = v1,\n        .thd = v2,\n        .f3 = v3,\n        .f4 = v4,\n        .f5 = v5,\n        .f6 = v6,\n        .f7 = v7\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_4(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  int16_t_x8\n  v0_7 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)4U })));\n  int16_t_x8\n  v8_15 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)8U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, v0_7.f6, v0_7.f7, v8_15.fst,\n          v8_15.snd, v8_15.thd, v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_4(Eurydice_mut_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_4(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_4_b8(Eurydice_mut_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_4(a);\n}\n\nKRML_MUSTINLINE uint8_t_x5\nlibcrux_ml_kem_vector_portable_serialize_serialize_5_int(Eurydice_mut_borrow_slice_i16 v)\n{\n  uint8_t r0 = libcrux_secrets_int_as_u8_f5(v.ptr[0U] | (int16_t)((uint32_t)v.ptr[1U] << 5U));\n  uint8_t\n  r1 =\n    libcrux_secrets_int_as_u8_f5((v.ptr[1U] >> 3U | (int16_t)((uint32_t)v.ptr[2U] << 2U)) |\n        (int16_t)((uint32_t)v.ptr[3U] << 7U));\n  uint8_t\n  r2 = libcrux_secrets_int_as_u8_f5(v.ptr[3U] >> 1U | (int16_t)((uint32_t)v.ptr[4U] << 4U));\n  uint8_t\n  r3 =\n    libcrux_secrets_int_as_u8_f5((v.ptr[4U] >> 4U | (int16_t)((uint32_t)v.ptr[5U] << 1U)) |\n        (int16_t)((uint32_t)v.ptr[6U] << 6U));\n  uint8_t\n  r4 = libcrux_secrets_int_as_u8_f5(v.ptr[6U] >> 2U | (int16_t)((uint32_t)v.ptr[7U] << 3U));\n  return (KRML_CLITERAL(uint8_t_x5){ .fst = r0, .snd = r1, .thd = r2, .f3 = r3, .f4 = r4 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_6d\nlibcrux_ml_kem_vector_portable_serialize_serialize_5(Eurydice_arr_d6 v)\n{\n  uint8_t_x5\n  r0_4 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_5_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })));\n  uint8_t_x5\n  r5_9 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_5_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_6d){\n        .data = {\n          r0_4.fst, r0_4.snd, r0_4.thd, r0_4.f3, r0_4.f4, r5_9.fst, r5_9.snd, r5_9.thd, r5_9.f3,\n          r5_9.f4\n        }\n      }\n    );\n}\n\nEurydice_arr_6d libcrux_ml_kem_vector_portable_serialize_5(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_37(libcrux_ml_kem_vector_portable_serialize_serialize_5(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_6d libcrux_ml_kem_vector_portable_serialize_5_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_5(a);\n}\n\nKRML_MUSTINLINE int16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_5_int(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  int16_t v0 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[0U] & 31U);\n  int16_t\n  v1 =\n    libcrux_secrets_int_as_i16_59(((uint32_t)bytes.ptr[1U] & 3U) << 3U |\n        (uint32_t)bytes.ptr[0U] >> 5U);\n  int16_t v2 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[1U] >> 2U & 31U);\n  int16_t\n  v3 =\n    libcrux_secrets_int_as_i16_59(((uint32_t)bytes.ptr[2U] & 15U) << 1U |\n        (uint32_t)bytes.ptr[1U] >> 7U);\n  int16_t\n  v4 =\n    libcrux_secrets_int_as_i16_59(((uint32_t)bytes.ptr[3U] & 1U) << 4U |\n        (uint32_t)bytes.ptr[2U] >> 4U);\n  int16_t v5 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[3U] >> 1U & 31U);\n  int16_t\n  v6 =\n    libcrux_secrets_int_as_i16_59(((uint32_t)bytes.ptr[4U] & 7U) << 2U |\n        (uint32_t)bytes.ptr[3U] >> 6U);\n  int16_t v7 = libcrux_secrets_int_as_i16_59((uint32_t)bytes.ptr[4U] >> 3U);\n  return\n    (\n      KRML_CLITERAL(int16_t_x8){\n        .fst = v0,\n        .snd = v1,\n        .thd = v2,\n        .f3 = v3,\n        .f4 = v4,\n        .f5 = v5,\n        .f6 = v6,\n        .f7 = v7\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_5(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  int16_t_x8\n  v0_7 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_5_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)5U })));\n  int16_t_x8\n  v8_15 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_5_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)5U, .end = (size_t)10U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, v0_7.f6, v0_7.f7, v8_15.fst,\n          v8_15.snd, v8_15.thd, v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_5(Eurydice_mut_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_5(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_5_b8(Eurydice_mut_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_5(a);\n}\n\nKRML_MUSTINLINE uint8_t_x5\nlibcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_mut_borrow_slice_i16 v)\n{\n  uint8_t r0 = libcrux_secrets_int_as_u8_f5(v.ptr[0U] & 255);\n  uint8_t\n  r1 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U] & 63) << 2U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[0U] >> 8U & 3);\n  uint8_t\n  r2 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U] & 15) << 4U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[1U] >> 6U & 15);\n  uint8_t\n  r3 =\n    (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[3U] & 3) << 6U |\n      (uint32_t)libcrux_secrets_int_as_u8_f5(v.ptr[2U] >> 4U & 63);\n  uint8_t r4 = libcrux_secrets_int_as_u8_f5(v.ptr[3U] >> 2U & 255);\n  return (KRML_CLITERAL(uint8_t_x5){ .fst = r0, .snd = r1, .thd = r2, .f3 = r3, .f4 = r4 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_fc\nlibcrux_ml_kem_vector_portable_serialize_serialize_10(Eurydice_arr_d6 v)\n{\n  uint8_t_x5\n  r0_4 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)4U })));\n  uint8_t_x5\n  r5_9 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)8U })));\n  uint8_t_x5\n  r10_14 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)12U })));\n  uint8_t_x5\n  r15_19 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)16U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_fc){\n        .data = {\n          r0_4.fst, r0_4.snd, r0_4.thd, r0_4.f3, r0_4.f4, r5_9.fst, r5_9.snd, r5_9.thd, r5_9.f3,\n          r5_9.f4, r10_14.fst, r10_14.snd, r10_14.thd, r10_14.f3, r10_14.f4, r15_19.fst, r15_19.snd,\n          r15_19.thd, r15_19.f3, r15_19.f4\n        }\n      }\n    );\n}\n\nEurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_10(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_2b(libcrux_ml_kem_vector_portable_serialize_serialize_10(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_10_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_10(a);\n}\n\nKRML_MUSTINLINE int16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  int16_t\n  r0 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[1U])\n      & 3)\n      << 8U)\n      | (libcrux_secrets_int_as_i16_59(bytes.ptr[0U]) & 255));\n  int16_t\n  r1 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[2U])\n      & 15)\n      << 6U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[1U]) >> 2U);\n  int16_t\n  r2 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[3U])\n      & 63)\n      << 4U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[2U]) >> 4U);\n  int16_t\n  r3 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[4U])\n      << 2U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[3U]) >> 6U);\n  int16_t\n  r4 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[6U])\n      & 3)\n      << 8U)\n      | (libcrux_secrets_int_as_i16_59(bytes.ptr[5U]) & 255));\n  int16_t\n  r5 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[7U])\n      & 15)\n      << 6U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[6U]) >> 2U);\n  int16_t\n  r6 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)(libcrux_secrets_int_as_i16_59(bytes.ptr[8U])\n      & 63)\n      << 4U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[7U]) >> 4U);\n  int16_t\n  r7 =\n    libcrux_secrets_int_as_i16_f5((int16_t)((uint32_t)libcrux_secrets_int_as_i16_59(bytes.ptr[9U])\n      << 2U)\n      | libcrux_secrets_int_as_i16_59(bytes.ptr[8U]) >> 6U);\n  return\n    (\n      KRML_CLITERAL(int16_t_x8){\n        .fst = r0,\n        .snd = r1,\n        .thd = r2,\n        .f3 = r3,\n        .f4 = r4,\n        .f5 = r5,\n        .f6 = r6,\n        .f7 = r7\n      }\n    );\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_10(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  int16_t_x8\n  v0_7 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)10U })));\n  int16_t_x8\n  v8_15 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)10U, .end = (size_t)20U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          v0_7.fst, v0_7.snd, v0_7.thd, v0_7.f3, v0_7.f4, v0_7.f5, v0_7.f6, v0_7.f7, v8_15.fst,\n          v8_15.snd, v8_15.thd, v8_15.f3, v8_15.f4, v8_15.f5, v8_15.f6, v8_15.f7\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_10(Eurydice_mut_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_10(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_deserialize_10_b8(Eurydice_mut_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_10(a);\n}\n\nKRML_MUSTINLINE uint8_t_x3\nlibcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_mut_borrow_slice_i16 v)\n{\n  uint8_t r0 = libcrux_secrets_int_as_u8_f5(v.ptr[0U] & 255);\n  uint8_t\n  r1 =\n    libcrux_secrets_int_as_u8_f5(v.ptr[0U] >> 8U | (int16_t)((uint32_t)(v.ptr[1U] & 15) << 4U));\n  uint8_t r2 = libcrux_secrets_int_as_u8_f5(v.ptr[1U] >> 4U & 255);\n  return (KRML_CLITERAL(uint8_t_x3){ .fst = r0, .snd = r1, .thd = r2 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_94\nlibcrux_ml_kem_vector_portable_serialize_serialize_12(Eurydice_arr_d6 v)\n{\n  uint8_t_x3\n  r0_2 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)2U })));\n  uint8_t_x3\n  r3_5 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)2U, .end = (size_t)4U })));\n  uint8_t_x3\n  r6_8 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)4U, .end = (size_t)6U })));\n  uint8_t_x3\n  r9_11 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)6U, .end = (size_t)8U })));\n  uint8_t_x3\n  r12_14 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)10U })));\n  uint8_t_x3\n  r15_17 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)10U, .end = (size_t)12U })));\n  uint8_t_x3\n  r18_20 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)14U })));\n  uint8_t_x3\n  r21_23 =\n    libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_array_to_subslice_mut_e7(&v,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)14U, .end = (size_t)16U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_94){\n        .data = {\n          r0_2.fst, r0_2.snd, r0_2.thd, r3_5.fst, r3_5.snd, r3_5.thd, r6_8.fst, r6_8.snd, r6_8.thd,\n          r9_11.fst, r9_11.snd, r9_11.thd, r12_14.fst, r12_14.snd, r12_14.thd, r15_17.fst,\n          r15_17.snd, r15_17.thd, r18_20.fst, r18_20.snd, r18_20.thd, r21_23.fst, r21_23.snd,\n          r21_23.thd\n        }\n      }\n    );\n}\n\nEurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_12(Eurydice_arr_d6 a)\n{\n  return\n    libcrux_secrets_int_public_integers_declassify_d8_40(libcrux_ml_kem_vector_portable_serialize_serialize_12(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_12_b8(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_serialize_12(a);\n}\n\nKRML_MUSTINLINE int16_t_x2\nlibcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  int16_t byte0 = libcrux_secrets_int_as_i16_59(bytes.ptr[0U]);\n  int16_t byte1 = libcrux_secrets_int_as_i16_59(bytes.ptr[1U]);\n  int16_t byte2 = libcrux_secrets_int_as_i16_59(bytes.ptr[2U]);\n  int16_t r0 = (int16_t)((uint32_t)(byte1 & 15) << 8U) | (byte0 & 255);\n  int16_t r1 = (int16_t)((uint32_t)byte2 << 4U) | (byte1 >> 4U & 15);\n  return (KRML_CLITERAL(int16_t_x2){ .fst = r0, .snd = r1 });\n}\n\nKRML_MUSTINLINE Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_12(Eurydice_mut_borrow_slice_u8 bytes)\n{\n  int16_t_x2\n  v0_1 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)3U })));\n  int16_t_x2\n  v2_3 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)3U, .end = (size_t)6U })));\n  int16_t_x2\n  v4_5 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)6U, .end = (size_t)9U })));\n  int16_t_x2\n  v6_7 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)9U, .end = (size_t)12U })));\n  int16_t_x2\n  v8_9 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)12U, .end = (size_t)15U })));\n  int16_t_x2\n  v10_11 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)15U, .end = (size_t)18U })));\n  int16_t_x2\n  v12_13 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)18U, .end = (size_t)21U })));\n  int16_t_x2\n  v14_15 =\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_slice_subslice_mut_c8(bytes,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)21U, .end = (size_t)24U })));\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_d6){\n        .data = {\n          v0_1.fst, v0_1.snd, v2_3.fst, v2_3.snd, v4_5.fst, v4_5.snd, v6_7.fst, v6_7.snd, v8_9.fst,\n          v8_9.snd, v10_11.fst, v10_11.snd, v12_13.fst, v12_13.snd, v14_15.fst, v14_15.snd\n        }\n      }\n    );\n}\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_12(Eurydice_mut_borrow_slice_u8 a)\n{\n  return\n    libcrux_ml_kem_vector_portable_serialize_deserialize_12(libcrux_secrets_int_classify_public_classify_ref_6d_90(a));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_deserialize_12_b8(Eurydice_mut_borrow_slice_u8 a)\n{\n  return libcrux_ml_kem_vector_portable_deserialize_12(a);\n}\n\nKRML_MUSTINLINE size_t\nlibcrux_ml_kem_vector_portable_sampling_rej_sample(\n  Eurydice_mut_borrow_slice_u8 a,\n  Eurydice_mut_borrow_slice_i16 result\n)\n{\n  size_t sampled = (size_t)0U;\n  for (size_t i = (size_t)0U; i < a.meta / (size_t)3U; i++)\n  {\n    size_t i0 = i;\n    int16_t b1 = (int16_t)a.ptr[i0 * (size_t)3U + (size_t)0U];\n    int16_t b2 = (int16_t)a.ptr[i0 * (size_t)3U + (size_t)1U];\n    int16_t b3 = (int16_t)a.ptr[i0 * (size_t)3U + (size_t)2U];\n    int16_t d1 = (int16_t)((uint32_t)(b2 & 15) << 8U) | b1;\n    int16_t d2 = (int16_t)((uint32_t)b3 << 4U) | b2 >> 4U;\n    if (d1 < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)\n    {\n      if (sampled < (size_t)16U)\n      {\n        result.ptr[sampled] = d1;\n        sampled++;\n      }\n    }\n    if (d2 < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS)\n    {\n      if (sampled < (size_t)16U)\n      {\n        result.ptr[sampled] = d2;\n        sampled++;\n      }\n    }\n  }\n  return sampled;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nsize_t\nlibcrux_ml_kem_vector_portable_rej_sample_b8(\n  Eurydice_mut_borrow_slice_u8 a,\n  Eurydice_mut_borrow_slice_i16 out\n)\n{\n  return libcrux_ml_kem_vector_portable_sampling_rej_sample(a, out);\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\ninline Eurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_clone_9c(Eurydice_arr_d6 *self)\n{\n  return self[0U];\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ZERO_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic Eurydice_arr_9e ZERO_d6_ea(void)\n{\n  Eurydice_arr_9e lit;\n  Eurydice_arr_d6 repeat_expression[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_kem_vector_portable_ZERO_b8(););\n  memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (Eurydice_arr_d6));\n  return lit;\n}\n\n/**\n Only use with public values.\n\n This MUST NOT be used with secret inputs, like its caller `deserialize_ring_elements_reduced`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_reduced_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_to_reduced_ring_element_ea(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)24U,\n            .end = i0 * (size_t)24U + (size_t)24U\n          }\n        ));\n    Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_12_b8(bytes);\n    Eurydice_arr_d6 uu____0 = libcrux_ml_kem_vector_portable_cond_subtract_3329_b8(coefficient);\n    re.data[i0] = uu____0;\n  }\n  return re;\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_ee(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_d20 *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_mut_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_9e uu____0 = deserialize_to_reduced_ring_element_ea(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final\nwith const generics\n- K= 4\n*/\nstatic inline Eurydice_arr_4a shake128_init_absorb_final_23(Eurydice_arr_56 *input)\n{\n  Eurydice_arr_4a shake128_state;\n  Eurydice_arr_7c repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_sha3_portable_incremental_shake128_init(););\n  memcpy(shake128_state.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_7c));\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_absorb_final(&shake128_state.data[i0],\n      Eurydice_array_to_slice_mut_e9(&input->data[i0])););\n  return shake128_state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_4a\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_23(Eurydice_arr_56 *input)\n{\n  return shake128_init_absorb_final_23(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 4\n*/\nstatic inline Eurydice_arr_7c0 shake128_squeeze_first_three_blocks_23(Eurydice_arr_4a *st)\n{\n  Eurydice_arr_7c0\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(&st->data[i0],\n      Eurydice_array_to_slice_mut_48(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_7c0\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_23(\n  Eurydice_arr_4a *self\n)\n{\n  return shake128_squeeze_first_three_blocks_23(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_1c(\n  Eurydice_arr_7c0 *randomness,\n  Eurydice_arr_cc *sampled_coefficients,\n  Eurydice_arr_24 *out\n)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_mut_d49(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block\nwith const generics\n- K= 4\n*/\nstatic inline Eurydice_arr_9c shake128_squeeze_next_block_23(Eurydice_arr_4a *st)\n{\n  Eurydice_arr_9c\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&st->data[i0],\n      Eurydice_array_to_slice_mut_2c(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 4\n*/\nEurydice_arr_9c\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_23(Eurydice_arr_4a *self)\n{\n  return shake128_squeeze_next_block_23(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_1c0(\n  Eurydice_arr_9c *randomness,\n  Eurydice_arr_cc *sampled_coefficients,\n  Eurydice_arr_24 *out\n)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_mut_d41(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ZERO\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic Eurydice_arr_9e ZERO_ea(void)\n{\n  Eurydice_arr_9e lit;\n  Eurydice_arr_d6 repeat_expression[16U];\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_ml_kem_vector_portable_ZERO_b8(););\n  memcpy(lit.data, repeat_expression, (size_t)16U * sizeof (Eurydice_arr_d6));\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e from_i16_array_ea(Eurydice_mut_borrow_slice_i16 a)\n{\n  Eurydice_arr_9e result = ZERO_ea();\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    uu____0 =\n      libcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_slice_subslice_mut_a6(a,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * (size_t)16U,\n              .end = (i0 + (size_t)1U) * (size_t)16U\n            }\n          )));\n    result.data[i0] = uu____0;\n  }\n  return result;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e from_i16_array_d6_ea(Eurydice_mut_borrow_slice_i16 a)\n{\n  return from_i16_array_ea(a);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_9e call_mut_0a_911(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_ea(Eurydice_array_to_subslice_mut_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d20 sample_from_xof_911(Eurydice_arr_56 *seeds)\n{\n  Eurydice_arr_cc sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_24\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_4a\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_23(seeds);\n  Eurydice_arr_7c0\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_23(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_1c(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_9c\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_23(&xof_state);\n      done = sample_from_uniform_distribution_next_1c0(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_d20 arr_mapped_str;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_911(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_911(Eurydice_arr_600 *A_transpose, Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_56 seeds;\n    Eurydice_arr_31 repeat_expression[4U];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_d20 sampled = sample_from_xof_911(&seeds);\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_4a\nwith const generics\n- K= 4\n*/\nstatic inline Eurydice_arr_ec H_4a_23(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_29(\n  Eurydice_arr_d1 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *unpacked_public_key\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_mut_212(public_key, (size_t)1536U);\n  deserialize_ring_elements_reduced_ee(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_mut_5f5(public_key,\n        (size_t)1536U));\n  Eurydice_arr_600 *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_mut_5f5(public_key,\n        (size_t)1536U));\n  sample_matrix_A_911(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_4a_23(Eurydice_array_to_slice_mut_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.to_unsigned_field_modulus\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 to_unsigned_field_modulus_ea(Eurydice_arr_d6 a)\n{\n  return libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.serialize_uncompressed_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b20\nserialize_uncompressed_ring_element_ea(Eurydice_arr_9e *re)\n{\n  Eurydice_arr_b20 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6 coefficient = to_unsigned_field_modulus_ea(re->data[i0]);\n    Eurydice_arr_94 bytes = libcrux_ml_kem_vector_portable_serialize_12_b8(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d413(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)24U * i0,\n            .end = (size_t)24U * i0 + (size_t)24U\n          }\n        )),\n      Eurydice_array_to_slice_mut_ed(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_ee(Eurydice_arr_d20 *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_ea(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_1c(\n  Eurydice_arr_d20 *t_as_ntt,\n  Eurydice_mut_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_d1 *serialized\n)\n{\n  serialize_vector_ee(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d419(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f5(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_1c(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *self,\n  Eurydice_arr_d1 *serialized\n)\n{\n  serialize_public_key_mut_1c(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_1c(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_d1 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_1c(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nserialize_public_key_1c(Eurydice_arr_d20 *t_as_ntt, Eurydice_mut_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_d1 public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_1c(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nserialized_dd_1c(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_d9(serialize_public_key_1c(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_d1\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_1c(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self\n)\n{\n  return serialized_dd_1c(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PRIVATE_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair1024\nserialize_unpacked_secret_key_1c(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_d20 *private_key\n)\n{\n  Eurydice_arr_d1\n  public_key_serialized =\n    serialize_public_key_1c(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&public_key->seed_for_A));\n  Eurydice_arr_df secret_key_serialized = { .data = { 0U } };\n  serialize_vector_ee(private_key, Eurydice_array_to_slice_mut_2f(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair1024){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SERIALIZED_KEY_LEN= 3168\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_4c(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_a8 *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d422(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d422(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d422(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_4a_23(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d422(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_2e(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self,\n  Eurydice_arr_a8 *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair1024\n  uu____0 =\n    serialize_unpacked_secret_key_1c(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_df ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_d1 ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_4c(Eurydice_array_to_slice_mut_2f(&ind_cpa_private_key),\n    Eurydice_array_to_slice_mut_b50(&ind_cpa_public_key),\n    Eurydice_array_to_slice_mut_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n*/\nEurydice_arr_a8\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_2e(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_a8 sk = libcrux_ml_kem_types_default_d3_0e();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_2e(self, &sk);\n  return sk;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_to_uncompressed_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_to_uncompressed_ring_element_ea(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)24U,\n            .end = i0 * (size_t)24U + (size_t)24U\n          }\n        ));\n    Eurydice_arr_d6 uu____0 = libcrux_ml_kem_vector_portable_deserialize_12_b8(bytes);\n    re.data[i0] = uu____0;\n  }\n  return re;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_ee(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_d20 *secret_as_ntt)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_ea(Eurydice_slice_subslice_mut_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_051(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_ee(Eurydice_slice_subslice_to_mut_72(public_key,\n      (size_t)1536U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_mut_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_mut_6d(public_key, (size_t)1536U);\n  Eurydice_arr_600 *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_911(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_38(\n  Eurydice_arr_a8 *private_key,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e3(Eurydice_array_to_slice_mut_68(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_ee(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_051(ind_cpa_public_key,\n    &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_mut_6d(ind_cpa_public_key, (size_t)1536U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_d20 default_70_ee(void)\n{\n  Eurydice_arr_d20 lit;\n  Eurydice_arr_9e repeat_expression[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n  memcpy(lit.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_9e));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 default_8b_ee(void)\n{\n  Eurydice_arr_d20 uu____0;\n  Eurydice_arr_9e repeat_expression0[4U];\n  KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression0[i] = ZERO_d6_ea(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)4U * sizeof (Eurydice_arr_9e));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_d20 repeat_expression1[4U];\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    Eurydice_arr_d20 lit;\n    Eurydice_arr_9e repeat_expression[4U];\n    KRML_MAYBE_FOR4(i, (size_t)0U, (size_t)4U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n    memcpy(lit.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_9e));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)4U * sizeof (Eurydice_arr_d20));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94\nlibcrux_ml_kem_ind_cca_unpacked_default_30_ee(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94){\n        .ind_cpa_public_key = default_8b_ee(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nlibcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_ee(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_94\n  uu____0 =\n    { .ind_cpa_private_key = default_70_ee(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_ee()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_4a\nwith const generics\n- K= 4\n*/\nstatic inline Eurydice_arr_c7 G_4a_23(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_fe(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d411(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)4U;\n  return G_4a_23(Eurydice_array_to_slice_mut_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic inline Eurydice_arr_3b0 PRFxN_f5(Eurydice_arr_890 *input)\n{\n  Eurydice_arr_3b0\n  out =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&out.data[i0]),\n      Eurydice_array_to_slice_mut_b5(&input->data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic inline Eurydice_arr_3b0 PRFxN_4a_f5(Eurydice_arr_890 *input)\n{\n  return PRFxN_f5(input);\n}\n\n/**\n Given a series of uniformly random bytes in `randomness`, for some number `eta`,\n the `sample_from_binomial_distribution_{eta}` functions sample\n a ring element from a binomial distribution centered at 0 that uses two sets\n of `eta` coin flips. If, for example,\n `eta = ETA`, each ring coefficient is a value `v` such\n such that `v ∈ {-ETA, -ETA + 1, ..., 0, ..., ETA + 1, ETA}` and:\n\n ```plaintext\n - If v < 0, Pr[v] = Pr[-v]\n - If v >= 0, Pr[v] = BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2 ^ (2 * ETA)\n ```\n\n The values `v < 0` are mapped to the appropriate `KyberFieldElement`.\n\n The expected value is:\n\n ```plaintext\n E[X] = (-ETA)Pr[-ETA] + (-(ETA - 1))Pr[-(ETA - 1)] + ... + (ETA - 1)Pr[ETA - 1] + (ETA)Pr[ETA]\n      = 0 since Pr[-v] = Pr[v] when v < 0.\n ```\n\n And the variance is:\n\n ```plaintext\n Var(X) = E[(X - E[X])^2]\n        = E[X^2]\n        = sum_(v=-ETA to ETA)v^2 * (BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2^(2 * ETA))\n        = ETA / 2\n ```\n\n This function implements <strong>Algorithm 7</strong> of the NIST FIPS 203 standard, which is\n reproduced below:\n\n ```plaintext\n Input: byte array B ∈ 𝔹^{64η}.\n Output: array f ∈ ℤ₂₅₆.\n\n b ← BytesToBits(B)\n for (i ← 0; i < 256; i++)\n     x ← ∑(j=0 to η - 1) b[2iη + j]\n     y ← ∑(j=0 to η - 1) b[2iη + η + j]\n     f[i] ← x−y mod q\n end for\n return f\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution_2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsample_from_binomial_distribution_2_ea(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_04 sampled_i16s = { .data = { 0U } };\n  for (size_t i0 = (size_t)0U; i0 < randomness.meta / (size_t)4U; i0++)\n  {\n    size_t chunk_number = i0;\n    Eurydice_mut_borrow_slice_u8\n    byte_chunk =\n      Eurydice_slice_subslice_mut_c8(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = chunk_number * (size_t)4U,\n            .end = chunk_number * (size_t)4U + (size_t)4U\n          }\n        ));\n    uint32_t\n    random_bits_as_u32 =\n      (((uint32_t)byte_chunk.ptr[0U] | (uint32_t)byte_chunk.ptr[1U] << 8U) |\n        (uint32_t)byte_chunk.ptr[2U] << 16U)\n      | (uint32_t)byte_chunk.ptr[3U] << 24U;\n    uint32_t even_bits = random_bits_as_u32 & 1431655765U;\n    uint32_t odd_bits = random_bits_as_u32 >> 1U & 1431655765U;\n    uint32_t coin_toss_outcomes = even_bits + odd_bits;\n    for (uint32_t i = 0U; i < 32U / 4U; i++)\n    {\n      uint32_t outcome_set = i;\n      uint32_t outcome_set0 = outcome_set * 4U;\n      int16_t outcome_1 = (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 3U);\n      int16_t outcome_2 = (int16_t)(coin_toss_outcomes >> (uint32_t)(outcome_set0 + 2U) & 3U);\n      size_t offset = (size_t)(outcome_set0 >> 2U);\n      sampled_i16s.data[(size_t)8U * chunk_number + offset] = outcome_1 - outcome_2;\n    }\n  }\n  return from_i16_array_d6_ea(Eurydice_array_to_slice_mut_990(&sampled_i16s));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution_3\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsample_from_binomial_distribution_3_ea(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_04 sampled_i16s = { .data = { 0U } };\n  for (size_t i0 = (size_t)0U; i0 < randomness.meta / (size_t)3U; i0++)\n  {\n    size_t chunk_number = i0;\n    Eurydice_mut_borrow_slice_u8\n    byte_chunk =\n      Eurydice_slice_subslice_mut_c8(randomness,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = chunk_number * (size_t)3U,\n            .end = chunk_number * (size_t)3U + (size_t)3U\n          }\n        ));\n    uint32_t\n    random_bits_as_u24 =\n      ((uint32_t)byte_chunk.ptr[0U] | (uint32_t)byte_chunk.ptr[1U] << 8U) |\n        (uint32_t)byte_chunk.ptr[2U] << 16U;\n    uint32_t first_bits = random_bits_as_u24 & 2396745U;\n    uint32_t second_bits = random_bits_as_u24 >> 1U & 2396745U;\n    uint32_t third_bits = random_bits_as_u24 >> 2U & 2396745U;\n    uint32_t coin_toss_outcomes = first_bits + second_bits + third_bits;\n    for (int32_t i = 0; i < 24 / 6; i++)\n    {\n      int32_t outcome_set = i;\n      int32_t outcome_set0 = outcome_set * 6;\n      int16_t outcome_1 = (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 7U);\n      int16_t outcome_2 = (int16_t)(coin_toss_outcomes >> (uint32_t)(outcome_set0 + 3) & 7U);\n      size_t offset = (size_t)(outcome_set0 / 6);\n      sampled_i16s.data[(size_t)4U * chunk_number + offset] = outcome_1 - outcome_2;\n    }\n  }\n  return from_i16_array_d6_ea(Eurydice_array_to_slice_mut_990(&sampled_i16s));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- ETA= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsample_from_binomial_distribution_66(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  return sample_from_binomial_distribution_2_ea(randomness);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_7\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_7_ea(Eurydice_arr_9e *re)\n{\n  size_t step = LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT / (size_t)2U;\n  for (size_t i = (size_t)0U; i < step; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d6\n    t = libcrux_ml_kem_vector_portable_multiply_by_constant_b8(re->data[j + step], -1600);\n    re->data[j + step] = libcrux_ml_kem_vector_portable_sub_b8(re->data[j], &t);\n    Eurydice_arr_d6 uu____1 = libcrux_ml_kem_vector_portable_add_b8(re->data[j], &t);\n    re->data[j] = uu____1;\n  }\n}\n\ntypedef struct libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2_s\n{\n  Eurydice_arr_d6 fst;\n  Eurydice_arr_d6 snd;\n}\nlibcrux_ml_kem_vector_portable_vector_type_PortableVector_x2;\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_layer_int_vec_step\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2\nntt_layer_int_vec_step_ea(Eurydice_arr_d6 a, Eurydice_arr_d6 b, int16_t zeta_r)\n{\n  Eurydice_arr_d6\n  t = libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(b, zeta_r);\n  b = libcrux_ml_kem_vector_portable_sub_b8(a, &t);\n  a = libcrux_ml_kem_vector_portable_add_b8(a, &t);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){\n        .fst = a,\n        .snd = b\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_4_plus\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nntt_at_layer_4_plus_ea(size_t *zeta_i, Eurydice_arr_9e *re, size_t layer)\n{\n  size_t step = (size_t)1U << (uint32_t)layer;\n  for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++)\n  {\n    size_t round = i0;\n    zeta_i[0U]++;\n    size_t offset = round * step * (size_t)2U;\n    size_t offset_vec = offset / (size_t)16U;\n    size_t step_vec = step / (size_t)16U;\n    for (size_t i = offset_vec; i < offset_vec + step_vec; i++)\n    {\n      size_t j = i;\n      libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2\n      uu____0 =\n        ntt_layer_int_vec_step_ea(re->data[j],\n          re->data[j + step_vec],\n          libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n      Eurydice_arr_d6 x = uu____0.fst;\n      Eurydice_arr_d6 y = uu____0.snd;\n      re->data[j] = x;\n      re->data[j + step_vec] = y;\n    }\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_3\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_3_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    Eurydice_arr_d6\n    uu____0 =\n      libcrux_ml_kem_vector_portable_ntt_layer_3_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n    re->data[round] = uu____0;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_2_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    re->data[round] =\n      libcrux_ml_kem_vector_portable_ntt_layer_2_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)1U));\n    zeta_i[0U]++;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_at_layer_1_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]++;\n    re->data[round] =\n      libcrux_ml_kem_vector_portable_ntt_layer_1_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] + (size_t)3U));\n    zeta_i[0U] += (size_t)3U;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void poly_barrett_reduce_ea(Eurydice_arr_9e *myself)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6 uu____0 = libcrux_ml_kem_vector_portable_barrett_reduce_b8(myself->data[i0]);\n    myself->data[i0] = uu____0;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void poly_barrett_reduce_d6_ea(Eurydice_arr_9e *self)\n{\n  poly_barrett_reduce_ea(self);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_binomially_sampled_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void ntt_binomially_sampled_ring_element_ea(Eurydice_arr_9e *re)\n{\n  ntt_at_layer_7_ea(re);\n  size_t zeta_i = (size_t)1U;\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_ea(&zeta_i, re);\n  ntt_at_layer_2_ea(&zeta_i, re);\n  ntt_at_layer_1_ea(&zeta_i, re);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- ETA= 2\n- ETA_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_bf1(\n  Eurydice_arr_d20 *re_as_ntt,\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_890 prf_inputs;\n  Eurydice_arr_fa repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_23(&prf_inputs, domain_separator);\n  Eurydice_arr_3b0 prf_outputs = PRFxN_4a_f5(&prf_inputs);\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_66(Eurydice_array_to_slice_mut_78(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_ea(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_73_391(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Given two `KyberPolynomialRingElement`s in their NTT representations,\n compute their product. Given two polynomials in the NTT domain `f^` and `ĵ`,\n the `iᵗʰ` coefficient of the product `k̂` is determined by the calculation:\n\n ```plaintext\n ĥ[2·i] + ĥ[2·i + 1]X = (f^[2·i] + f^[2·i + 1]X)·(ĝ[2·i] + ĝ[2·i + 1]X) mod (X² - ζ^(2·BitRev₇(i) + 1))\n ```\n\n This function almost implements <strong>Algorithm 10</strong> of the\n NIST FIPS 203 standard, which is reproduced below:\n\n ```plaintext\n Input: Two arrays fˆ ∈ ℤ₂₅₆ and ĝ ∈ ℤ₂₅₆.\n Output: An array ĥ ∈ ℤq.\n\n for(i ← 0; i < 128; i++)\n     (ĥ[2i], ĥ[2i+1]) ← BaseCaseMultiply(fˆ[2i], fˆ[2i+1], ĝ[2i], ĝ[2i+1], ζ^(2·BitRev₇(i) + 1))\n end for\n return ĥ\n ```\n We say \"almost\" because the coefficients of the ring element output by\n this function are in the Montgomery domain.\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nntt_multiply_ea(Eurydice_arr_9e *myself, Eurydice_arr_9e *rhs)\n{\n  Eurydice_arr_9e out = ZERO_ea();\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    uu____0 =\n      libcrux_ml_kem_vector_portable_ntt_multiply_b8(&myself->data[i0],\n        &rhs->data[i0],\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta((size_t)64U + (size_t)4U * i0 + (size_t)3U));\n    out.data[i0] = uu____0;\n  }\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nntt_multiply_d6_ea(Eurydice_arr_9e *self, Eurydice_arr_9e *rhs)\n{\n  return ntt_multiply_ea(self, rhs);\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_ee(Eurydice_arr_9e *myself, Eurydice_arr_9e *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d6\n    uu____0 = libcrux_ml_kem_vector_portable_add_b8(myself->data[i0], &rhs->data[i0]);\n    myself->data[i0] = uu____0;);\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_ee(Eurydice_arr_9e *self, Eurydice_arr_9e *rhs)\n{\n  add_to_ring_element_ee(self, rhs);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.to_standard_domain\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 to_standard_domain_ea(Eurydice_arr_d6 vector)\n{\n  return\n    libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(vector,\n      LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_standard_error_reduce_ea(Eurydice_arr_9e *myself, Eurydice_arr_9e *error)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d6 coefficient_normal_form = to_standard_domain_ea(myself->data[j]);\n    Eurydice_arr_d6\n    sum = libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, &error->data[j]);\n    Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum);\n    myself->data[j] = red;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_standard_error_reduce_d6_ea(Eurydice_arr_9e *self, Eurydice_arr_9e *error)\n{\n  add_standard_error_reduce_ea(self, error);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_ee(\n  Eurydice_arr_d20 *t_as_ntt,\n  Eurydice_arr_600 *matrix_A,\n  Eurydice_arr_d20 *s_as_ntt,\n  Eurydice_arr_d20 *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d20 *row = &matrix_A->data[i0];\n    Eurydice_arr_9e uu____0 = ZERO_d6_ea();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR4(i1,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i1;\n      Eurydice_arr_9e *matrix_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_ee(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_ea(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_391(\n  Eurydice_mut_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_d20 *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_fe(key_generation_seed);\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_600 *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_911(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_bf1(private_key, &prf_input, 0U);\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_391(&lvalue););\n  Eurydice_arr_d20 error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_bf1(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_ee(&public_key->t_as_ntt, &public_key->A, private_key, &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_9e call_mut_b4_ee(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_d20 call_mut_22_ee(void **_)\n{\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_ee(&lvalue););\n  return arr_struct;\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.clone_c1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic inline Eurydice_arr_9e clone_c1_ea(Eurydice_arr_9e *self)\n{\n  return\n    core_array__core__clone__Clone_for__T__N___clone((size_t)16U,\n      self,\n      Eurydice_arr_d6,\n      Eurydice_arr_9e);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_600 transpose_a_ee(Eurydice_arr_600 ind_cpa_a)\n{\n  Eurydice_arr_600 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_ee(&lvalue););\n  Eurydice_arr_600 A = arr_struct;\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e uu____0 = clone_c1_ea(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b81(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *out\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_391(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_600 A = transpose_a_ee(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_d1\n  pk_serialized =\n    serialize_public_key_1c(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_4a_23(Eurydice_array_to_slice_mut_b50(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_fe(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_mut_borrow_slice_u8 pk_hash\n)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_4a_23(Eurydice_array_to_slice_mut_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_d20, libcrux_ml_kem_polynomial_PolynomialRingElement_1d\n\n*/\ntypedef struct tuple_12_s\n{\n  Eurydice_arr_d20 fst;\n  Eurydice_arr_9e snd;\n}\ntuple_12;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_f1_871(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_dd_871(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_bf1(\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_d20 *error_1\n)\n{\n  Eurydice_arr_890 prf_inputs;\n  Eurydice_arr_fa repeat_expression[4U];\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)4U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_23(&prf_inputs, domain_separator);\n  Eurydice_arr_3b0 prf_outputs = PRFxN_4a_f5(&prf_inputs);\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_66(Eurydice_array_to_slice_mut_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF\nwith const generics\n- LEN= 128\n*/\nstatic inline Eurydice_arr_89 PRF_ec(Eurydice_mut_borrow_slice_u8 input)\n{\n  Eurydice_arr_89 digest = { .data = { 0U } };\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&digest), input);\n  return digest;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 4\n- LEN= 128\n*/\nstatic inline Eurydice_arr_89 PRF_4a_f50(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_9e call_mut_a8_ee(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_1_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    re->data[round] =\n      libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)1U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)2U),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)3U));\n    zeta_i[0U] -= (size_t)3U;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_2_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    re->data[round] =\n      libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]),\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U] - (size_t)1U));\n    zeta_i[0U]--;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_3\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void invert_ntt_at_layer_3_ea(size_t *zeta_i, Eurydice_arr_9e *re)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t round = i;\n    zeta_i[0U]--;\n    Eurydice_arr_d6\n    uu____0 =\n      libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8(re->data[round],\n        libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n    re->data[round] = uu____0;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.inv_ntt_layer_int_vec_step_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2\ninv_ntt_layer_int_vec_step_reduce_ea(Eurydice_arr_d6 a, Eurydice_arr_d6 b, int16_t zeta_r)\n{\n  Eurydice_arr_d6 a_minus_b = libcrux_ml_kem_vector_portable_sub_b8(b, &a);\n  a =\n    libcrux_ml_kem_vector_portable_barrett_reduce_b8(libcrux_ml_kem_vector_portable_add_b8(a, &b));\n  b = libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(a_minus_b, zeta_r);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){\n        .fst = a,\n        .snd = b\n      }\n    );\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_4_plus\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ninvert_ntt_at_layer_4_plus_ea(size_t *zeta_i, Eurydice_arr_9e *re, size_t layer)\n{\n  size_t step = (size_t)1U << (uint32_t)layer;\n  for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++)\n  {\n    size_t round = i0;\n    zeta_i[0U]--;\n    size_t offset = round * step * (size_t)2U;\n    size_t offset_vec = offset / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;\n    size_t step_vec = step / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;\n    for (size_t i = offset_vec; i < offset_vec + step_vec; i++)\n    {\n      size_t j = i;\n      libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2\n      uu____0 =\n        inv_ntt_layer_int_vec_step_reduce_ea(re->data[j],\n          re->data[j + step_vec],\n          libcrux_ml_kem_polynomial_zeta(zeta_i[0U]));\n      Eurydice_arr_d6 x = uu____0.fst;\n      Eurydice_arr_d6 y = uu____0.snd;\n      re->data[j] = x;\n      re->data[j + step_vec] = y;\n    }\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_ee(Eurydice_arr_9e *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_ea(&zeta_i, re);\n  invert_ntt_at_layer_2_ea(&zeta_i, re);\n  invert_ntt_at_layer_3_ea(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_error_reduce_ea(Eurydice_arr_9e *myself, Eurydice_arr_9e *error)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t j = i;\n    Eurydice_arr_d6\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(myself->data[j],\n        1441);\n    Eurydice_arr_d6\n    sum = libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, &error->data[j]);\n    Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum);\n    myself->data[j] = red;\n  }\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\nadd_error_reduce_d6_ea(Eurydice_arr_9e *self, Eurydice_arr_9e *error)\n{\n  add_error_reduce_ea(self, error);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d20\ncompute_vector_u_ee(\n  Eurydice_arr_600 *a_as_ntt,\n  Eurydice_arr_d20 *r_as_ntt,\n  Eurydice_arr_d20 *error_1\n)\n{\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_ee(&lvalue););\n  Eurydice_arr_d20 result = arr_struct;\n  KRML_MAYBE_FOR4(i0,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_d20 *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR4(i,\n      (size_t)0U,\n      (size_t)4U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e *a_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_ee(&result.data[i1], &product););\n    invert_ntt_montgomery_ee(&result.data[i1]);\n    add_error_reduce_d6_ea(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 compress_ef(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int16_t\n    uu____0 =\n      libcrux_secrets_int_as_i16_f5(libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient((uint8_t)10,\n          libcrux_secrets_int_as_u16_f5(a.data[i0])));\n    a.data[i0] = uu____0;\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic Eurydice_arr_d6 compress_b8_ef(Eurydice_arr_d6 a)\n{\n  return compress_ef(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 compress_c4(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int16_t\n    uu____0 =\n      libcrux_secrets_int_as_i16_f5(libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient((uint8_t)11,\n          libcrux_secrets_int_as_u16_f5(a.data[i0])));\n    a.data[i0] = uu____0;\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic Eurydice_arr_d6 compress_b8_c4(Eurydice_arr_d6 a)\n{\n  return compress_c4(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- OUT_LEN= 352\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_e7 compress_then_serialize_11_bd(Eurydice_arr_9e *re)\n{\n  Eurydice_arr_e7 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    coefficient =\n      compress_b8_c4(libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(re->data[i0]));\n    Eurydice_arr_80 bytes = libcrux_ml_kem_vector_portable_serialize_11_b8(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d421(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)22U * i0,\n            .end = (size_t)22U * i0 + (size_t)22U\n          }\n        )),\n      Eurydice_array_to_slice_mut_98(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- COMPRESSION_FACTOR= 11\n- OUT_LEN= 352\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_e7\ncompress_then_serialize_ring_element_u_86(Eurydice_arr_9e *re)\n{\n  return compress_then_serialize_11_bd(re);\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- OUT_LEN= 1408\n- COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_2e(Eurydice_arr_d20 input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)1408U / (size_t)4U),\n            .end = (i0 + (size_t)1U) * ((size_t)1408U / (size_t)4U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_e7 lvalue = compress_then_serialize_ring_element_u_86(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_25(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- C1_LEN= 1408\n- U_COMPRESSION_FACTOR= 11\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_12\nencrypt_c1_871(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_arr_600 *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_d20 arr_struct0;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_871(&lvalue););\n  Eurydice_arr_d20 r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_bf1(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_871(&lvalue););\n  Eurydice_arr_d20 error_1 = arr_struct;\n  uint8_t\n  domain_separator = sample_ring_element_cbd_bf1(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_4a_f50(Eurydice_array_to_slice_mut_b5(&prf_input));\n  Eurydice_arr_9e\n  error_2 = sample_from_binomial_distribution_66(Eurydice_array_to_slice_mut_78(&prf_output));\n  Eurydice_arr_d20 u = compute_vector_u_ee(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_2e(u, ciphertext);\n  return (KRML_CLITERAL(tuple_12){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_message\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_message_ea(Eurydice_arr_ec *serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d6\n    coefficient_compressed =\n      libcrux_ml_kem_vector_portable_deserialize_1_b8(Eurydice_array_to_subslice_mut_d44(serialized,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = (size_t)2U * i0,\n              .end = (size_t)2U * i0 + (size_t)2U\n            }\n          )));\n    Eurydice_arr_d6\n    uu____0 = libcrux_ml_kem_vector_portable_decompress_1_b8(coefficient_compressed);\n    re.data[i0] = uu____0;);\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nadd_message_error_reduce_ea(\n  Eurydice_arr_9e *myself,\n  Eurydice_arr_9e *message,\n  Eurydice_arr_9e result\n)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(result.data[i0],\n        1441);\n    Eurydice_arr_d6\n    sum1 = libcrux_ml_kem_vector_portable_add_b8(myself->data[i0], &message->data[i0]);\n    Eurydice_arr_d6 sum2 = libcrux_ml_kem_vector_portable_add_b8(coefficient_normal_form, &sum1);\n    Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(sum2);\n    result.data[i0] = red;\n  }\n  return result;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nadd_message_error_reduce_d6_ea(\n  Eurydice_arr_9e *self,\n  Eurydice_arr_9e *message,\n  Eurydice_arr_9e result\n)\n{\n  return add_message_error_reduce_ea(self, message, result);\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_ring_element_v_ee(\n  Eurydice_arr_d20 *t_as_ntt,\n  Eurydice_arr_d20 *r_as_ntt,\n  Eurydice_arr_9e *error_2,\n  Eurydice_arr_9e *message\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_ee(&result, &product););\n  invert_ntt_montgomery_ee(&result);\n  return add_message_error_reduce_d6_ea(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 compress_d1(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int16_t\n    uu____0 =\n      libcrux_secrets_int_as_i16_f5(libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient((uint8_t)4,\n          libcrux_secrets_int_as_u16_f5(a.data[i0])));\n    a.data[i0] = uu____0;\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic Eurydice_arr_d6 compress_b8_d1(Eurydice_arr_d6 a)\n{\n  return compress_d1(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_4\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_4_ea(Eurydice_arr_9e re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6 coefficient = compress_b8_d1(to_unsigned_field_modulus_ea(re.data[i0]));\n    Eurydice_array_u8x8 bytes = libcrux_ml_kem_vector_portable_serialize_4_b8(coefficient);\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)8U * i0,\n            .end = (size_t)8U * i0 + (size_t)8U\n          }\n        )),\n      Eurydice_array_to_slice_mut_6e(&bytes),\n      uint8_t);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 compress_f4(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int16_t\n    uu____0 =\n      libcrux_secrets_int_as_i16_f5(libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient((uint8_t)5,\n          libcrux_secrets_int_as_u16_f5(a.data[i0])));\n    a.data[i0] = uu____0;\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress_b8\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic Eurydice_arr_d6 compress_b8_f4(Eurydice_arr_d6 a)\n{\n  return compress_f4(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_5\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_5_ea(Eurydice_arr_9e re, Eurydice_mut_borrow_slice_u8 serialized)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    coefficients =\n      compress_b8_f4(libcrux_ml_kem_vector_portable_to_unsigned_representative_b8(re.data[i0]));\n    Eurydice_arr_6d bytes = libcrux_ml_kem_vector_portable_serialize_5_b8(coefficients);\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)10U * i0,\n            .end = (size_t)10U * i0 + (size_t)10U\n          }\n        )),\n      Eurydice_array_to_slice_mut_30(&bytes),\n      uint8_t);\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- COMPRESSION_FACTOR= 5\n- OUT_LEN= 160\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_1c(Eurydice_arr_9e re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_5_ea(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- V_COMPRESSION_FACTOR= 5\n- C2_LEN= 160\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_1c(\n  Eurydice_arr_d20 *t_as_ntt,\n  Eurydice_arr_d20 *r_as_ntt,\n  Eurydice_arr_9e *error_2,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_9e message_as_ring_element = deserialize_then_decompress_message_ea(message);\n  Eurydice_arr_9e\n  v = compute_ring_element_v_ee(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_1c(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_LEN= 1408\n- C2_LEN= 160\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nencrypt_unpacked_d51(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_d1 ciphertext = { .data = { 0U } };\n  tuple_12\n  uu____0 =\n    encrypt_c1_871(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d419(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)1408U })));\n  Eurydice_arr_d20 r_as_ntt = uu____0.fst;\n  Eurydice_arr_9e error_2 = uu____0.snd;\n  encrypt_c2_1c(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f5(&ciphertext, (size_t)1408U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- VECTOR_U_BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a71(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_94 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_fe(Eurydice_array_to_slice_mut_01(randomness),\n      Eurydice_array_to_slice_mut_01(&public_key->public_key_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_d1\n  ciphertext =\n    encrypt_unpacked_d51(&public_key->ind_cpa_public_key,\n      randomness,\n      pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_25){\n        .fst = libcrux_ml_kem_types_from_19_d9(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- U_COMPRESSION_FACTOR= 11\n*/\nstatic Eurydice_arr_9e call_mut_35_1c(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 decompress_ciphertext_coefficient_ef(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int32_t\n    decompressed =\n      libcrux_secrets_int_as_i32_f5(a.data[i0]) *\n        libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n    decompressed = (int32_t)((uint32_t)decompressed << 1U) + (int32_t)((uint32_t)1 << (uint32_t)10);\n    decompressed >>= (uint32_t)(10 + 1);\n    a.data[i0] = libcrux_secrets_int_as_i16_36(decompressed);\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8\nwith const generics\n- COEFFICIENT_BITS= 10\n*/\nstatic Eurydice_arr_d6 decompress_ciphertext_coefficient_b8_ef(Eurydice_arr_d6 a)\n{\n  return decompress_ciphertext_coefficient_ef(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_10\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_10_ea(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)20U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)20U,\n            .end = i0 * (size_t)20U + (size_t)20U\n          }\n        ));\n    Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_10_b8(bytes);\n    Eurydice_arr_d6 uu____0 = decompress_ciphertext_coefficient_b8_ef(coefficient);\n    re.data[i0] = uu____0;\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 decompress_ciphertext_coefficient_c4(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int32_t\n    decompressed =\n      libcrux_secrets_int_as_i32_f5(a.data[i0]) *\n        libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n    decompressed = (int32_t)((uint32_t)decompressed << 1U) + (int32_t)((uint32_t)1 << (uint32_t)11);\n    decompressed >>= (uint32_t)(11 + 1);\n    a.data[i0] = libcrux_secrets_int_as_i16_36(decompressed);\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8\nwith const generics\n- COEFFICIENT_BITS= 11\n*/\nstatic Eurydice_arr_d6 decompress_ciphertext_coefficient_b8_c4(Eurydice_arr_d6 a)\n{\n  return decompress_ciphertext_coefficient_c4(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_11_ea(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)22U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)22U,\n            .end = i0 * (size_t)22U + (size_t)22U\n          }\n        ));\n    Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_11_b8(bytes);\n    Eurydice_arr_d6 uu____0 = decompress_ciphertext_coefficient_b8_c4(coefficient);\n    re.data[i0] = uu____0;\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_ring_element_u_ee(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_11_ea(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- VECTOR_U_COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE void ntt_vector_u_ee(Eurydice_arr_9e *re)\n{\n  size_t zeta_i = (size_t)0U;\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_ea(&zeta_i, re);\n  ntt_at_layer_2_ea(&zeta_i, re);\n  ntt_at_layer_1_ea(&zeta_i, re);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- U_COMPRESSION_FACTOR= 11\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d20\ndeserialize_then_decompress_u_1c(Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_1c(&lvalue););\n  Eurydice_arr_d20 u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)1568U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_mut_d419(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)11U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_ee(u_bytes);\n    ntt_vector_u_ee(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 decompress_ciphertext_coefficient_d1(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int32_t\n    decompressed =\n      libcrux_secrets_int_as_i32_f5(a.data[i0]) *\n        libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n    decompressed = (int32_t)((uint32_t)decompressed << 1U) + (int32_t)((uint32_t)1 << (uint32_t)4);\n    decompressed >>= (uint32_t)(4 + 1);\n    a.data[i0] = libcrux_secrets_int_as_i16_36(decompressed);\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8\nwith const generics\n- COEFFICIENT_BITS= 4\n*/\nstatic Eurydice_arr_d6 decompress_ciphertext_coefficient_b8_d1(Eurydice_arr_d6 a)\n{\n  return decompress_ciphertext_coefficient_d1(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_4\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_4_ea(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)8U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)8U,\n            .end = i0 * (size_t)8U + (size_t)8U\n          }\n        ));\n    Eurydice_arr_d6 coefficient = libcrux_ml_kem_vector_portable_deserialize_4_b8(bytes);\n    Eurydice_arr_d6 uu____0 = decompress_ciphertext_coefficient_b8_d1(coefficient);\n    re.data[i0] = uu____0;\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d6 decompress_ciphertext_coefficient_f4(Eurydice_arr_d6 a)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++)\n  {\n    size_t i0 = i;\n    int32_t\n    decompressed =\n      libcrux_secrets_int_as_i32_f5(a.data[i0]) *\n        libcrux_secrets_int_as_i32_f5(libcrux_secrets_int_public_integers_classify_27_39(LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS));\n    decompressed = (int32_t)((uint32_t)decompressed << 1U) + (int32_t)((uint32_t)1 << (uint32_t)5);\n    decompressed >>= (uint32_t)(5 + 1);\n    a.data[i0] = libcrux_secrets_int_as_i16_36(decompressed);\n  }\n  return a;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_b8\nwith const generics\n- COEFFICIENT_BITS= 5\n*/\nstatic Eurydice_arr_d6 decompress_ciphertext_coefficient_b8_f4(Eurydice_arr_d6 a)\n{\n  return decompress_ciphertext_coefficient_f4(a);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_5\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_5_ea(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  Eurydice_arr_9e re = ZERO_d6_ea();\n  for (size_t i = (size_t)0U; i < serialized.meta / (size_t)10U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    bytes =\n      Eurydice_slice_subslice_mut_c8(serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * (size_t)10U,\n            .end = i0 * (size_t)10U + (size_t)10U\n          }\n        ));\n    re.data[i0] = libcrux_ml_kem_vector_portable_deserialize_5_b8(bytes);\n    Eurydice_arr_d6 uu____1 = decompress_ciphertext_coefficient_b8_f4(re.data[i0]);\n    re.data[i0] = uu____1;\n  }\n  return re;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_ring_element_v_1c(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_5_ea(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsubtract_reduce_ea(Eurydice_arr_9e *myself, Eurydice_arr_9e b)\n{\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6\n    coefficient_normal_form =\n      libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(b.data[i0],\n        1441);\n    Eurydice_arr_d6\n    diff = libcrux_ml_kem_vector_portable_sub_b8(myself->data[i0], &coefficient_normal_form);\n    Eurydice_arr_d6 red = libcrux_ml_kem_vector_portable_barrett_reduce_b8(diff);\n    b.data[i0] = red;\n  }\n  return b;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsubtract_reduce_d6_ea(Eurydice_arr_9e *self, Eurydice_arr_9e b)\n{\n  return subtract_reduce_ea(self, b);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_message_ee(\n  Eurydice_arr_9e *v,\n  Eurydice_arr_d20 *secret_as_ntt,\n  Eurydice_arr_d20 *u_as_ntt\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_ee(&result, &product););\n  invert_ntt_montgomery_ee(&result);\n  return subtract_reduce_d6_ea(v, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_message\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec compress_then_serialize_message_ea(Eurydice_arr_9e re)\n{\n  Eurydice_arr_ec serialized = { .data = { 0U } };\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d6 coefficient = to_unsigned_field_modulus_ea(re.data[i0]);\n    Eurydice_arr_d6\n    coefficient_compressed = libcrux_ml_kem_vector_portable_compress_1_b8(coefficient);\n    Eurydice_array_u8x2\n    bytes = libcrux_ml_kem_vector_portable_serialize_1_b8(coefficient_compressed);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)2U * i0,\n            .end = (size_t)2U * i0 + (size_t)2U\n          }\n        )),\n      Eurydice_array_to_slice_mut_82(&bytes),\n      uint8_t););\n  return serialized;\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_38(Eurydice_arr_d20 *secret_key, Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_d20 u_as_ntt = deserialize_then_decompress_u_1c(ciphertext);\n  Eurydice_arr_9e\n  v =\n    deserialize_then_decompress_ring_element_v_1c(Eurydice_array_to_subslice_from_mut_5f5(ciphertext,\n        (size_t)1408U));\n  Eurydice_arr_9e message = compute_message_ee(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_ea(message);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF\nwith const generics\n- LEN= 32\n*/\nstatic inline Eurydice_arr_ec PRF_ce(Eurydice_mut_borrow_slice_u8 input)\n{\n  Eurydice_arr_ec digest = { .data = { 0U } };\n  libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_01(&digest), input);\n  return digest;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 4\n- LEN= 32\n*/\nstatic inline Eurydice_arr_ec PRF_4a_f5(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c1(\n  libcrux_ml_kem_mlkem1024_portable_unpacked_MlKem1024KeyPairUnpacked *key_pair,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_38(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_23(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_14\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_49(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f6(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_d9(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_f5(Eurydice_array_to_slice_mut_720(&to_hash));\n  Eurydice_arr_d1\n  expected_ciphertext =\n    encrypt_unpacked_d51(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_mut_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_d9(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_mut_b50(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic Eurydice_arr_9e call_mut_0b_ee(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d20\ndeserialize_ring_elements_reduced_out_ee(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_ee(&lvalue););\n  Eurydice_arr_d20 deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_ee(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- PUBLIC_KEY_SIZE= 1568\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_1c(Eurydice_arr_d1 *public_key)\n{\n  Eurydice_arr_d20\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_ee(Eurydice_array_to_subslice_to_mut_212(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)));\n  Eurydice_arr_d1\n  public_key_serialized =\n    serialize_public_key_1c(&deserialized_pk,\n      Eurydice_array_to_subslice_from_mut_5f5(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)4U)));\n  return Eurydice_array_eq((size_t)1568U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_4c(Eurydice_arr_a8 *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_4a_23(Eurydice_array_to_subslice_mut_d422(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)4U,\n            .end = (size_t)768U * (size_t)4U + (size_t)32U\n          }\n        )));\n  Eurydice_mut_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_mut_d422(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)4U + (size_t)32U,\n          .end = (size_t)768U * (size_t)4U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_mut((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CIPHERTEXT_SIZE= 1568\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_79(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_4c(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- PRIVATE_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair1024\ngenerate_keypair_301(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_d20 private_key = default_70_ee();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94 public_key = default_8b_ee();\n  generate_keypair_unpacked_391(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_1c(&public_key, &private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- SERIALIZED_KEY_LEN= 3168\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_a8\nserialize_kem_secret_key_4c(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_a8 out = { .data = { 0U } };\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_4c(private_key,\n    public_key,\n    implicit_rejection_value,\n    &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CPA_PRIVATE_KEY_SIZE= 1536\n- PRIVATE_KEY_SIZE= 3168\n- PUBLIC_KEY_SIZE= 1568\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem1024_MlKem1024KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_b81(Eurydice_arr_c7 *randomness)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair1024\n  uu____0 = generate_keypair_301(ind_cpa_keypair_randomness);\n  Eurydice_arr_df ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_d1 public_key = uu____0.snd;\n  Eurydice_arr_a8\n  secret_key_serialized =\n    serialize_kem_secret_key_4c(Eurydice_array_to_slice_mut_2f(&ind_cpa_private_key),\n      Eurydice_array_to_slice_mut_b50(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_a8 private_key = libcrux_ml_kem_types_from_b2_0e(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_70(private_key,\n      libcrux_ml_kem_types_from_51_d9(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_fe(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- T_AS_NTT_ENCODED_SIZE= 1536\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94\nbuild_unpacked_public_key_051(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94\n  unpacked_public_key = default_8b_ee();\n  build_unpacked_public_key_mut_051(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_LEN= 1408\n- C2_LEN= 160\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n- BLOCK_LEN= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d1\nencrypt_d51(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_94\n  unpacked_public_key = build_unpacked_public_key_051(public_key);\n  return encrypt_unpacked_d51(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]]\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_4c(Eurydice_mut_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- PUBLIC_KEY_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_25\nlibcrux_ml_kem_ind_cca_encapsulate_991(\n  Eurydice_arr_d1 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_fe(Eurydice_array_to_slice_mut_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_4a_23(Eurydice_array_to_slice_mut_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_23(Eurydice_array_to_slice_mut_17(&to_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_d1\n  ciphertext =\n    encrypt_d51(Eurydice_array_to_slice_mut_b50(libcrux_ml_kem_types_as_slice_e6_d9(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_d1 uu____2 = libcrux_ml_kem_types_from_19_d9(ciphertext);\n  return (KRML_CLITERAL(tuple_25){ .fst = uu____2, .snd = kdf_39_4c(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic Eurydice_arr_9e call_mut_0b_38(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 4\n- CIPHERTEXT_SIZE= 1568\n- VECTOR_U_ENCODED_SIZE= 1408\n- U_COMPRESSION_FACTOR= 11\n- V_COMPRESSION_FACTOR= 5\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_38(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_d1 *ciphertext)\n{\n  Eurydice_arr_d20 arr_struct;\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_38(&lvalue););\n  Eurydice_arr_d20 secret_key_unpacked = arr_struct;\n  deserialize_vector_ee(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_38(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$4size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 4\n- SECRET_KEY_SIZE= 3168\n- CPA_SECRET_KEY_SIZE= 1536\n- PUBLIC_KEY_SIZE= 1568\n- CIPHERTEXT_SIZE= 1568\n- T_AS_NTT_ENCODED_SIZE= 1536\n- C1_SIZE= 1408\n- C2_SIZE= 160\n- VECTOR_U_COMPRESSION_FACTOR= 11\n- VECTOR_V_COMPRESSION_FACTOR= 5\n- C1_BLOCK_SIZE= 352\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1600\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd1(\n  Eurydice_arr_a8 *private_key,\n  Eurydice_arr_d1 *ciphertext\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e3(Eurydice_array_to_slice_mut_68(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_38(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_23(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_14 to_hash = libcrux_ml_kem_utils_into_padded_array_49(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f6(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_d9(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_f5(Eurydice_array_to_slice_mut_720(&to_hash));\n  Eurydice_arr_d1\n  expected_ciphertext = encrypt_d51(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_mut_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_4c(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_4c(shared_secret0);\n  Eurydice_mut_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_d9(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_mut_b50(&expected_ciphertext),\n      Eurydice_array_to_slice_mut_01(&shared_secret),\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret0));\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_66(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_1e *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_mut_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_9e uu____0 = deserialize_to_reduced_ring_element_ea(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final\nwith const generics\n- K= 2\n*/\nstatic inline Eurydice_arr_e3 shake128_init_absorb_final_af(Eurydice_arr_bf *input)\n{\n  Eurydice_arr_e3 shake128_state;\n  Eurydice_arr_7c repeat_expression[2U];\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_sha3_portable_incremental_shake128_init(););\n  memcpy(shake128_state.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_7c));\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_absorb_final(&shake128_state.data[i0],\n      Eurydice_array_to_slice_mut_e9(&input->data[i0])););\n  return shake128_state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_e3\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_af(Eurydice_arr_bf *input)\n{\n  return shake128_init_absorb_final_af(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 2\n*/\nstatic inline Eurydice_arr_b8 shake128_squeeze_first_three_blocks_af(Eurydice_arr_e3 *st)\n{\n  Eurydice_arr_b8 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(&st->data[i0],\n      Eurydice_array_to_slice_mut_48(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_b8\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_af(\n  Eurydice_arr_e3 *self\n)\n{\n  return shake128_squeeze_first_three_blocks_af(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_53(\n  Eurydice_arr_b8 *randomness,\n  Eurydice_arr_85 *sampled_coefficients,\n  Eurydice_arr_800 *out\n)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_mut_d49(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block\nwith const generics\n- K= 2\n*/\nstatic inline Eurydice_arr_5b0 shake128_squeeze_next_block_af(Eurydice_arr_e3 *st)\n{\n  Eurydice_arr_5b0 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&st->data[i0],\n      Eurydice_array_to_slice_mut_2c(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 2\n*/\nEurydice_arr_5b0\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_af(Eurydice_arr_e3 *self)\n{\n  return shake128_squeeze_next_block_af(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_530(\n  Eurydice_arr_5b0 *randomness,\n  Eurydice_arr_85 *sampled_coefficients,\n  Eurydice_arr_800 *out\n)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_mut_d41(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_9e call_mut_0a_910(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_ea(Eurydice_array_to_subslice_mut_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_1e sample_from_xof_910(Eurydice_arr_bf *seeds)\n{\n  Eurydice_arr_85 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_800 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_e3\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_af(seeds);\n  Eurydice_arr_b8\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_af(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_53(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_5b0\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_af(&xof_state);\n      done = sample_from_uniform_distribution_next_530(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_1e arr_mapped_str;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_910(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_910(Eurydice_arr_df0 *A_transpose, Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_bf seeds;\n    Eurydice_arr_31 repeat_expression[2U];\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_1e sampled = sample_from_xof_910(&seeds);\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_4a\nwith const generics\n- K= 2\n*/\nstatic inline Eurydice_arr_ec H_4a_af(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_e0(\n  Eurydice_arr_03 *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *unpacked_public_key\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_mut_210(public_key, (size_t)768U);\n  deserialize_ring_elements_reduced_66(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_mut_5f1(public_key,\n        (size_t)768U));\n  Eurydice_arr_df0 *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_mut_5f1(public_key,\n        (size_t)768U));\n  sample_matrix_A_910(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_4a_af(Eurydice_array_to_slice_mut_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_66(Eurydice_arr_1e *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_ea(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_53(\n  Eurydice_arr_1e *t_as_ntt,\n  Eurydice_mut_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_03 *serialized\n)\n{\n  serialize_vector_66(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d48(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f1(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_53(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *self,\n  Eurydice_arr_03 *serialized\n)\n{\n  serialize_public_key_mut_53(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_53(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_03 *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_53(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_03\nserialize_public_key_53(Eurydice_arr_1e *t_as_ntt, Eurydice_mut_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_03 public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_53(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_03\nserialized_dd_53(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_df(serialize_public_key_53(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_03\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_53(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self\n)\n{\n  return serialized_dd_53(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PRIVATE_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair512\nserialize_unpacked_secret_key_44(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_1e *private_key\n)\n{\n  Eurydice_arr_03\n  public_key_serialized =\n    serialize_public_key_53(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&public_key->seed_for_A));\n  Eurydice_arr_d2 secret_key_serialized = { .data = { 0U } };\n  serialize_vector_66(private_key, Eurydice_array_to_slice_mut_27(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair512){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SERIALIZED_KEY_LEN= 1632\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_e2(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d414(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d414(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d414(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_4a_af(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d414(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_a3(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self,\n  Eurydice_arr_ab0 *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair512\n  uu____0 =\n    serialize_unpacked_secret_key_44(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_d2 ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_03 ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_e2(Eurydice_array_to_slice_mut_27(&ind_cpa_private_key),\n    Eurydice_array_to_slice_mut_3b(&ind_cpa_public_key),\n    Eurydice_array_to_slice_mut_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n*/\nEurydice_arr_ab0\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_a3(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_ab0 sk = libcrux_ml_kem_types_default_d3_be();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_a3(self, &sk);\n  return sk;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_66(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_1e *secret_as_ntt)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_ea(Eurydice_slice_subslice_mut_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_050(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_66(Eurydice_slice_subslice_to_mut_72(public_key,\n      (size_t)768U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_mut_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_mut_6d(public_key, (size_t)768U);\n  Eurydice_arr_df0 *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_910(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_71(\n  Eurydice_arr_ab0 *private_key,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e0(Eurydice_array_to_slice_mut_99(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_66(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_050(ind_cpa_public_key,\n    &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_mut_6d(ind_cpa_public_key, (size_t)768U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_1e default_70_66(void)\n{\n  Eurydice_arr_1e lit;\n  Eurydice_arr_9e repeat_expression[2U];\n  KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n  memcpy(lit.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_9e));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b default_8b_66(void)\n{\n  Eurydice_arr_1e uu____0;\n  Eurydice_arr_9e repeat_expression0[2U];\n  KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression0[i] = ZERO_d6_ea(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)2U * sizeof (Eurydice_arr_9e));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_1e repeat_expression1[2U];\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    Eurydice_arr_1e lit;\n    Eurydice_arr_9e repeat_expression[2U];\n    KRML_MAYBE_FOR2(i, (size_t)0U, (size_t)2U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n    memcpy(lit.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_9e));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)2U * sizeof (Eurydice_arr_1e));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b\nlibcrux_ml_kem_ind_cca_unpacked_default_30_66(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b){\n        .ind_cpa_public_key = default_8b_66(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nlibcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_66(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_3b\n  uu____0 =\n    { .ind_cpa_private_key = default_70_66(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_66()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_4a\nwith const generics\n- K= 2\n*/\nstatic inline Eurydice_arr_c7 G_4a_af(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_10(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d411(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)2U;\n  return G_4a_af(Eurydice_array_to_slice_mut_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN\nwith const generics\n- K= 2\n- LEN= 192\n*/\nstatic inline Eurydice_arr_eb PRFxN_d5(Eurydice_arr_4d *input)\n{\n  Eurydice_arr_eb out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_d9(&out.data[i0]),\n      Eurydice_array_to_slice_mut_b5(&input->data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a\nwith const generics\n- K= 2\n- LEN= 192\n*/\nstatic inline Eurydice_arr_eb PRFxN_4a_d5(Eurydice_arr_4d *input)\n{\n  return PRFxN_d5(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_binomial_distribution\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- ETA= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\nsample_from_binomial_distribution_68(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  return sample_from_binomial_distribution_3_ea(randomness);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- ETA= 3\n- ETA_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_bf0(\n  Eurydice_arr_1e *re_as_ntt,\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_4d prf_inputs;\n  Eurydice_arr_fa repeat_expression[2U];\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_af(&prf_inputs, domain_separator);\n  Eurydice_arr_eb prf_outputs = PRFxN_4a_d5(&prf_inputs);\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_68(Eurydice_array_to_slice_mut_d9(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_ea(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic Eurydice_arr_9e call_mut_73_390(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_66(Eurydice_arr_9e *myself, Eurydice_arr_9e *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d6\n    uu____0 = libcrux_ml_kem_vector_portable_add_b8(myself->data[i0], &rhs->data[i0]);\n    myself->data[i0] = uu____0;);\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_66(Eurydice_arr_9e *self, Eurydice_arr_9e *rhs)\n{\n  add_to_ring_element_66(self, rhs);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_66(\n  Eurydice_arr_1e *t_as_ntt,\n  Eurydice_arr_df0 *matrix_A,\n  Eurydice_arr_1e *s_as_ntt,\n  Eurydice_arr_1e *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_1e *row = &matrix_A->data[i0];\n    Eurydice_arr_9e uu____0 = ZERO_d6_ea();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR2(i1,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i1;\n      Eurydice_arr_9e *matrix_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_66(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_ea(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_390(\n  Eurydice_mut_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_1e *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_10(key_generation_seed);\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_df0 *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_910(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_bf0(private_key, &prf_input, 0U);\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_390(&lvalue););\n  Eurydice_arr_1e error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_bf0(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_66(&public_key->t_as_ntt, &public_key->A, private_key, &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_9e call_mut_b4_66(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_1e call_mut_22_66(void **_)\n{\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_66(&lvalue););\n  return arr_struct;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_df0 transpose_a_66(Eurydice_arr_df0 ind_cpa_a)\n{\n  Eurydice_arr_df0 arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_66(&lvalue););\n  Eurydice_arr_df0 A = arr_struct;\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e uu____0 = clone_c1_ea(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b80(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *out\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_390(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_df0 A = transpose_a_66(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_03\n  pk_serialized =\n    serialize_public_key_53(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_4a_af(Eurydice_array_to_slice_mut_3b(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_10(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_mut_borrow_slice_u8 pk_hash\n)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_4a_af(Eurydice_array_to_slice_mut_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_1e, libcrux_ml_kem_polynomial_PolynomialRingElement_1d\n\n*/\ntypedef struct tuple_77_s\n{\n  Eurydice_arr_1e fst;\n  Eurydice_arr_9e snd;\n}\ntuple_77;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_f1_870(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_dd_870(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic inline Eurydice_arr_f3 PRFxN_d50(Eurydice_arr_4d *input)\n{\n  Eurydice_arr_f3 out = { .data = { { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&out.data[i0]),\n      Eurydice_array_to_slice_mut_b5(&input->data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic inline Eurydice_arr_f3 PRFxN_4a_d50(Eurydice_arr_4d *input)\n{\n  return PRFxN_d50(input);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_bf0(\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_1e *error_1\n)\n{\n  Eurydice_arr_4d prf_inputs;\n  Eurydice_arr_fa repeat_expression[2U];\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)2U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_af(&prf_inputs, domain_separator);\n  Eurydice_arr_f3 prf_outputs = PRFxN_4a_d50(&prf_inputs);\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_66(Eurydice_array_to_slice_mut_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 2\n- LEN= 128\n*/\nstatic inline Eurydice_arr_89 PRF_4a_d50(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_9e call_mut_a8_66(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_66(Eurydice_arr_9e *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_ea(&zeta_i, re);\n  invert_ntt_at_layer_2_ea(&zeta_i, re);\n  invert_ntt_at_layer_3_ea(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_1e\ncompute_vector_u_66(\n  Eurydice_arr_df0 *a_as_ntt,\n  Eurydice_arr_1e *r_as_ntt,\n  Eurydice_arr_1e *error_1\n)\n{\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_66(&lvalue););\n  Eurydice_arr_1e result = arr_struct;\n  KRML_MAYBE_FOR2(i0,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_1e *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR2(i,\n      (size_t)0U,\n      (size_t)2U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e *a_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_66(&result.data[i1], &product););\n    invert_ntt_montgomery_66(&result.data[i1]);\n    add_error_reduce_d6_ea(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_10\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- OUT_LEN= 320\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b0 compress_then_serialize_10_e1(Eurydice_arr_9e *re)\n{\n  Eurydice_arr_b0 serialized = { .data = { 0U } };\n  for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_d6 coefficient = compress_b8_ef(to_unsigned_field_modulus_ea(re->data[i0]));\n    Eurydice_arr_fc bytes = libcrux_ml_kem_vector_portable_serialize_10_b8(coefficient);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d412(&serialized,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)20U * i0,\n            .end = (size_t)20U * i0 + (size_t)20U\n          }\n        )),\n      Eurydice_array_to_slice_mut_8f(&bytes),\n      uint8_t);\n  }\n  return serialized;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- COMPRESSION_FACTOR= 10\n- OUT_LEN= 320\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_b0\ncompress_then_serialize_ring_element_u_f7(Eurydice_arr_9e *re)\n{\n  return compress_then_serialize_10_e1(re);\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- OUT_LEN= 640\n- COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_a3(Eurydice_arr_1e input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)640U / (size_t)2U),\n            .end = (i0 + (size_t)1U) * ((size_t)640U / (size_t)2U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b0 lvalue = compress_then_serialize_ring_element_u_f7(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_56(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- C1_LEN= 640\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_77\nencrypt_c1_870(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_arr_df0 *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_1e arr_struct0;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_870(&lvalue););\n  Eurydice_arr_1e r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_bf0(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_870(&lvalue););\n  Eurydice_arr_1e error_1 = arr_struct;\n  uint8_t\n  domain_separator = sample_ring_element_cbd_bf0(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_4a_d50(Eurydice_array_to_slice_mut_b5(&prf_input));\n  Eurydice_arr_9e\n  error_2 = sample_from_binomial_distribution_66(Eurydice_array_to_slice_mut_78(&prf_output));\n  Eurydice_arr_1e u = compute_vector_u_66(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_a3(u, ciphertext);\n  return (KRML_CLITERAL(tuple_77){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_ring_element_v_66(\n  Eurydice_arr_1e *t_as_ntt,\n  Eurydice_arr_1e *r_as_ntt,\n  Eurydice_arr_9e *error_2,\n  Eurydice_arr_9e *message\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_66(&result, &product););\n  invert_ntt_montgomery_66(&result);\n  return add_message_error_reduce_d6_ea(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- COMPRESSION_FACTOR= 4\n- OUT_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_44(Eurydice_arr_9e re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_4_ea(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- V_COMPRESSION_FACTOR= 4\n- C2_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_44(\n  Eurydice_arr_1e *t_as_ntt,\n  Eurydice_arr_1e *r_as_ntt,\n  Eurydice_arr_9e *error_2,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_9e message_as_ring_element = deserialize_then_decompress_message_ea(message);\n  Eurydice_arr_9e\n  v = compute_ring_element_v_66(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_44(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_LEN= 640\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d2\nencrypt_unpacked_d50(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_d2 ciphertext = { .data = { 0U } };\n  tuple_77\n  uu____0 =\n    encrypt_c1_870(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d46(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)640U })));\n  Eurydice_arr_1e r_as_ntt = uu____0.fst;\n  Eurydice_arr_9e error_2 = uu____0.snd;\n  encrypt_c2_44(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f(&ciphertext, (size_t)640U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a70(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_3b *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_10(Eurydice_array_to_slice_mut_01(randomness),\n      Eurydice_array_to_slice_mut_01(&public_key->public_key_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_d2\n  ciphertext =\n    encrypt_unpacked_d50(&public_key->ind_cpa_public_key,\n      randomness,\n      pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_ab){\n        .fst = libcrux_ml_kem_types_from_19_80(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic Eurydice_arr_9e call_mut_35_44(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_ring_element_u_f7(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_10_ea(serialized);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- VECTOR_U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE void ntt_vector_u_f7(Eurydice_arr_9e *re)\n{\n  size_t zeta_i = (size_t)0U;\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  ntt_at_layer_3_ea(&zeta_i, re);\n  ntt_at_layer_2_ea(&zeta_i, re);\n  ntt_at_layer_1_ea(&zeta_i, re);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_1e\ndeserialize_then_decompress_u_44(Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_44(&lvalue););\n  Eurydice_arr_1e u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)768U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_mut_d46(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_f7(u_bytes);\n    ntt_vector_u_f7(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_ring_element_v_53(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_4_ea(serialized);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_message_66(\n  Eurydice_arr_9e *v,\n  Eurydice_arr_1e *secret_as_ntt,\n  Eurydice_arr_1e *u_as_ntt\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_66(&result, &product););\n  invert_ntt_montgomery_66(&result);\n  return subtract_reduce_d6_ea(v, result);\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_71(Eurydice_arr_1e *secret_key, Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_1e u_as_ntt = deserialize_then_decompress_u_44(ciphertext);\n  Eurydice_arr_9e\n  v =\n    deserialize_then_decompress_ring_element_v_53(Eurydice_array_to_subslice_from_mut_5f(ciphertext,\n        (size_t)640U));\n  Eurydice_arr_9e message = compute_message_66(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_ea(message);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 2\n- LEN= 32\n*/\nstatic inline Eurydice_arr_ec PRF_4a_d5(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c0(\n  libcrux_ml_kem_mlkem512_portable_unpacked_MlKem512KeyPairUnpacked *key_pair,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_71(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_af(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_03\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_df(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f1(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_80(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_d5(Eurydice_array_to_slice_mut_3b(&to_hash));\n  Eurydice_arr_d2\n  expected_ciphertext =\n    encrypt_unpacked_d50(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_mut_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_80(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_mut_27(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic Eurydice_arr_9e call_mut_0b_66(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_1e\ndeserialize_ring_elements_reduced_out_66(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_66(&lvalue););\n  Eurydice_arr_1e deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_66(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- PUBLIC_KEY_SIZE= 800\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_53(Eurydice_arr_03 *public_key)\n{\n  Eurydice_arr_1e\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_66(Eurydice_array_to_subslice_to_mut_210(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)));\n  Eurydice_arr_03\n  public_key_serialized =\n    serialize_public_key_53(&deserialized_pk,\n      Eurydice_array_to_subslice_from_mut_5f1(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)2U)));\n  return Eurydice_array_eq((size_t)800U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_e2(Eurydice_arr_ab0 *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_4a_af(Eurydice_array_to_subslice_mut_d414(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)2U,\n            .end = (size_t)768U * (size_t)2U + (size_t)32U\n          }\n        )));\n  Eurydice_mut_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_mut_d414(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)2U + (size_t)32U,\n          .end = (size_t)768U * (size_t)2U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_mut((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CIPHERTEXT_SIZE= 768\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_d5(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_e2(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- PRIVATE_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair512\ngenerate_keypair_300(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_1e private_key = default_70_66();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b public_key = default_8b_66();\n  generate_keypair_unpacked_390(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_44(&public_key, &private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- SERIALIZED_KEY_LEN= 1632\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ab0\nserialize_kem_secret_key_e2(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_ab0 out = { .data = { 0U } };\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_e2(private_key,\n    public_key,\n    implicit_rejection_value,\n    &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CPA_PRIVATE_KEY_SIZE= 768\n- PRIVATE_KEY_SIZE= 1632\n- PUBLIC_KEY_SIZE= 800\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n*/\nlibcrux_ml_kem_types_MlKemKeyPair_0d\nlibcrux_ml_kem_ind_cca_generate_keypair_b80(Eurydice_arr_c7 *randomness)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair512\n  uu____0 = generate_keypair_300(ind_cpa_keypair_randomness);\n  Eurydice_arr_d2 ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_03 public_key = uu____0.snd;\n  Eurydice_arr_ab0\n  secret_key_serialized =\n    serialize_kem_secret_key_e2(Eurydice_array_to_slice_mut_27(&ind_cpa_private_key),\n      Eurydice_array_to_slice_mut_3b(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_ab0 private_key = libcrux_ml_kem_types_from_b2_be(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_d6(private_key,\n      libcrux_ml_kem_types_from_51_df(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_10(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- T_AS_NTT_ENCODED_SIZE= 768\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b\nbuild_unpacked_public_key_050(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b\n  unpacked_public_key = default_8b_66();\n  build_unpacked_public_key_mut_050(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_LEN= 640\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_d2\nencrypt_d50(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_3b\n  unpacked_public_key = build_unpacked_public_key_050(public_key);\n  return encrypt_unpacked_d50(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]]\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_e2(Eurydice_mut_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_ab\nlibcrux_ml_kem_ind_cca_encapsulate_990(\n  Eurydice_arr_03 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_10(Eurydice_array_to_slice_mut_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_4a_af(Eurydice_array_to_slice_mut_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_af(Eurydice_array_to_slice_mut_17(&to_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_d2\n  ciphertext =\n    encrypt_d50(Eurydice_array_to_slice_mut_3b(libcrux_ml_kem_types_as_slice_e6_df(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_d2 uu____2 = libcrux_ml_kem_types_from_19_80(ciphertext);\n  return (KRML_CLITERAL(tuple_ab){ .fst = uu____2, .snd = kdf_39_e2(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic Eurydice_arr_9e call_mut_0b_71(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 2\n- CIPHERTEXT_SIZE= 768\n- VECTOR_U_ENCODED_SIZE= 640\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_71(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_d2 *ciphertext)\n{\n  Eurydice_arr_1e arr_struct;\n  KRML_MAYBE_FOR2(i,\n    (size_t)0U,\n    (size_t)2U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_71(&lvalue););\n  Eurydice_arr_1e secret_key_unpacked = arr_struct;\n  deserialize_vector_66(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_71(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$2size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 2\n- SECRET_KEY_SIZE= 1632\n- CPA_SECRET_KEY_SIZE= 768\n- PUBLIC_KEY_SIZE= 800\n- CIPHERTEXT_SIZE= 768\n- T_AS_NTT_ENCODED_SIZE= 768\n- C1_SIZE= 640\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 3\n- ETA1_RANDOMNESS_SIZE= 192\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 800\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd0(\n  Eurydice_arr_ab0 *private_key,\n  Eurydice_arr_d2 *ciphertext\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_e0(Eurydice_array_to_slice_mut_99(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_71(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_af(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_03 to_hash = libcrux_ml_kem_utils_into_padded_array_df(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f1(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_80(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_d5(Eurydice_array_to_slice_mut_3b(&to_hash));\n  Eurydice_arr_d2\n  expected_ciphertext = encrypt_d50(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_mut_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_e2(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_e2(shared_secret0);\n  Eurydice_mut_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_80(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_mut_27(&expected_ciphertext),\n      Eurydice_array_to_slice_mut_01(&shared_secret),\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret0));\n}\n\n/**\n See [deserialize_ring_elements_reduced_out].\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_ring_elements_reduced_68(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_bb *deserialized_pk\n)\n{\n  for\n  (size_t\n    i = (size_t)0U;\n    i < public_key.meta / LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    ring_element =\n      Eurydice_slice_subslice_mut_c8(public_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +\n              LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    Eurydice_arr_9e uu____0 = deserialize_to_reduced_ring_element_ea(ring_element);\n    deserialized_pk->data[i0] = uu____0;\n  }\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final\nwith const generics\n- K= 3\n*/\nstatic inline Eurydice_arr_1b shake128_init_absorb_final_78(Eurydice_arr_81 *input)\n{\n  Eurydice_arr_1b shake128_state;\n  Eurydice_arr_7c repeat_expression[3U];\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    repeat_expression[i] = libcrux_sha3_portable_incremental_shake128_init(););\n  memcpy(shake128_state.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_7c));\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_absorb_final(&shake128_state.data[i0],\n      Eurydice_array_to_slice_mut_e9(&input->data[i0])););\n  return shake128_state;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_final_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_1b\nlibcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_78(Eurydice_arr_81 *input)\n{\n  return shake128_init_absorb_final_78(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks\nwith const generics\n- K= 3\n*/\nstatic inline Eurydice_arr_7e shake128_squeeze_first_three_blocks_78(Eurydice_arr_1b *st)\n{\n  Eurydice_arr_7e\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(&st->data[i0],\n      Eurydice_array_to_slice_mut_48(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_first_three_blocks_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_7e\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_78(\n  Eurydice_arr_1b *self\n)\n{\n  return shake128_squeeze_first_three_blocks_78(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- N= 504\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_b6(\n  Eurydice_arr_7e *randomness,\n  Eurydice_arr_eb0 *sampled_coefficients,\n  Eurydice_arr_b1 *out\n)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_mut_d49(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block\nwith const generics\n- K= 3\n*/\nstatic inline Eurydice_arr_2c shake128_squeeze_next_block_78(Eurydice_arr_1b *st)\n{\n  Eurydice_arr_2c\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_incremental_shake128_squeeze_next_block(&st->data[i0],\n      Eurydice_array_to_slice_mut_2c(&out.data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.shake128_squeeze_next_block_4a\nwith const generics\n- K= 3\n*/\nEurydice_arr_2c\nlibcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_78(Eurydice_arr_1b *self)\n{\n  return shake128_squeeze_next_block_78(self);\n}\n\n/**\n If `bytes` contains a set of uniformly random bytes, this function\n uniformly samples a ring element `â` that is treated as being the NTT representation\n of the corresponding polynomial `a`.\n\n Since rejection sampling is used, it is possible the supplied bytes are\n not enough to sample the element, in which case an `Err` is returned and the\n caller must try again with a fresh set of bytes.\n\n This function <strong>partially</strong> implements <strong>Algorithm 6</strong> of the NIST FIPS 203 standard,\n We say \"partially\" because this implementation only accepts a finite set of\n bytes as input and returns an error if the set is not enough; Algorithm 6 of\n the FIPS 203 standard on the other hand samples from an infinite stream of bytes\n until the ring element is filled. Algorithm 6 is reproduced below:\n\n ```plaintext\n Input: byte stream B ∈ 𝔹*.\n Output: array â ∈ ℤ₂₅₆.\n\n i ← 0\n j ← 0\n while j < 256 do\n     d₁ ← B[i] + 256·(B[i+1] mod 16)\n     d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]\n     if d₁ < q then\n         â[j] ← d₁\n         j ← j + 1\n     end if\n     if d₂ < q and j < 256 then\n         â[j] ← d₂\n         j ← j + 1\n     end if\n     i ← i + 3\n end while\n return â\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_uniform_distribution_next\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- N= 168\n*/\nstatic KRML_MUSTINLINE bool\nsample_from_uniform_distribution_next_b60(\n  Eurydice_arr_2c *randomness,\n  Eurydice_arr_eb0 *sampled_coefficients,\n  Eurydice_arr_b1 *out\n)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++)\n    {\n      size_t r = i;\n      if (sampled_coefficients->data[i1] < LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n      {\n        size_t\n        sampled =\n          libcrux_ml_kem_vector_portable_rej_sample_b8(Eurydice_array_to_subslice_mut_d41(&randomness->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = r * (size_t)24U,\n                  .end = r * (size_t)24U + (size_t)24U\n                }\n              )),\n            Eurydice_array_to_subslice_mut_e70(&out->data[i1],\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = sampled_coefficients->data[i1],\n                  .end = sampled_coefficients->data[i1] + (size_t)16U\n                }\n              )));\n        size_t uu____0 = i1;\n        sampled_coefficients->data[uu____0] += sampled;\n      }\n    });\n  bool done = true;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    if (sampled_coefficients->data[i0] >= LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT)\n    {\n      sampled_coefficients->data[i0] = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;\n    }\n    else\n    {\n      done = false;\n    });\n  return done;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<([i16; 272usize]), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::sampling::sample_from_xof::closure<Vector, Hasher, K>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.call_mut_0a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_9e call_mut_0a_91(Eurydice_arr_5b tupled_args)\n{\n  Eurydice_arr_5b s = tupled_args;\n  return\n    from_i16_array_d6_ea(Eurydice_array_to_subslice_mut_e70(&s,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)256U })));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_bb sample_from_xof_91(Eurydice_arr_81 *seeds)\n{\n  Eurydice_arr_eb0 sampled_coefficients = { .data = { 0U } };\n  Eurydice_arr_b1\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_arr_1b\n  xof_state = libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_final_4a_78(seeds);\n  Eurydice_arr_7e\n  randomness0 =\n    libcrux_ml_kem_hash_functions_portable_shake128_squeeze_first_three_blocks_4a_78(&xof_state);\n  bool\n  done = sample_from_uniform_distribution_next_b6(&randomness0, &sampled_coefficients, &out);\n  while (true)\n  {\n    if (done)\n    {\n      break;\n    }\n    else\n    {\n      Eurydice_arr_2c\n      randomness =\n        libcrux_ml_kem_hash_functions_portable_shake128_squeeze_next_block_4a_78(&xof_state);\n      done = sample_from_uniform_distribution_next_b60(&randomness, &sampled_coefficients, &out);\n    }\n  }\n  Eurydice_arr_bb arr_mapped_str;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    arr_mapped_str.data[i] = call_mut_0a_91(out.data[i]););\n  return arr_mapped_str;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nsample_matrix_A_91(Eurydice_arr_1d *A_transpose, Eurydice_arr_31 *seed, bool transpose)\n{\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_81 seeds;\n    Eurydice_arr_31 repeat_expression[3U];\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      repeat_expression[i] =\n        core_array__core__clone__Clone_for__T__N___clone((size_t)34U,\n          seed,\n          uint8_t,\n          Eurydice_arr_31););\n    memcpy(seeds.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_31));\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      seeds.data[j].data[32U] = (uint8_t)i1;\n      seeds.data[j].data[33U] = (uint8_t)j;);\n    Eurydice_arr_bb sampled = sample_from_xof_91(&seeds);\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e sample = sampled.data[j];\n      if (transpose)\n      {\n        A_transpose->data[j].data[i1] = sample;\n      }\n      else\n      {\n        A_transpose->data[i1].data[j] = sample;\n      }););\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_4a\nwith const generics\n- K= 3\n*/\nstatic inline Eurydice_arr_ec H_4a_78(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_H(input);\n}\n\n/**\n Generate an unpacked key from a serialized key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.unpack_public_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_unpack_public_key_22(\n  Eurydice_arr_5f *public_key,\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *unpacked_public_key\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  uu____0 = Eurydice_array_to_subslice_to_mut_211(public_key, (size_t)1152U);\n  deserialize_ring_elements_reduced_68(uu____0,\n    &unpacked_public_key->ind_cpa_public_key.t_as_ntt);\n  unpacked_public_key->ind_cpa_public_key.seed_for_A =\n    libcrux_ml_kem_utils_into_padded_array_ce(Eurydice_array_to_subslice_from_mut_5f4(public_key,\n        (size_t)1152U));\n  Eurydice_arr_1d *uu____2 = &unpacked_public_key->ind_cpa_public_key.A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31\n  lvalue =\n    libcrux_ml_kem_utils_into_padded_array_de(Eurydice_array_to_subslice_from_mut_5f4(public_key,\n        (size_t)1152U));\n  sample_matrix_A_91(uu____2, &lvalue, false);\n  Eurydice_arr_ec\n  uu____3 =\n    H_4a_78(Eurydice_array_to_slice_mut_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)));\n  unpacked_public_key->public_key_hash = uu____3;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\n*libcrux_ml_kem_ind_cca_unpacked_public_key_11_68(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  return &self->public_key;\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.clone_91\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic inline libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51\nclone_91_68(libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *self)\n{\n  Eurydice_arr_bb\n  uu____0 =\n    core_array__core__clone__Clone_for__T__N___clone((size_t)3U,\n      &self->t_as_ntt,\n      Eurydice_arr_9e,\n      Eurydice_arr_bb);\n  Eurydice_arr_ec\n  uu____1 =\n    core_array__core__clone__Clone_for__T__N___clone((size_t)32U,\n      &self->seed_for_A,\n      uint8_t,\n      Eurydice_arr_ec);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51){\n        .t_as_ntt = uu____0,\n        .seed_for_A = uu____1,\n        .A = core_array__core__clone__Clone_for__T__N___clone((size_t)3U,\n          &self->A,\n          Eurydice_arr_bb,\n          Eurydice_arr_1d)\n      }\n    );\n}\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@2]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.clone_d7\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_ind_cca_unpacked_clone_d7_68(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51\n  uu____0 = clone_91_68(&self->ind_cpa_public_key);\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51){\n        .ind_cpa_public_key = uu____0,\n        .public_key_hash = core_array__core__clone__Clone_for__T__N___clone((size_t)32U,\n          &self->public_key_hash,\n          uint8_t,\n          Eurydice_arr_ec)\n      }\n    );\n}\n\n/**\n Call [`serialize_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nserialize_vector_68(Eurydice_arr_bb *key, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = key->data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n            .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b20 lvalue = serialize_uncompressed_ring_element_ea(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_a9(&lvalue), uint8_t););\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE void\nserialize_public_key_mut_b6(\n  Eurydice_arr_bb *t_as_ntt,\n  Eurydice_mut_borrow_slice_u8 seed_for_a,\n  Eurydice_arr_5f *serialized\n)\n{\n  serialize_vector_68(t_as_ntt,\n    Eurydice_array_to_subslice_mut_d417(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)\n        }\n      )));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f4(serialized,\n      libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)),\n    seed_for_a,\n    uint8_t);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self,\n  Eurydice_arr_5f *serialized\n)\n{\n  serialize_public_key_mut_b6(&self->ind_cpa_public_key.t_as_ntt,\n    Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A),\n    serialized);\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_mut_11_b6(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_5f *serialized\n)\n{\n  libcrux_ml_kem_ind_cca_unpacked_serialized_mut_dd_b6(&self->public_key, serialized);\n}\n\n/**\n Concatenate `t` and `ρ` into the public key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5f\nserialize_public_key_b6(Eurydice_arr_bb *t_as_ntt, Eurydice_mut_borrow_slice_u8 seed_for_a)\n{\n  Eurydice_arr_5f public_key_serialized = { .data = { 0U } };\n  serialize_public_key_mut_b6(t_as_ntt, seed_for_a, &public_key_serialized);\n  return public_key_serialized;\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_5f\nserialized_dd_b6(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *self)\n{\n  return\n    libcrux_ml_kem_types_from_51_3d(serialize_public_key_b6(&self->ind_cpa_public_key.t_as_ntt,\n        Eurydice_array_to_slice_mut_01(&self->ind_cpa_public_key.seed_for_A)));\n}\n\n/**\n Get the serialized public key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_public_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_5f\nlibcrux_ml_kem_ind_cca_unpacked_serialized_public_key_11_b6(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  return serialized_dd_b6(&self->public_key);\n}\n\n/**\n Serialize the secret key from the unpacked key pair generation.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_unpacked_secret_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PRIVATE_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n*/\nstatic libcrux_ml_kem_utils_extraction_helper_Keypair768\nserialize_unpacked_secret_key_30(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_bb *private_key\n)\n{\n  Eurydice_arr_5f\n  public_key_serialized =\n    serialize_public_key_b6(&public_key->t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&public_key->seed_for_A));\n  Eurydice_arr_0e secret_key_serialized = { .data = { 0U } };\n  serialize_vector_68(private_key, Eurydice_array_to_slice_mut_f4(&secret_key_serialized));\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_utils_extraction_helper_Keypair768){\n        .fst = secret_key_serialized,\n        .snd = public_key_serialized\n      }\n    );\n}\n\n/**\n Serialize the secret key.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key_mut\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SERIALIZED_KEY_LEN= 2400\n*/\nvoid\nlibcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value,\n  Eurydice_arr_7d *serialized\n)\n{\n  size_t pointer = (size_t)0U;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d418(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + private_key.meta\n        }\n      )),\n    private_key,\n    uint8_t);\n  pointer += private_key.meta;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d418(serialized,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = pointer, .end = pointer + public_key.meta })),\n    public_key,\n    uint8_t);\n  pointer += public_key.meta;\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_mut_d418(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE\n        }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec lvalue = H_4a_78(public_key);\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  pointer += LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d418(serialized,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = pointer,\n          .end = pointer + implicit_rejection_value.meta\n        }\n      )),\n    implicit_rejection_value,\n    uint8_t);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_mut_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self,\n  Eurydice_arr_7d *serialized\n)\n{\n  libcrux_ml_kem_utils_extraction_helper_Keypair768\n  uu____0 =\n    serialize_unpacked_secret_key_30(&self->public_key.ind_cpa_public_key,\n      &self->private_key.ind_cpa_private_key);\n  Eurydice_arr_0e ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_5f ind_cpa_public_key = uu____0.snd;\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(Eurydice_array_to_slice_mut_f4(&ind_cpa_private_key),\n    Eurydice_array_to_slice_mut_ff(&ind_cpa_public_key),\n    Eurydice_array_to_slice_mut_01(&self->private_key.implicit_rejection_value),\n    serialized);\n}\n\n/**\n Get the serialized private key.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.serialized_private_key_11\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n*/\nEurydice_arr_7d\nlibcrux_ml_kem_ind_cca_unpacked_serialized_private_key_11_21(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *self\n)\n{\n  Eurydice_arr_7d sk = libcrux_ml_kem_types_default_d3_79();\n  libcrux_ml_kem_ind_cca_unpacked_serialized_private_key_mut_11_21(self, &sk);\n  return sk;\n}\n\n/**\n Call [`deserialize_to_uncompressed_ring_element`] for each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_vector\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ndeserialize_vector_68(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_bb *secret_as_ntt)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      deserialize_to_uncompressed_ring_element_ea(Eurydice_slice_subslice_mut_c8(secret_key,\n          (\n            KRML_CLITERAL(core_ops_range_Range_87){\n              .start = i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,\n              .end = (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT\n            }\n          )));\n    secret_as_ntt->data[i0] = uu____0;);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key_mut\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE void\nbuild_unpacked_public_key_mut_05(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *unpacked_public_key\n)\n{\n  deserialize_ring_elements_reduced_68(Eurydice_slice_subslice_to_mut_72(public_key,\n      (size_t)1152U),\n    &unpacked_public_key->t_as_ntt);\n  Eurydice_mut_borrow_slice_u8\n  seed = Eurydice_slice_subslice_from_mut_6d(public_key, (size_t)1152U);\n  Eurydice_arr_1d *uu____0 = &unpacked_public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue = libcrux_ml_kem_utils_into_padded_array_de(seed);\n  sample_matrix_A_91(uu____0, &lvalue, false);\n}\n\n/**\n Take a serialized private key and generate an unpacked key pair from it.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.keys_from_private_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_keys_from_private_key_01(\n  Eurydice_arr_7d *private_key,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_64(Eurydice_array_to_slice_mut_51(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  deserialize_vector_68(ind_cpa_secret_key, &key_pair->private_key.ind_cpa_private_key);\n  build_unpacked_public_key_mut_05(ind_cpa_public_key, &key_pair->public_key.ind_cpa_public_key);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value),\n    implicit_rejection_value,\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&key_pair->public_key.ind_cpa_public_key.seed_for_A),\n    Eurydice_slice_subslice_from_mut_6d(ind_cpa_public_key, (size_t)1152U),\n    uint8_t);\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPrivateKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_70\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_bb default_70_68(void)\n{\n  Eurydice_arr_bb lit;\n  Eurydice_arr_9e repeat_expression[3U];\n  KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n  memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_9e));\n  return lit;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cpa::unpacked::IndCpaPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.unpacked.default_8b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 default_8b_68(void)\n{\n  Eurydice_arr_bb uu____0;\n  Eurydice_arr_9e repeat_expression0[3U];\n  KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression0[i] = ZERO_d6_ea(););\n  memcpy(uu____0.data, repeat_expression0, (size_t)3U * sizeof (Eurydice_arr_9e));\n  Eurydice_arr_ec uu____1 = { .data = { 0U } };\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 lit0;\n  lit0.t_as_ntt = uu____0;\n  lit0.seed_for_A = uu____1;\n  Eurydice_arr_bb repeat_expression1[3U];\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    Eurydice_arr_bb lit;\n    Eurydice_arr_9e repeat_expression[3U];\n    KRML_MAYBE_FOR3(i, (size_t)0U, (size_t)3U, (size_t)1U, repeat_expression[i] = ZERO_d6_ea(););\n    memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_9e));\n    repeat_expression1[i0] = lit;);\n  memcpy(lit0.A.data, repeat_expression1, (size_t)3U * sizeof (Eurydice_arr_bb));\n  return lit0;\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemPublicKeyUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_30\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51\nlibcrux_ml_kem_ind_cca_unpacked_default_30_68(void)\n{\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51){\n        .ind_cpa_public_key = default_8b_68(),\n        .public_key_hash = { .data = { 0U } }\n      }\n    );\n}\n\n/**\nThis function found in impl {core::default::Default for libcrux_ml_kem::ind_cca::unpacked::MlKemKeyPairUnpacked<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.default_7b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nlibcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked\nlibcrux_ml_kem_ind_cca_unpacked_default_7b_68(void)\n{\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPrivateKeyUnpacked_51\n  uu____0 =\n    { .ind_cpa_private_key = default_70_68(), .implicit_rejection_value = { .data = { 0U } } };\n  return\n    (\n      KRML_CLITERAL(libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked){\n        .private_key = uu____0,\n        .public_key = libcrux_ml_kem_ind_cca_unpacked_default_30_68()\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_4a\nwith const generics\n- K= 3\n*/\nstatic inline Eurydice_arr_c7 G_4a_78(Eurydice_mut_borrow_slice_u8 input)\n{\n  return libcrux_ml_kem_hash_functions_portable_G(input);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c7\ncpa_keygen_seed_39_13(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_fa seed = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d411(&seed,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      )),\n    key_generation_seed,\n    uint8_t);\n  seed.data[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] = (uint8_t)(size_t)3U;\n  return G_4a_78(Eurydice_array_to_slice_mut_b5(&seed));\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic inline Eurydice_arr_58 PRFxN_3b(Eurydice_arr_801 *input)\n{\n  Eurydice_arr_58\n  out = { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    libcrux_sha3_portable_shake256(Eurydice_array_to_slice_mut_78(&out.data[i0]),\n      Eurydice_array_to_slice_mut_b5(&input->data[i0])););\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_4a\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic inline Eurydice_arr_58 PRFxN_4a_3b(Eurydice_arr_801 *input)\n{\n  return PRFxN_3b(input);\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution and\n convert them into their NTT representations.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- ETA= 2\n- ETA_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_vector_cbd_then_ntt_bf(\n  Eurydice_arr_bb *re_as_ntt,\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator\n)\n{\n  Eurydice_arr_801 prf_inputs;\n  Eurydice_arr_fa repeat_expression[3U];\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_78(&prf_inputs, domain_separator);\n  Eurydice_arr_58 prf_outputs = PRFxN_4a_3b(&prf_inputs);\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_66(Eurydice_array_to_slice_mut_78(&prf_outputs.data[i0]));\n    re_as_ntt->data[i0] = uu____0;\n    ntt_binomially_sampled_ring_element_ea(&re_as_ntt->data[i0]););\n  return domain_separator;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@3]> for libcrux_ml_kem::ind_cpa::generate_keypair_unpacked::closure<Vector, Hasher, Scheme, K, ETA1, ETA1_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3, TraitClause@4, TraitClause@5]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked.call_mut_73\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_73_39(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_68(Eurydice_arr_9e *myself, Eurydice_arr_9e *rhs)\n{\n  KRML_MAYBE_FOR16(i,\n    (size_t)0U,\n    (size_t)16U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_d6\n    uu____0 = libcrux_ml_kem_vector_portable_add_b8(myself->data[i0], &rhs->data[i0]);\n    myself->data[i0] = uu____0;);\n}\n\n/**\n Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise\n sum of their constituent coefficients.\n*/\n/**\nThis function found in impl {libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_d6\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\nadd_to_ring_element_d6_68(Eurydice_arr_9e *self, Eurydice_arr_9e *rhs)\n{\n  add_to_ring_element_68(self, rhs);\n}\n\n/**\n Compute Â ◦ ŝ + ê\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void\ncompute_As_plus_e_68(\n  Eurydice_arr_bb *t_as_ntt,\n  Eurydice_arr_1d *matrix_A,\n  Eurydice_arr_bb *s_as_ntt,\n  Eurydice_arr_bb *error_as_ntt\n)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_bb *row = &matrix_A->data[i0];\n    Eurydice_arr_9e uu____0 = ZERO_d6_ea();\n    t_as_ntt->data[i0] = uu____0;\n    KRML_MAYBE_FOR3(i1,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i1;\n      Eurydice_arr_9e *matrix_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(matrix_element, &s_as_ntt->data[j]);\n      add_to_ring_element_d6_68(&t_as_ntt->data[i0], &product););\n    add_standard_error_reduce_d6_ea(&t_as_ntt->data[i0], &error_as_ntt->data[i0]););\n}\n\n/**\n This function implements most of <strong>Algorithm 12</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE key generation algorithm.\n\n We say \"most of\" since Algorithm 12 samples the required randomness within\n the function itself, whereas this implementation expects it to be provided\n through the `key_generation_seed` parameter.\n\n Algorithm 12 is reproduced below:\n\n ```plaintext\n Output: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Output: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n\n d ←$ B\n (ρ,σ) ← G(d)\n N ← 0\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     s[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(σ,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(σ,N))\n     N ← N + 1\n end for\n ŝ ← NTT(s)\n ê ← NTT(e)\n t̂ ← Â◦ŝ + ê\n ekₚₖₑ ← ByteEncode₁₂(t̂) ‖ ρ\n dkₚₖₑ ← ByteEncode₁₂(ŝ)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE void\ngenerate_keypair_unpacked_39(\n  Eurydice_mut_borrow_slice_u8 key_generation_seed,\n  Eurydice_arr_bb *private_key,\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *public_key\n)\n{\n  Eurydice_arr_c7 hashed = cpa_keygen_seed_39_13(key_generation_seed);\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      (size_t)32U,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 seed_for_A = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 seed_for_secret_and_error = uu____0.snd;\n  Eurydice_arr_1d *uu____1 = &public_key->A;\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_31 lvalue0 = libcrux_ml_kem_utils_into_padded_array_de(seed_for_A);\n  sample_matrix_A_91(uu____1, &lvalue0, true);\n  Eurydice_arr_fa\n  prf_input = libcrux_ml_kem_utils_into_padded_array_29(seed_for_secret_and_error);\n  uint8_t domain_separator = sample_vector_cbd_then_ntt_bf(private_key, &prf_input, 0U);\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_73_39(&lvalue););\n  Eurydice_arr_bb error_as_ntt = arr_struct;\n  sample_vector_cbd_then_ntt_bf(&error_as_ntt, &prf_input, domain_separator);\n  compute_As_plus_e_68(&public_key->t_as_ntt, &public_key->A, private_key, &error_as_ntt);\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, seed_for_A.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____2 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  public_key->seed_for_A = uu____2;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.closure.call_mut_b4\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_9e call_mut_b4_68(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), [libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]; K]> for libcrux_ml_kem::ind_cca::unpacked::transpose_a::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a.call_mut_22\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_bb call_mut_22_68(void **_)\n{\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_b4_68(&lvalue););\n  return arr_struct;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.transpose_a\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_1d transpose_a_68(Eurydice_arr_1d ind_cpa_a)\n{\n  Eurydice_arr_1d arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_22_68(&lvalue););\n  Eurydice_arr_1d A = arr_struct;\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e uu____0 = clone_c1_ea(&ind_cpa_a.data[j].data[i1]);\n      A.data[i1].data[j] = uu____0;););\n  return A;\n}\n\n/**\n Generate Unpacked Keys\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nvoid\nlibcrux_ml_kem_ind_cca_unpacked_generate_keypair_b8(\n  Eurydice_arr_c7 randomness,\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *out\n)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(&randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(&randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  generate_keypair_unpacked_39(ind_cpa_keypair_randomness,\n    &out->private_key.ind_cpa_private_key,\n    &out->public_key.ind_cpa_public_key);\n  Eurydice_arr_1d A = transpose_a_68(out->public_key.ind_cpa_public_key.A);\n  out->public_key.ind_cpa_public_key.A = A;\n  Eurydice_arr_5f\n  pk_serialized =\n    serialize_public_key_b6(&out->public_key.ind_cpa_public_key.t_as_ntt,\n      Eurydice_array_to_slice_mut_01(&out->public_key.ind_cpa_public_key.seed_for_A));\n  Eurydice_arr_ec uu____0 = H_4a_78(Eurydice_array_to_slice_mut_ff(&pk_serialized));\n  out->public_key.public_key_hash = uu____0;\n  Eurydice_arr_ec arr;\n  memcpy(arr.data, implicit_rejection_value.ptr, (size_t)32U * sizeof (uint8_t));\n  Eurydice_arr_ec\n  uu____1 =\n    core_result_unwrap_26_39((\n        KRML_CLITERAL(core_result_Result_07){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  out->private_key.implicit_rejection_value = uu____1;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encaps_prepare\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_c7\nencaps_prepare_13(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_mut_borrow_slice_u8 pk_hash\n)\n{\n  Eurydice_arr_c7 to_hash = libcrux_ml_kem_utils_into_padded_array_c9(randomness);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE),\n    pk_hash,\n    uint8_t);\n  return G_4a_78(Eurydice_array_to_slice_mut_17(&to_hash));\n}\n\n/**\nA monomorphic instance of n-tuple\nwith types Eurydice_arr_bb, libcrux_ml_kem_polynomial_PolynomialRingElement_1d\n\n*/\ntypedef struct tuple_5b_s\n{\n  Eurydice_arr_bb fst;\n  Eurydice_arr_9e snd;\n}\ntuple_5b;\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_f1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_f1_87(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@2]> for libcrux_ml_kem::ind_cpa::encrypt_c1::closure#1<Vector, Hasher, K, C1_LEN, U_COMPRESSION_FACTOR, BLOCK_LEN, ETA1, ETA1_RANDOMNESS_SIZE, ETA2, ETA2_RANDOMNESS_SIZE>[TraitClause@0, TraitClause@1, TraitClause@2, TraitClause@3]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1.call_mut_dd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic Eurydice_arr_9e call_mut_dd_87(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Sample a vector of ring elements from a centered binomial distribution.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- ETA2_RANDOMNESS_SIZE= 128\n- ETA2= 2\n*/\nstatic KRML_MUSTINLINE uint8_t\nsample_ring_element_cbd_bf(\n  Eurydice_arr_fa *prf_input,\n  uint8_t domain_separator,\n  Eurydice_arr_bb *error_1\n)\n{\n  Eurydice_arr_801 prf_inputs;\n  Eurydice_arr_fa repeat_expression[3U];\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    repeat_expression[i] =\n      core_array__core__clone__Clone_for__T__N___clone((size_t)33U,\n        prf_input,\n        uint8_t,\n        Eurydice_arr_fa););\n  memcpy(prf_inputs.data, repeat_expression, (size_t)3U * sizeof (Eurydice_arr_fa));\n  domain_separator = libcrux_ml_kem_utils_prf_input_inc_78(&prf_inputs, domain_separator);\n  Eurydice_arr_58 prf_outputs = PRFxN_4a_3b(&prf_inputs);\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e\n    uu____0 =\n      sample_from_binomial_distribution_66(Eurydice_array_to_slice_mut_78(&prf_outputs.data[i0]));\n    error_1->data[i0] = uu____0;);\n  return domain_separator;\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 3\n- LEN= 128\n*/\nstatic inline Eurydice_arr_89 PRF_4a_3b0(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ec(input);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::matrix::compute_vector_u::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.call_mut_a8\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_9e call_mut_a8_68(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE void invert_ntt_montgomery_68(Eurydice_arr_9e *re)\n{\n  size_t zeta_i = LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;\n  invert_ntt_at_layer_1_ea(&zeta_i, re);\n  invert_ntt_at_layer_2_ea(&zeta_i, re);\n  invert_ntt_at_layer_3_ea(&zeta_i, re);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)4U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)5U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)6U);\n  invert_ntt_at_layer_4_plus_ea(&zeta_i, re, (size_t)7U);\n  poly_barrett_reduce_d6_ea(re);\n}\n\n/**\n Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_bb\ncompute_vector_u_68(\n  Eurydice_arr_1d *a_as_ntt,\n  Eurydice_arr_bb *r_as_ntt,\n  Eurydice_arr_bb *error_1\n)\n{\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_a8_68(&lvalue););\n  Eurydice_arr_bb result = arr_struct;\n  KRML_MAYBE_FOR3(i0,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i1 = i0;\n    Eurydice_arr_bb *row = &a_as_ntt->data[i1];\n    KRML_MAYBE_FOR3(i,\n      (size_t)0U,\n      (size_t)3U,\n      (size_t)1U,\n      size_t j = i;\n      Eurydice_arr_9e *a_element = &row->data[j];\n      Eurydice_arr_9e product = ntt_multiply_d6_ea(a_element, &r_as_ntt->data[j]);\n      add_to_ring_element_d6_68(&result.data[i1], &product););\n    invert_ntt_montgomery_68(&result.data[i1]);\n    add_error_reduce_d6_ea(&result.data[i1], &error_1->data[i1]););\n  return result;\n}\n\n/**\n Call [`compress_then_serialize_ring_element_u`] on each ring element.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- OUT_LEN= 960\n- COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_u_21(Eurydice_arr_bb input, Eurydice_mut_borrow_slice_u8 out)\n{\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e re = input.data[i0];\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 * ((size_t)960U / (size_t)3U),\n            .end = (i0 + (size_t)1U) * ((size_t)960U / (size_t)3U)\n          }\n        ));\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_b0 lvalue = compress_then_serialize_ring_element_u_f7(&re);\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_56(&lvalue), uint8_t););\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c1\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- C1_LEN= 960\n- U_COMPRESSION_FACTOR= 10\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE tuple_5b\nencrypt_c1_87(\n  Eurydice_mut_borrow_slice_u8 randomness,\n  Eurydice_arr_1d *matrix,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_fa prf_input = libcrux_ml_kem_utils_into_padded_array_29(randomness);\n  Eurydice_arr_bb arr_struct0;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct0.data[i] = call_mut_f1_87(&lvalue););\n  Eurydice_arr_bb r_as_ntt = arr_struct0;\n  uint8_t domain_separator0 = sample_vector_cbd_then_ntt_bf(&r_as_ntt, &prf_input, 0U);\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_dd_87(&lvalue););\n  Eurydice_arr_bb error_1 = arr_struct;\n  uint8_t domain_separator = sample_ring_element_cbd_bf(&prf_input, domain_separator0, &error_1);\n  prf_input.data[32U] = domain_separator;\n  Eurydice_arr_89 prf_output = PRF_4a_3b0(Eurydice_array_to_slice_mut_b5(&prf_input));\n  Eurydice_arr_9e\n  error_2 = sample_from_binomial_distribution_66(Eurydice_array_to_slice_mut_78(&prf_output));\n  Eurydice_arr_bb u = compute_vector_u_68(matrix, &r_as_ntt, &error_1);\n  compress_then_serialize_u_21(u, ciphertext);\n  return (KRML_CLITERAL(tuple_5b){ .fst = r_as_ntt, .snd = error_2 });\n}\n\n/**\n Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_ring_element_v_68(\n  Eurydice_arr_bb *t_as_ntt,\n  Eurydice_arr_bb *r_as_ntt,\n  Eurydice_arr_9e *error_2,\n  Eurydice_arr_9e *message\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&t_as_ntt->data[i0], &r_as_ntt->data[i0]);\n    add_to_ring_element_d6_68(&result, &product););\n  invert_ntt_montgomery_68(&result);\n  return add_message_error_reduce_d6_ea(error_2, message, result);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- COMPRESSION_FACTOR= 4\n- OUT_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\ncompress_then_serialize_ring_element_v_30(Eurydice_arr_9e re, Eurydice_mut_borrow_slice_u8 out)\n{\n  compress_then_serialize_4_ea(re, out);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_c2\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- V_COMPRESSION_FACTOR= 4\n- C2_LEN= 128\n*/\nstatic KRML_MUSTINLINE void\nencrypt_c2_30(\n  Eurydice_arr_bb *t_as_ntt,\n  Eurydice_arr_bb *r_as_ntt,\n  Eurydice_arr_9e *error_2,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 ciphertext\n)\n{\n  Eurydice_arr_9e message_as_ring_element = deserialize_then_decompress_message_ea(message);\n  Eurydice_arr_9e\n  v = compute_ring_element_v_68(t_as_ntt, r_as_ntt, error_2, &message_as_ring_element);\n  compress_then_serialize_ring_element_v_30(v, ciphertext);\n}\n\n/**\n This function implements <strong>Algorithm 13</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE encryption algorithm.\n\n Algorithm 13 is reproduced below:\n\n ```plaintext\n Input: encryption key ekₚₖₑ ∈ 𝔹^{384k+32}.\n Input: message m ∈ 𝔹^{32}.\n Input: encryption randomness r ∈ 𝔹^{32}.\n Output: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n\n N ← 0\n t̂ ← ByteDecode₁₂(ekₚₖₑ[0:384k])\n ρ ← ekₚₖₑ[384k: 384k + 32]\n for (i ← 0; i < k; i++)\n     for(j ← 0; j < k; j++)\n         Â[i,j] ← SampleNTT(XOF(ρ, i, j))\n     end for\n end for\n for(i ← 0; i < k; i++)\n     r[i] ← SamplePolyCBD_{η₁}(PRF_{η₁}(r,N))\n     N ← N + 1\n end for\n for(i ← 0; i < k; i++)\n     e₁[i] ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n     N ← N + 1\n end for\n e₂ ← SamplePolyCBD_{η₂}(PRF_{η₂}(r,N))\n r̂ ← NTT(r)\n u ← NTT-¹(Âᵀ ◦ r̂) + e₁\n μ ← Decompress₁(ByteDecode₁(m)))\n v ← NTT-¹(t̂ᵀ ◦ rˆ) + e₂ + μ\n c₁ ← ByteEncode_{dᵤ}(Compress_{dᵤ}(u))\n c₂ ← ByteEncode_{dᵥ}(Compress_{dᵥ}(v))\n return c ← (c₁ ‖ c₂)\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_LEN= 960\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2b\nencrypt_unpacked_d5(\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  Eurydice_arr_2b ciphertext = { .data = { 0U } };\n  tuple_5b\n  uu____0 =\n    encrypt_c1_87(randomness,\n      &public_key->A,\n      Eurydice_array_to_subslice_mut_d415(&ciphertext,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)960U })));\n  Eurydice_arr_bb r_as_ntt = uu____0.fst;\n  Eurydice_arr_9e error_2 = uu____0.snd;\n  encrypt_c2_30(&public_key->t_as_ntt,\n    &r_as_ntt,\n    &error_2,\n    message,\n    Eurydice_array_to_subslice_from_mut_5f2(&ciphertext, (size_t)960U));\n  return ciphertext;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- VECTOR_U_BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_unpacked_encapsulate_a7(\n  libcrux_ml_kem_ind_cca_unpacked_MlKemPublicKeyUnpacked_51 *public_key,\n  Eurydice_arr_ec *randomness\n)\n{\n  Eurydice_arr_c7\n  hashed =\n    encaps_prepare_13(Eurydice_array_to_slice_mut_01(randomness),\n      Eurydice_array_to_slice_mut_01(&public_key->public_key_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____0 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____0.snd;\n  Eurydice_arr_2b\n  ciphertext = encrypt_unpacked_d5(&public_key->ind_cpa_public_key, randomness, pseudorandomness);\n  Eurydice_arr_ec shared_secret_array = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&shared_secret_array),\n    shared_secret,\n    uint8_t);\n  return\n    (\n      KRML_CLITERAL(tuple_f4){\n        .fst = libcrux_ml_kem_types_from_19_52(ciphertext),\n        .snd = shared_secret_array\n      }\n    );\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::deserialize_then_decompress_u::closure<Vector, K, CIPHERTEXT_SIZE, U_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.call_mut_35\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic Eurydice_arr_9e call_mut_35_30(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n Call [`deserialize_then_decompress_ring_element_u`] on each ring element\n in the `ciphertext`.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- U_COMPRESSION_FACTOR= 10\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_bb\ndeserialize_then_decompress_u_30(Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_35_30(&lvalue););\n  Eurydice_arr_bb u_as_ntt = arr_struct;\n  for\n  (size_t\n    i = (size_t)0U;\n    i <\n      (size_t)1088U /\n        (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U);\n    i++)\n  {\n    size_t i0 = i;\n    Eurydice_mut_borrow_slice_u8\n    u_bytes =\n      Eurydice_array_to_subslice_mut_d415(ciphertext,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U),\n            .end = i0 *\n              (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U)\n            + LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)10U / (size_t)8U\n          }\n        ));\n    u_as_ntt.data[i0] = deserialize_then_decompress_ring_element_u_f7(u_bytes);\n    ntt_vector_u_f7(&u_as_ntt.data[i0]);\n  }\n  return u_as_ntt;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ndeserialize_then_decompress_ring_element_v_b6(Eurydice_mut_borrow_slice_u8 serialized)\n{\n  return deserialize_then_decompress_4_ea(serialized);\n}\n\n/**\n The following functions compute various expressions involving\n vectors and matrices. The computation of these expressions has been\n abstracted away into these functions in order to save on loop iterations.\n Compute v − InverseNTT(sᵀ ◦ NTT(u))\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.matrix.compute_message\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_9e\ncompute_message_68(\n  Eurydice_arr_9e *v,\n  Eurydice_arr_bb *secret_as_ntt,\n  Eurydice_arr_bb *u_as_ntt\n)\n{\n  Eurydice_arr_9e result = ZERO_d6_ea();\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_arr_9e product = ntt_multiply_d6_ea(&secret_as_ntt->data[i0], &u_as_ntt->data[i0]);\n    add_to_ring_element_d6_68(&result, &product););\n  invert_ntt_montgomery_68(&result);\n  return subtract_reduce_d6_ea(v, result);\n}\n\n/**\n This function implements <strong>Algorithm 14</strong> of the\n NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.\n\n Algorithm 14 is reproduced below:\n\n ```plaintext\n Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.\n Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.\n Output: message m ∈ 𝔹^{32}.\n\n c₁ ← c[0 : 32dᵤk]\n c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]\n u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))\n v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))\n ŝ ← ByteDecode₁₂(dkₚₖₑ)\n w ← v - NTT-¹(ŝᵀ ◦ NTT(u))\n m ← ByteEncode₁(Compress₁(w))\n return m\n ```\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_unpacked_01(Eurydice_arr_bb *secret_key, Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_bb u_as_ntt = deserialize_then_decompress_u_30(ciphertext);\n  Eurydice_arr_9e\n  v =\n    deserialize_then_decompress_ring_element_v_b6(Eurydice_array_to_subslice_from_mut_5f2(ciphertext,\n        (size_t)960U));\n  Eurydice_arr_9e message = compute_message_68(&v, secret_key, &u_as_ntt);\n  return compress_then_serialize_message_ea(message);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::hash_functions::Hash<K> for libcrux_ml_kem::hash_functions::portable::PortableHash<K>}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_4a\nwith const generics\n- K= 3\n- LEN= 32\n*/\nstatic inline Eurydice_arr_ec PRF_4a_3b(Eurydice_mut_borrow_slice_u8 input)\n{\n  return PRF_ce(input);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.unpacked.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_unpacked_decapsulate_0c(\n  libcrux_ml_kem_mlkem768_portable_unpacked_MlKem768KeyPairUnpacked *key_pair,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  Eurydice_arr_ec\n  decrypted = decrypt_unpacked_01(&key_pair->private_key.ind_cpa_private_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____0,\n    Eurydice_array_to_slice_mut_01(&key_pair->public_key.public_key_hash),\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_78(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_af\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_66(Eurydice_array_to_slice_mut_01(&key_pair->private_key.implicit_rejection_value));\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f3(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_52(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_3b(Eurydice_array_to_slice_mut_81(&to_hash));\n  Eurydice_arr_2b\n  expected_ciphertext =\n    encrypt_unpacked_d5(&key_pair->public_key.ind_cpa_public_key,\n      &decrypted,\n      pseudorandomness);\n  Eurydice_mut_borrow_slice_u8 uu____3 = libcrux_ml_kem_types_as_ref_c1_52(ciphertext);\n  uint8_t\n  selector =\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(uu____3,\n      Eurydice_array_to_slice_mut_06(&expected_ciphertext));\n  return\n    libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(shared_secret,\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret),\n      selector);\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::serialize::deserialize_ring_elements_reduced_out::closure<Vector, K>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic Eurydice_arr_9e call_mut_0b_68(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\n This function deserializes ring elements and reduces the result by the field\n modulus.\n\n This function MUST NOT be used on secret inputs.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.serialize.deserialize_ring_elements_reduced_out\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_bb\ndeserialize_ring_elements_reduced_out_68(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_68(&lvalue););\n  Eurydice_arr_bb deserialized_pk = arr_struct;\n  deserialize_ring_elements_reduced_68(public_key, &deserialized_pk);\n  return deserialized_pk;\n}\n\n/**\n Validate an ML-KEM public key.\n\n This implements the Modulus check in 7.2 2.\n Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the\n `public_key` type.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- PUBLIC_KEY_SIZE= 1184\n*/\nbool libcrux_ml_kem_ind_cca_validate_public_key_b6(Eurydice_arr_5f *public_key)\n{\n  Eurydice_arr_bb\n  deserialized_pk =\n    deserialize_ring_elements_reduced_out_68(Eurydice_array_to_subslice_to_mut_211(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)));\n  Eurydice_arr_5f\n  public_key_serialized =\n    serialize_public_key_b6(&deserialized_pk,\n      Eurydice_array_to_subslice_from_mut_5f4(public_key,\n        libcrux_ml_kem_constants_ranked_bytes_per_ring_element((size_t)3U)));\n  return Eurydice_array_eq((size_t)1184U, public_key, &public_key_serialized, uint8_t);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key_only\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n*/\nbool libcrux_ml_kem_ind_cca_validate_private_key_only_52(Eurydice_arr_7d *private_key)\n{\n  Eurydice_arr_ec\n  t =\n    H_4a_78(Eurydice_array_to_subslice_mut_d418(private_key,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = (size_t)384U * (size_t)3U,\n            .end = (size_t)768U * (size_t)3U + (size_t)32U\n          }\n        )));\n  Eurydice_mut_borrow_slice_u8\n  expected =\n    Eurydice_array_to_subslice_mut_d418(private_key,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)768U * (size_t)3U + (size_t)32U,\n          .end = (size_t)768U * (size_t)3U + (size_t)64U\n        }\n      ));\n  return Eurydice_array_eq_slice_mut((size_t)32U, &t, &expected, uint8_t, bool);\n}\n\n/**\n Validate an ML-KEM private key.\n\n This implements the Hash check in 7.3 3.\n Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`\n and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CIPHERTEXT_SIZE= 1088\n*/\nbool\nlibcrux_ml_kem_ind_cca_validate_private_key_ba(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *_ciphertext\n)\n{\n  return libcrux_ml_kem_ind_cca_validate_private_key_only_52(private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- PRIVATE_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_utils_extraction_helper_Keypair768\ngenerate_keypair_30(Eurydice_mut_borrow_slice_u8 key_generation_seed)\n{\n  Eurydice_arr_bb private_key = default_70_68();\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51 public_key = default_8b_68();\n  generate_keypair_unpacked_39(key_generation_seed, &private_key, &public_key);\n  return serialize_unpacked_secret_key_30(&public_key, &private_key);\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- SERIALIZED_KEY_LEN= 2400\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_7d\nserialize_kem_secret_key_52(\n  Eurydice_mut_borrow_slice_u8 private_key,\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value\n)\n{\n  Eurydice_arr_7d out = { .data = { 0U } };\n  libcrux_ml_kem_ind_cca_serialize_kem_secret_key_mut_52(private_key,\n    public_key,\n    implicit_rejection_value,\n    &out);\n  return out;\n}\n\n/**\n Packed API\n\n Generate a key pair.\n\n Depending on the `Vector` and `Hasher` used, this requires different hardware\n features\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CPA_PRIVATE_KEY_SIZE= 1152\n- PRIVATE_KEY_SIZE= 2400\n- PUBLIC_KEY_SIZE= 1184\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n*/\nlibcrux_ml_kem_mlkem768_MlKem768KeyPair\nlibcrux_ml_kem_ind_cca_generate_keypair_b8(Eurydice_arr_c7 *randomness)\n{\n  Eurydice_mut_borrow_slice_u8\n  ind_cpa_keypair_randomness =\n    Eurydice_array_to_subslice_mut_d47(randomness,\n      (\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE\n        }\n      ));\n  Eurydice_mut_borrow_slice_u8\n  implicit_rejection_value =\n    Eurydice_array_to_subslice_from_mut_5f0(randomness,\n      LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE);\n  libcrux_ml_kem_utils_extraction_helper_Keypair768\n  uu____0 = generate_keypair_30(ind_cpa_keypair_randomness);\n  Eurydice_arr_0e ind_cpa_private_key = uu____0.fst;\n  Eurydice_arr_5f public_key = uu____0.snd;\n  Eurydice_arr_7d\n  secret_key_serialized =\n    serialize_kem_secret_key_52(Eurydice_array_to_slice_mut_f4(&ind_cpa_private_key),\n      Eurydice_array_to_slice_mut_ff(&public_key),\n      implicit_rejection_value);\n  Eurydice_arr_7d private_key = libcrux_ml_kem_types_from_b2_79(secret_key_serialized);\n  return\n    libcrux_ml_kem_types_from_17_bc(private_key,\n      libcrux_ml_kem_types_from_51_3d(public_key));\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\nentropy_preprocess_39_13(Eurydice_mut_borrow_slice_u8 randomness)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), randomness, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.build_unpacked_public_key\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- T_AS_NTT_ENCODED_SIZE= 1152\n*/\nstatic KRML_MUSTINLINE libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51\nbuild_unpacked_public_key_05(Eurydice_mut_borrow_slice_u8 public_key)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51\n  unpacked_public_key = default_8b_68();\n  build_unpacked_public_key_mut_05(public_key, &unpacked_public_key);\n  return unpacked_public_key;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_LEN= 960\n- C2_LEN= 128\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n- BLOCK_LEN= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_2b\nencrypt_d5(\n  Eurydice_mut_borrow_slice_u8 public_key,\n  Eurydice_arr_ec *message,\n  Eurydice_mut_borrow_slice_u8 randomness\n)\n{\n  libcrux_ml_kem_ind_cpa_unpacked_IndCpaPublicKeyUnpacked_51\n  unpacked_public_key = build_unpacked_public_key_05(public_key);\n  return encrypt_unpacked_d5(&unpacked_public_key, message, randomness);\n}\n\n/**\nThis function found in impl {libcrux_ml_kem::variant::Variant for libcrux_ml_kem::variant::MlKem}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.variant.kdf_39\nwith types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec kdf_39_52(Eurydice_mut_borrow_slice_u8 shared_secret)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_slice_mut_01(&out), shared_secret, uint8_t);\n  return out;\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- PUBLIC_KEY_SIZE= 1184\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n*/\ntuple_f4\nlibcrux_ml_kem_ind_cca_encapsulate_99(Eurydice_arr_5f *public_key, Eurydice_arr_ec *randomness)\n{\n  Eurydice_arr_ec\n  randomness0 = entropy_preprocess_39_13(Eurydice_array_to_slice_mut_01(randomness));\n  Eurydice_arr_c7\n  to_hash =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&randomness0));\n  Eurydice_mut_borrow_slice_u8\n  uu____0 =\n    Eurydice_array_to_subslice_from_mut_5f0(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_ec\n  lvalue =\n    H_4a_78(Eurydice_array_to_slice_mut_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)));\n  Eurydice_slice_copy(uu____0, Eurydice_array_to_slice_mut_01(&lvalue), uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_78(Eurydice_array_to_slice_mut_17(&to_hash));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_2b\n  ciphertext =\n    encrypt_d5(Eurydice_array_to_slice_mut_ff(libcrux_ml_kem_types_as_slice_e6_3d(public_key)),\n      &randomness0,\n      pseudorandomness);\n  Eurydice_arr_2b uu____2 = libcrux_ml_kem_types_from_19_52(ciphertext);\n  return (KRML_CLITERAL(tuple_f4){ .fst = uu____2, .snd = kdf_39_52(shared_secret) });\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0, TraitClause@1]> for libcrux_ml_kem::ind_cpa::decrypt::closure<Vector, K, CIPHERTEXT_SIZE, VECTOR_U_ENCODED_SIZE, U_COMPRESSION_FACTOR, V_COMPRESSION_FACTOR>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt.call_mut_0b\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic Eurydice_arr_9e call_mut_0b_01(void **_)\n{\n  return ZERO_d6_ea();\n}\n\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector\nwith const generics\n- K= 3\n- CIPHERTEXT_SIZE= 1088\n- VECTOR_U_ENCODED_SIZE= 960\n- U_COMPRESSION_FACTOR= 10\n- V_COMPRESSION_FACTOR= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_ec\ndecrypt_01(Eurydice_mut_borrow_slice_u8 secret_key, Eurydice_arr_2b *ciphertext)\n{\n  Eurydice_arr_bb arr_struct;\n  KRML_MAYBE_FOR3(i,\n    (size_t)0U,\n    (size_t)3U,\n    (size_t)1U,\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[i] = call_mut_0b_01(&lvalue););\n  Eurydice_arr_bb secret_key_unpacked = arr_struct;\n  deserialize_vector_68(secret_key, &secret_key_unpacked);\n  return decrypt_unpacked_01(&secret_key_unpacked, ciphertext);\n}\n\n/**\n This code verifies on some machines, runs out of memory on others\n*/\n/**\nA monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate\nwith types libcrux_ml_kem_vector_portable_vector_type_PortableVector, libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]], libcrux_ml_kem_variant_MlKem\nwith const generics\n- K= 3\n- SECRET_KEY_SIZE= 2400\n- CPA_SECRET_KEY_SIZE= 1152\n- PUBLIC_KEY_SIZE= 1184\n- CIPHERTEXT_SIZE= 1088\n- T_AS_NTT_ENCODED_SIZE= 1152\n- C1_SIZE= 960\n- C2_SIZE= 128\n- VECTOR_U_COMPRESSION_FACTOR= 10\n- VECTOR_V_COMPRESSION_FACTOR= 4\n- C1_BLOCK_SIZE= 320\n- ETA1= 2\n- ETA1_RANDOMNESS_SIZE= 128\n- ETA2= 2\n- ETA2_RANDOMNESS_SIZE= 128\n- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120\n*/\nEurydice_arr_ec\nlibcrux_ml_kem_ind_cca_decapsulate_fd(\n  Eurydice_arr_7d *private_key,\n  Eurydice_arr_2b *ciphertext\n)\n{\n  Eurydice_mut_borrow_slice_u8_x4\n  uu____0 =\n    libcrux_ml_kem_types_unpack_private_key_64(Eurydice_array_to_slice_mut_51(private_key));\n  Eurydice_mut_borrow_slice_u8 ind_cpa_secret_key = uu____0.fst;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key = uu____0.snd;\n  Eurydice_mut_borrow_slice_u8 ind_cpa_public_key_hash = uu____0.thd;\n  Eurydice_mut_borrow_slice_u8 implicit_rejection_value = uu____0.f3;\n  Eurydice_arr_ec decrypted = decrypt_01(ind_cpa_secret_key, ciphertext);\n  Eurydice_arr_c7\n  to_hash0 =\n    libcrux_ml_kem_utils_into_padded_array_c9(Eurydice_array_to_slice_mut_01(&decrypted));\n  Eurydice_slice_copy(Eurydice_array_to_subslice_from_mut_5f0(&to_hash0,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE),\n    ind_cpa_public_key_hash,\n    uint8_t);\n  Eurydice_arr_c7 hashed = G_4a_78(Eurydice_array_to_slice_mut_17(&to_hash0));\n  Eurydice_mut_borrow_slice_u8_x2\n  uu____1 =\n    Eurydice_slice_split_at(Eurydice_array_to_slice_mut_17(&hashed),\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,\n      uint8_t,\n      Eurydice_mut_borrow_slice_u8_x2);\n  Eurydice_mut_borrow_slice_u8 shared_secret0 = uu____1.fst;\n  Eurydice_mut_borrow_slice_u8 pseudorandomness = uu____1.snd;\n  Eurydice_arr_af to_hash = libcrux_ml_kem_utils_into_padded_array_66(implicit_rejection_value);\n  Eurydice_mut_borrow_slice_u8\n  uu____2 =\n    Eurydice_array_to_subslice_from_mut_5f3(&to_hash,\n      LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE);\n  Eurydice_slice_copy(uu____2, libcrux_ml_kem_types_as_ref_c1_52(ciphertext), uint8_t);\n  Eurydice_arr_ec\n  implicit_rejection_shared_secret = PRF_4a_3b(Eurydice_array_to_slice_mut_81(&to_hash));\n  Eurydice_arr_2b\n  expected_ciphertext = encrypt_d5(ind_cpa_public_key, &decrypted, pseudorandomness);\n  Eurydice_mut_borrow_slice_u8\n  uu____3 = Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret);\n  Eurydice_arr_ec implicit_rejection_shared_secret0 = kdf_39_52(uu____3);\n  Eurydice_arr_ec shared_secret = kdf_39_52(shared_secret0);\n  Eurydice_mut_borrow_slice_u8 uu____4 = libcrux_ml_kem_types_as_ref_c1_52(ciphertext);\n  return\n    libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(uu____4,\n      Eurydice_array_to_slice_mut_06(&expected_ciphertext),\n      Eurydice_array_to_slice_mut_01(&shared_secret),\n      Eurydice_array_to_slice_mut_01(&implicit_rejection_shared_secret0));\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_mlkem_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_mlkem_portable_H\n#define libcrux_mlkem_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\nEurydice_arr_c7 libcrux_ml_kem_hash_functions_portable_G(Eurydice_mut_borrow_slice_u8 input);\n\nEurydice_arr_ec libcrux_ml_kem_hash_functions_portable_H(Eurydice_mut_borrow_slice_u8 input);\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR ((size_t)16U)\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS (1353)\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS (3329)\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R (62209U)\n\ntypedef Eurydice_arr_d6 libcrux_ml_kem_vector_portable_vector_type_PortableVector;\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_from_i16_array(Eurydice_mut_borrow_slice_i16 array);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_from_i16_array_b8(Eurydice_mut_borrow_slice_i16 array);\n\ntypedef struct uint8_t_x11_s\n{\n  uint8_t fst;\n  uint8_t snd;\n  uint8_t thd;\n  uint8_t f3;\n  uint8_t f4;\n  uint8_t f5;\n  uint8_t f6;\n  uint8_t f7;\n  uint8_t f8;\n  uint8_t f9;\n  uint8_t f10;\n}\nuint8_t_x11;\n\nuint8_t_x11\nlibcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_mut_borrow_slice_i16 v);\n\nEurydice_arr_80 libcrux_ml_kem_vector_portable_serialize_serialize_11(Eurydice_arr_d6 v);\n\nEurydice_arr_80 libcrux_ml_kem_vector_portable_serialize_11(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_80 libcrux_ml_kem_vector_portable_serialize_11_b8(Eurydice_arr_d6 a);\n\ntypedef struct int16_t_x8_s\n{\n  int16_t fst;\n  int16_t snd;\n  int16_t thd;\n  int16_t f3;\n  int16_t f4;\n  int16_t f5;\n  int16_t f6;\n  int16_t f7;\n}\nint16_t_x8;\n\nint16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_11_int(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_11(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_11(Eurydice_mut_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_deserialize_11_b8(Eurydice_mut_borrow_slice_u8 a);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_vector_type_to_i16_array(Eurydice_arr_d6 x);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_to_i16_array_b8(Eurydice_arr_d6 x);\n\n#define LIBCRUX_ML_KEM_VECTOR_REJ_SAMPLE_TABLE_REJECTION_SAMPLE_SHUFFLE_TABLE ((KRML_CLITERAL(Eurydice_arr_87){ .data = { { .data = { 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U } }, { .data = { 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U } }, { .data = { 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U } }, { .data = { 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U } } } }))\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_vector_type_zero(void);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_ZERO_b8(void);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_vector_type_from_bytes(Eurydice_mut_borrow_slice_u8 array);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_from_bytes_b8(Eurydice_mut_borrow_slice_u8 array);\n\nvoid\nlibcrux_ml_kem_vector_portable_vector_type_to_bytes(\n  Eurydice_arr_d6 x,\n  Eurydice_mut_borrow_slice_u8 bytes\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nvoid\nlibcrux_ml_kem_vector_portable_to_bytes_b8(\n  Eurydice_arr_d6 x,\n  Eurydice_mut_borrow_slice_u8 bytes\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_add(Eurydice_arr_d6 lhs, Eurydice_arr_d6 *rhs);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_add_b8(Eurydice_arr_d6 lhs, Eurydice_arr_d6 *rhs);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_sub(Eurydice_arr_d6 lhs, Eurydice_arr_d6 *rhs);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_sub_b8(Eurydice_arr_d6 lhs, Eurydice_arr_d6 *rhs);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(Eurydice_arr_d6 vec, int16_t c);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_multiply_by_constant_b8(Eurydice_arr_d6 vec, int16_t c);\n\n/**\n Note: This function is not secret independent\n Only use with public values.\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(Eurydice_arr_d6 vec);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_cond_subtract_3329_b8(Eurydice_arr_d6 v);\n\n#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_MULTIPLIER (20159)\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT (26)\n\n#define LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_R ((int32_t)((uint32_t)1 << (uint32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_BARRETT_SHIFT))\n\n/**\n Signed Barrett Reduction\n\n Given an input `value`, `barrett_reduce` outputs a representative `result`\n such that:\n\n - result ≡ value (mod FIELD_MODULUS)\n - the absolute value of `result` is bound as follows:\n\n `|result| ≤ FIELD_MODULUS / 2 · (|value|/BARRETT_R + 1)\n\n Note: The input bound is 28296 to prevent overflow in the multiplication of quotient by FIELD_MODULUS\n\n*/\nint16_t libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(int16_t value);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(Eurydice_arr_d6 vec);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_barrett_reduce_b8(Eurydice_arr_d6 vector);\n\n#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT (16U)\n\n/**\n Signed Montgomery Reduction\n\n Given an input `value`, `montgomery_reduce` outputs a representative `o`\n such that:\n\n - o ≡ value · MONTGOMERY_R^(-1) (mod FIELD_MODULUS)\n - the absolute value of `o` is bound as follows:\n\n `|result| ≤ ceil(|value| / MONTGOMERY_R) + 1665\n\n In particular, if `|value| ≤ FIELD_MODULUS-1 * FIELD_MODULUS-1`, then `|o| <= FIELD_MODULUS-1`.\n And, if `|value| ≤ pow2 16 * FIELD_MODULUS-1`, then `|o| <= FIELD_MODULUS + 1664\n\n*/\nint16_t libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(int32_t value);\n\n/**\n If `fe` is some field element 'x' of the Kyber field and `fer` is congruent to\n `y · MONTGOMERY_R`, this procedure outputs a value that is congruent to\n `x · y`, as follows:\n\n    `fe · fer ≡ x · y · MONTGOMERY_R (mod FIELD_MODULUS)`\n\n `montgomery_reduce` takes the value `x · y · MONTGOMERY_R` and outputs a representative\n `x · y · MONTGOMERY_R * MONTGOMERY_R^{-1} ≡ x · y (mod FIELD_MODULUS)`.\n*/\nint16_t\nlibcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(\n  int16_t fe,\n  int16_t fer\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant(\n  Eurydice_arr_d6 vec,\n  int16_t c\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_b8(\n  Eurydice_arr_d6 vector,\n  int16_t constant\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(\n  Eurydice_arr_d6 vec,\n  int16_t c\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_arithmetic_to_unsigned_representative(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_to_unsigned_representative_b8(Eurydice_arr_d6 a);\n\n/**\n The `compress_*` functions implement the `Compress` function specified in the NIST FIPS\n 203 standard (Page 18, Expression 4.5), which is defined as:\n\n ```plaintext\n Compress_d: ℤq -> ℤ_{2ᵈ}\n Compress_d(x) = ⌈(2ᵈ/q)·x⌋\n ```\n\n Since `⌈x⌋ = ⌊x + 1/2⌋` we have:\n\n ```plaintext\n Compress_d(x) = ⌊(2ᵈ/q)·x + 1/2⌋\n               = ⌊(2^{d+1}·x + q) / 2q⌋\n ```\n\n For further information about the function implementations, consult the\n `implementation_notes.pdf` document in this directory.\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\nuint8_t libcrux_ml_kem_vector_portable_compress_compress_message_coefficient(uint16_t fe);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_compress_1(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_1_b8(Eurydice_arr_d6 a);\n\nuint32_t\nlibcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits(\n  uint8_t n,\n  uint32_t value\n);\n\nint16_t\nlibcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient(\n  uint8_t coefficient_bits,\n  uint16_t fe\n);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_compress_decompress_1(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_decompress_1_b8(Eurydice_arr_d6 a);\n\nvoid\nlibcrux_ml_kem_vector_portable_ntt_ntt_step(\n  Eurydice_arr_d6 *vec,\n  int16_t zeta,\n  size_t i,\n  size_t j\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_1_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_2_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(Eurydice_arr_d6 vec, int16_t zeta);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_layer_3_step_b8(Eurydice_arr_d6 a, int16_t zeta);\n\nvoid\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_step(\n  Eurydice_arr_d6 *vec,\n  int16_t zeta,\n  size_t i,\n  size_t j\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step(\n  Eurydice_arr_d6 vec,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_b8(\n  Eurydice_arr_d6 a,\n  int16_t zeta0,\n  int16_t zeta1\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(Eurydice_arr_d6 vec, int16_t zeta);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_b8(Eurydice_arr_d6 a, int16_t zeta);\n\n/**\n Compute the product of two Kyber binomials with respect to the\n modulus `X² - zeta`.\n\n This function almost implements <strong>Algorithm 11</strong> of the\n NIST FIPS 203 standard, which is reproduced below:\n\n ```plaintext\n Input:  a₀, a₁, b₀, b₁ ∈ ℤq.\n Input: γ ∈ ℤq.\n Output: c₀, c₁ ∈ ℤq.\n\n c₀ ← a₀·b₀ + a₁·b₁·γ\n c₁ ← a₀·b₁ + a₁·b₀\n return c₀, c₁\n ```\n We say \"almost\" because the coefficients output by this function are in\n the Montgomery domain (unlike in the specification).\n\n The NIST FIPS 203 standard can be found at\n <https://csrc.nist.gov/pubs/fips/203/ipd>.\n*/\nvoid\nlibcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(\n  Eurydice_arr_d6 *a,\n  Eurydice_arr_d6 *b,\n  int16_t zeta,\n  size_t i,\n  Eurydice_arr_d6 *out\n);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_ntt_multiply(\n  Eurydice_arr_d6 *lhs,\n  Eurydice_arr_d6 *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_ntt_multiply_b8(\n  Eurydice_arr_d6 *lhs,\n  Eurydice_arr_d6 *rhs,\n  int16_t zeta0,\n  int16_t zeta1,\n  int16_t zeta2,\n  int16_t zeta3\n);\n\nEurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_serialize_1(Eurydice_arr_d6 v);\n\nEurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_1(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_array_u8x2 libcrux_ml_kem_vector_portable_serialize_1_b8(Eurydice_arr_d6 a);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_1(Eurydice_mut_borrow_slice_u8 v);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_1(Eurydice_mut_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_deserialize_1_b8(Eurydice_mut_borrow_slice_u8 a);\n\ntypedef struct uint8_t_x4_s\n{\n  uint8_t fst;\n  uint8_t snd;\n  uint8_t thd;\n  uint8_t f3;\n}\nuint8_t_x4;\n\nuint8_t_x4\nlibcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_mut_borrow_slice_i16 v);\n\nEurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_serialize_4(Eurydice_arr_d6 v);\n\nEurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_4(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_array_u8x8 libcrux_ml_kem_vector_portable_serialize_4_b8(Eurydice_arr_d6 a);\n\nint16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_4_int(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_4(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_4(Eurydice_mut_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_deserialize_4_b8(Eurydice_mut_borrow_slice_u8 a);\n\ntypedef struct uint8_t_x5_s\n{\n  uint8_t fst;\n  uint8_t snd;\n  uint8_t thd;\n  uint8_t f3;\n  uint8_t f4;\n}\nuint8_t_x5;\n\nuint8_t_x5\nlibcrux_ml_kem_vector_portable_serialize_serialize_5_int(Eurydice_mut_borrow_slice_i16 v);\n\nEurydice_arr_6d libcrux_ml_kem_vector_portable_serialize_serialize_5(Eurydice_arr_d6 v);\n\nEurydice_arr_6d libcrux_ml_kem_vector_portable_serialize_5(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_6d libcrux_ml_kem_vector_portable_serialize_5_b8(Eurydice_arr_d6 a);\n\nint16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_5_int(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_5(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_5(Eurydice_mut_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_deserialize_5_b8(Eurydice_mut_borrow_slice_u8 a);\n\nuint8_t_x5\nlibcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_mut_borrow_slice_i16 v);\n\nEurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_serialize_10(Eurydice_arr_d6 v);\n\nEurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_10(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_fc libcrux_ml_kem_vector_portable_serialize_10_b8(Eurydice_arr_d6 a);\n\nint16_t_x8\nlibcrux_ml_kem_vector_portable_serialize_deserialize_10_int(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_10(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_10(Eurydice_mut_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_deserialize_10_b8(Eurydice_mut_borrow_slice_u8 a);\n\ntypedef struct uint8_t_x3_s\n{\n  uint8_t fst;\n  uint8_t snd;\n  uint8_t thd;\n}\nuint8_t_x3;\n\nuint8_t_x3\nlibcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_mut_borrow_slice_i16 v);\n\nEurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_serialize_12(Eurydice_arr_d6 v);\n\nEurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_12(Eurydice_arr_d6 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_94 libcrux_ml_kem_vector_portable_serialize_12_b8(Eurydice_arr_d6 a);\n\ntypedef struct int16_t_x2_s\n{\n  int16_t fst;\n  int16_t snd;\n}\nint16_t_x2;\n\nint16_t_x2\nlibcrux_ml_kem_vector_portable_serialize_deserialize_12_int(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_serialize_deserialize_12(Eurydice_mut_borrow_slice_u8 bytes);\n\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_deserialize_12(Eurydice_mut_borrow_slice_u8 a);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6\nlibcrux_ml_kem_vector_portable_deserialize_12_b8(Eurydice_mut_borrow_slice_u8 a);\n\nsize_t\nlibcrux_ml_kem_vector_portable_sampling_rej_sample(\n  Eurydice_mut_borrow_slice_u8 a,\n  Eurydice_mut_borrow_slice_i16 result\n);\n\n/**\nThis function found in impl {libcrux_ml_kem::vector::traits::Operations for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nsize_t\nlibcrux_ml_kem_vector_portable_rej_sample_b8(\n  Eurydice_mut_borrow_slice_u8 a,\n  Eurydice_mut_borrow_slice_i16 out\n);\n\ntypedef int16_t libcrux_ml_kem_vector_portable_arithmetic_FieldElementTimesMontgomeryR;\n\ntypedef int16_t libcrux_ml_kem_vector_portable_arithmetic_MontgomeryFieldElement;\n\ntypedef int16_t libcrux_ml_kem_vector_portable_vector_type_FieldElement;\n\n/**\nThis function found in impl {core::clone::Clone for libcrux_ml_kem::vector::portable::vector_type::PortableVector}\n*/\nEurydice_arr_d6 libcrux_ml_kem_vector_portable_vector_type_clone_9c(Eurydice_arr_d6 *self);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_mlkem_portable_H_DEFINED\n#endif /* libcrux_mlkem_portable_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_sha3_avx2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"libcrux_sha3_avx2.h\"\n\n#include \"libcrux_sha3_portable.h\"\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_core.h\"\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i zero_b0(void)\n{\n  return mm256_set1_epi64x(0LL);\n}\n\nstatic KRML_MUSTINLINE __m256i\n_veor5q_u64(__m256i a, __m256i b, __m256i c, __m256i d, __m256i e)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  __m256i cd = mm256_xor_si256(c, d);\n  __m256i abcd = mm256_xor_si256(ab, cd);\n  return mm256_xor_si256(abcd, e);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i xor5_b0(__m256i a, __m256i b, __m256i c, __m256i d, __m256i e)\n{\n  return _veor5q_u64(a, b, c, d, e);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_76(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(1, x, __m256i), mm256_srli_epi64(63, x, __m256i));\n}\n\nstatic KRML_MUSTINLINE __m256i _vrax1q_u64(__m256i a, __m256i b)\n{\n  return mm256_xor_si256(a, rotate_left_76(b));\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left1_and_xor_b0(__m256i a, __m256i b)\n{\n  return _vrax1q_u64(a, b);\n}\n\nstatic KRML_MUSTINLINE __m256i _vbcaxq_u64(__m256i a, __m256i b, __m256i c)\n{\n  return mm256_xor_si256(a, mm256_andnot_si256(c, b));\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i and_not_xor_b0(__m256i a, __m256i b, __m256i c)\n{\n  return _vbcaxq_u64(a, b, c);\n}\n\nstatic KRML_MUSTINLINE __m256i _veorq_n_u64(__m256i a, uint64_t c)\n{\n  __m256i c0 = mm256_set1_epi64x((int64_t)c);\n  return mm256_xor_si256(a, c0);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i xor_constant_b0(__m256i a, uint64_t c)\n{\n  return _veorq_n_u64(a, c);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\nstatic KRML_MUSTINLINE __m256i xor_b0(__m256i a, __m256i b)\n{\n  return mm256_xor_si256(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.new_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE Eurydice_arr_c40 new_80_5d(void)\n{\n  Eurydice_arr_c40 lit;\n  __m256i repeat_expression[25U];\n  for (size_t i = (size_t)0U; i < (size_t)25U; i++)\n  {\n    repeat_expression[i] = zero_b0();\n  }\n  memcpy(lit.data, repeat_expression, (size_t)25U * sizeof (__m256i));\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.set_ij\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void set_ij_5d(Eurydice_arr_c40 *arr, size_t i, size_t j, __m256i value)\n{\n  arr->data[(size_t)5U * j + i] = value;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.get_ij\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE __m256i *get_ij_5d(Eurydice_arr_c40 *arr, size_t i, size_t j)\n{\n  return &arr->data[(size_t)5U * j + i];\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_block\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nload_block_b2(Eurydice_arr_c40 *state, Eurydice_arr_0b0 *blocks, size_t offset)\n{\n  for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)32U; i++)\n  {\n    size_t i4 = i;\n    size_t start = offset + (size_t)32U * i4;\n    __m256i\n    v00 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_mut_c8(blocks->data[0U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v10 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_mut_c8(blocks->data[1U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v20 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_mut_c8(blocks->data[2U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v30 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_mut_c8(blocks->data[3U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i v0l = mm256_unpacklo_epi64(v00, v10);\n    __m256i v1h = mm256_unpackhi_epi64(v00, v10);\n    __m256i v2l = mm256_unpacklo_epi64(v20, v30);\n    __m256i v3h = mm256_unpackhi_epi64(v20, v30);\n    __m256i v0 = mm256_permute2x128_si256(32, v0l, v2l, __m256i);\n    __m256i v1 = mm256_permute2x128_si256(32, v1h, v3h, __m256i);\n    __m256i v2 = mm256_permute2x128_si256(49, v0l, v2l, __m256i);\n    __m256i v3 = mm256_permute2x128_si256(49, v1h, v3h, __m256i);\n    size_t i0 = (size_t)4U * i4 / (size_t)5U;\n    size_t j0 = (size_t)4U * i4 % (size_t)5U;\n    size_t i1 = ((size_t)4U * i4 + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i4 + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i4 + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i4 + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i4 + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i4 + (size_t)3U) % (size_t)5U;\n    set_ij_5d(state, i0, j0, mm256_xor_si256(get_ij_5d(state, i0, j0)[0U], v0));\n    set_ij_5d(state, i1, j1, mm256_xor_si256(get_ij_5d(state, i1, j1)[0U], v1));\n    set_ij_5d(state, i2, j2, mm256_xor_si256(get_ij_5d(state, i2, j2)[0U], v2));\n    set_ij_5d(state, i3, j3, mm256_xor_si256(get_ij_5d(state, i3, j3)[0U], v3));\n  }\n  size_t rem = (size_t)136U % (size_t)32U;\n  size_t start = offset + (size_t)32U * ((size_t)136U / (size_t)32U);\n  Eurydice_arr_ec u8s = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n    Eurydice_slice_subslice_mut_c8(blocks->data[0U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n    Eurydice_slice_subslice_mut_c8(blocks->data[1U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n    Eurydice_slice_subslice_mut_c8(blocks->data[2U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n    Eurydice_slice_subslice_mut_c8(blocks->data[3U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  __m256i\n  u =\n    mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n        &u8s,\n        uint8_t,\n        Eurydice_mut_borrow_slice_u8));\n  size_t i0 = (size_t)4U * ((size_t)136U / (size_t)32U) / (size_t)5U;\n  size_t j0 = (size_t)4U * ((size_t)136U / (size_t)32U) % (size_t)5U;\n  set_ij_5d(state, i0, j0, mm256_xor_si256(get_ij_5d(state, i0, j0)[0U], u));\n  if (rem == (size_t)16U)\n  {\n    Eurydice_arr_ec u8s0 = { .data = { 0U } };\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n      Eurydice_slice_subslice_mut_c8(blocks->data[0U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n      Eurydice_slice_subslice_mut_c8(blocks->data[1U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n      Eurydice_slice_subslice_mut_c8(blocks->data[2U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n      Eurydice_slice_subslice_mut_c8(blocks->data[3U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    __m256i\n    u0 =\n      mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n          &u8s0,\n          uint8_t,\n          Eurydice_mut_borrow_slice_u8));\n    size_t i = ((size_t)4U * ((size_t)136U / (size_t)32U) + (size_t)1U) / (size_t)5U;\n    size_t j = ((size_t)4U * ((size_t)136U / (size_t)32U) + (size_t)1U) % (size_t)5U;\n    set_ij_5d(state, i, j, mm256_xor_si256(get_ij_5d(state, i, j)[0U], u0));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nstatic KRML_MUSTINLINE void\nload_last_22(Eurydice_arr_c40 *state, Eurydice_arr_0b0 *blocks, size_t start, size_t len)\n{\n  Eurydice_arr_dc\n  buffers =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d40(&buffers.data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n      Eurydice_slice_subslice_mut_c8(blocks->data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n      uint8_t);\n    buffers.data[i0].data[len] = 31U;\n    size_t uu____0 = i0;\n    size_t uu____1 = (size_t)136U - (size_t)1U;\n    buffers.data[uu____0].data[uu____1] = (uint32_t)buffers.data[uu____0].data[uu____1] | 128U;);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_0b0\n  lvalue =\n    {\n      .data = {\n        Eurydice_array_to_slice_mut_58(buffers.data),\n        Eurydice_array_to_slice_mut_58(&buffers.data[1U]),\n        Eurydice_array_to_slice_mut_58(&buffers.data[2U]),\n        Eurydice_array_to_slice_mut_58(&buffers.data[3U])\n      }\n    };\n  load_block_b2(state, &lvalue, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<4usize> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last_8f\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nstatic void\nload_last_8f_22(Eurydice_arr_c40 *self, Eurydice_arr_0b0 *input, size_t start, size_t len)\n{\n  load_last_22(self, input, start, len);\n}\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types core_core_arch_x86___m256i\nwith const generics\n- $5size_t\n*/\ntypedef struct arr_50_s { __m256i data[5U]; } arr_50;\n\n/**\nThis function found in impl {core::ops::index::Index<(usize, usize), T> for libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.index_c2\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic __m256i *index_c2_5d(Eurydice_arr_c40 *self, size_t_x2 index)\n{\n  return get_ij_5d(self, index.fst, index.snd);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.theta_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE arr_50 theta_80_5d(Eurydice_arr_c40 *self)\n{\n  arr_50\n  c =\n    {\n      .data = {\n        xor5_b0(index_c2_5d(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]),\n        xor5_b0(index_c2_5d(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]),\n        xor5_b0(index_c2_5d(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]),\n        xor5_b0(index_c2_5d(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]),\n        xor5_b0(index_c2_5d(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n          index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U])\n      }\n    };\n  return\n    (\n      KRML_CLITERAL(arr_50){\n        .data = {\n          rotate_left1_and_xor_b0(c.data[((size_t)0U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)0U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)1U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)1U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)2U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)2U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)3U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)3U + (size_t)1U) % (size_t)5U]),\n          rotate_left1_and_xor_b0(c.data[((size_t)4U + (size_t)4U) % (size_t)5U],\n            c.data[((size_t)4U + (size_t)1U) % (size_t)5U])\n        }\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.set_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic void set_80_5d(Eurydice_arr_c40 *self, size_t i, size_t j, __m256i v)\n{\n  set_ij_5d(self, i, j, v);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_02(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(36, x, __m256i), mm256_srli_epi64(28, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_02(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_02(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_02(__m256i a, __m256i b)\n{\n  return _vxarq_u64_02(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_ac(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(3, x, __m256i), mm256_srli_epi64(61, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_ac(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_ac(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_ac(__m256i a, __m256i b)\n{\n  return _vxarq_u64_ac(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_020(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(41, x, __m256i), mm256_srli_epi64(23, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_020(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_020(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_020(__m256i a, __m256i b)\n{\n  return _vxarq_u64_020(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_a9(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(18, x, __m256i), mm256_srli_epi64(46, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_a9(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_a9(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_a9(__m256i a, __m256i b)\n{\n  return _vxarq_u64_a9(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_0_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_0_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)0U,\n    xor_b0(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)0U,\n    xor_and_rotate_b0_02(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)0U,\n    xor_and_rotate_b0_ac(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)0U,\n    xor_and_rotate_b0_020(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)0U,\n    xor_and_rotate_b0_a9(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_76(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_76(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_76(__m256i a, __m256i b)\n{\n  return _vxarq_u64_76(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_58(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(44, x, __m256i), mm256_srli_epi64(20, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_58(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_58(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_58(__m256i a, __m256i b)\n{\n  return _vxarq_u64_58(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_e0(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(10, x, __m256i), mm256_srli_epi64(54, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_e0(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_e0(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_e0(__m256i a, __m256i b)\n{\n  return _vxarq_u64_e0(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_63(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(45, x, __m256i), mm256_srli_epi64(19, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_63(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_63(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_63(__m256i a, __m256i b)\n{\n  return _vxarq_u64_63(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_6a(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(2, x, __m256i), mm256_srli_epi64(62, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_6a(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_6a(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_6a(__m256i a, __m256i b)\n{\n  return _vxarq_u64_6a(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_1_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_1_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)1U,\n    xor_and_rotate_b0_76(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)1U,\n    xor_and_rotate_b0_58(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)1U,\n    xor_and_rotate_b0_e0(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)1U,\n    xor_and_rotate_b0_63(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)1U,\n    xor_and_rotate_b0_6a(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_ab(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(62, x, __m256i), mm256_srli_epi64(2, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_ab(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_ab(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_ab(__m256i a, __m256i b)\n{\n  return _vxarq_u64_ab(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_5b(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(6, x, __m256i), mm256_srli_epi64(58, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_5b(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_5b(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_5b(__m256i a, __m256i b)\n{\n  return _vxarq_u64_5b(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_6f(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(43, x, __m256i), mm256_srli_epi64(21, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_6f(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_6f(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_6f(__m256i a, __m256i b)\n{\n  return _vxarq_u64_6f(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_62(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(15, x, __m256i), mm256_srli_epi64(49, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_62(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_62(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_62(__m256i a, __m256i b)\n{\n  return _vxarq_u64_62(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_23(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(61, x, __m256i), mm256_srli_epi64(3, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_23(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_23(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_23(__m256i a, __m256i b)\n{\n  return _vxarq_u64_23(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_2_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_2_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)2U,\n    xor_and_rotate_b0_ab(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)2U,\n    xor_and_rotate_b0_5b(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)2U,\n    xor_and_rotate_b0_6f(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)2U,\n    xor_and_rotate_b0_62(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)2U,\n    xor_and_rotate_b0_23(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_37(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(28, x, __m256i), mm256_srli_epi64(36, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_37(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_37(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_37(__m256i a, __m256i b)\n{\n  return _vxarq_u64_37(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_bb(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(55, x, __m256i), mm256_srli_epi64(9, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_bb(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_bb(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_bb(__m256i a, __m256i b)\n{\n  return _vxarq_u64_bb(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_b9(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(25, x, __m256i), mm256_srli_epi64(39, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_b9(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_b9(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_b9(__m256i a, __m256i b)\n{\n  return _vxarq_u64_b9(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_54(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(21, x, __m256i), mm256_srli_epi64(43, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_54(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_54(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_54(__m256i a, __m256i b)\n{\n  return _vxarq_u64_54(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_4c(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(56, x, __m256i), mm256_srli_epi64(8, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_4c(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_4c(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_4c(__m256i a, __m256i b)\n{\n  return _vxarq_u64_4c(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_3_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_3_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)3U,\n    xor_and_rotate_b0_37(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)3U,\n    xor_and_rotate_b0_bb(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)3U,\n    xor_and_rotate_b0_b9(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)3U,\n    xor_and_rotate_b0_54(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)3U,\n    xor_and_rotate_b0_4c(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_ce(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(27, x, __m256i), mm256_srli_epi64(37, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_ce(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_ce(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_ce(__m256i a, __m256i b)\n{\n  return _vxarq_u64_ce(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_77(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(20, x, __m256i), mm256_srli_epi64(44, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_77(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_77(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_77(__m256i a, __m256i b)\n{\n  return _vxarq_u64_77(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_25(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(39, x, __m256i), mm256_srli_epi64(25, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_25(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_25(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_25(__m256i a, __m256i b)\n{\n  return _vxarq_u64_25(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_af(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(8, x, __m256i), mm256_srli_epi64(56, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_af(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_af(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_af(__m256i a, __m256i b)\n{\n  return _vxarq_u64_af(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.rotate_left\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE __m256i rotate_left_fd(__m256i x)\n{\n  return mm256_xor_si256(mm256_slli_epi64(14, x, __m256i), mm256_srli_epi64(50, x, __m256i));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2._vxarq_u64\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE __m256i _vxarq_u64_fd(__m256i a, __m256i b)\n{\n  __m256i ab = mm256_xor_si256(a, b);\n  return rotate_left_fd(ab);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.xor_and_rotate_b0\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nstatic KRML_MUSTINLINE __m256i xor_and_rotate_b0_fd(__m256i a, __m256i b)\n{\n  return _vxarq_u64_fd(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_4_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_4_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)4U,\n    xor_and_rotate_b0_ce(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)4U,\n    xor_and_rotate_b0_77(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)4U,\n    xor_and_rotate_b0_25(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)4U,\n    xor_and_rotate_b0_af(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)4U,\n    xor_and_rotate_b0_fd(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void rho_80_5d(Eurydice_arr_c40 *self, arr_50 t)\n{\n  rho_0_80_5d(self, t);\n  rho_1_80_5d(self, t);\n  rho_2_80_5d(self, t);\n  rho_3_80_5d(self, t);\n  rho_4_80_5d(self, t);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_0_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_0_80_5d(Eurydice_arr_c40 *self, Eurydice_arr_c40 old)\n{\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)0U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U]);\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)0U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U]);\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)0U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U]);\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)0U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_1_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_1_80_5d(Eurydice_arr_c40 *self, Eurydice_arr_c40 old)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)1U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U]);\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)1U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U]);\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)1U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U]);\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)1U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U]);\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)1U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_2_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_2_80_5d(Eurydice_arr_c40 *self, Eurydice_arr_c40 old)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)2U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U]);\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)2U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U]);\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)2U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U]);\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)2U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U]);\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)2U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_3_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_3_80_5d(Eurydice_arr_c40 *self, Eurydice_arr_c40 old)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)3U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U]);\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)3U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U]);\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)3U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U]);\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)3U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U]);\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)3U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_4_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_4_80_5d(Eurydice_arr_c40 *self, Eurydice_arr_c40 old)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)4U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U]);\n  set_80_5d(self,\n    (size_t)1U,\n    (size_t)4U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]);\n  set_80_5d(self,\n    (size_t)2U,\n    (size_t)4U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]);\n  set_80_5d(self,\n    (size_t)3U,\n    (size_t)4U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]);\n  set_80_5d(self,\n    (size_t)4U,\n    (size_t)4U,\n    index_c2_5d(&old, (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void pi_80_5d(Eurydice_arr_c40 *self)\n{\n  Eurydice_arr_c40 old = self[0U];\n  pi_0_80_5d(self, old);\n  pi_1_80_5d(self, old);\n  pi_2_80_5d(self, old);\n  pi_3_80_5d(self, old);\n  pi_4_80_5d(self, old);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.chi_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void chi_80_5d(Eurydice_arr_c40 *self)\n{\n  Eurydice_arr_c40 old = self[0U];\n  KRML_MAYBE_FOR5(i0,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR5(i,\n      (size_t)0U,\n      (size_t)5U,\n      (size_t)1U,\n      size_t j = i;\n      set_80_5d(self,\n        i1,\n        j,\n        and_not_xor_b0(index_c2_5d(self, (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = j }))[0U],\n          index_c2_5d(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)2U) % (size_t)5U }))[0U],\n          index_c2_5d(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)1U) % (size_t)5U }))[0U]));););\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.iota_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void iota_80_5d(Eurydice_arr_c40 *self, size_t i)\n{\n  set_80_5d(self,\n    (size_t)0U,\n    (size_t)0U,\n    xor_constant_b0(index_c2_5d(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS.data[i]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n*/\nstatic KRML_MUSTINLINE void keccakf1600_80_5d(Eurydice_arr_c40 *self)\n{\n  for (size_t i = (size_t)0U; i < (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    arr_50 t = theta_80_5d(self);\n    rho_80_5d(self, t);\n    pi_80_5d(self);\n    chi_80_5d(self);\n    iota_80_5d(self, i0);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 136\n- DELIM= 31\n*/\nstatic KRML_MUSTINLINE void\nabsorb_final_80_af(Eurydice_arr_c40 *self, Eurydice_arr_0b0 *input, size_t start, size_t len)\n{\n  load_last_8f_22(self, input, start, len);\n  keccakf1600_80_5d(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.store_block\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nstore_block_b2(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  size_t chunks = len / (size_t)32U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = chunks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      size_t rem = len % (size_t)32U;\n      if (rem > (size_t)0U)\n      {\n        size_t start0 = start + (size_t)32U * chunks;\n        Eurydice_arr_ec u8s = { .data = { 0U } };\n        size_t chunks8 = rem / (size_t)8U;\n        for (size_t i0 = (size_t)0U; i0 < chunks8; i0++)\n        {\n          size_t k = i0;\n          size_t i = ((size_t)4U * chunks + k) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + k) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____1 = Eurydice_array_to_slice_mut_01(&u8s);\n          mm256_storeu_si256_u8(uu____1, get_ij_5d(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n            uint8_t);\n        }\n        size_t rem8 = rem % (size_t)8U;\n        if (rem8 > (size_t)0U)\n        {\n          size_t i = ((size_t)4U * chunks + chunks8) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + chunks8) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____2 = Eurydice_array_to_slice_mut_01(&u8s);\n          mm256_storeu_si256_u8(uu____2, get_ij_5d(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = rem8 })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)8U,\n                  .end = (size_t)8U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)16U,\n                  .end = (size_t)16U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)24U,\n                  .end = (size_t)24U + rem8\n                }\n              )),\n            uint8_t);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t i0 = (size_t)4U * i / (size_t)5U;\n    size_t j0 = (size_t)4U * i % (size_t)5U;\n    size_t i1 = ((size_t)4U * i + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i + (size_t)3U) % (size_t)5U;\n    __m256i\n    v0l = mm256_permute2x128_si256(32, get_ij_5d(s, i0, j0)[0U], get_ij_5d(s, i2, j2)[0U], __m256i);\n    __m256i\n    v1h = mm256_permute2x128_si256(32, get_ij_5d(s, i1, j1)[0U], get_ij_5d(s, i3, j3)[0U], __m256i);\n    __m256i\n    v2l = mm256_permute2x128_si256(49, get_ij_5d(s, i0, j0)[0U], get_ij_5d(s, i2, j2)[0U], __m256i);\n    __m256i\n    v3h = mm256_permute2x128_si256(49, get_ij_5d(s, i1, j1)[0U], get_ij_5d(s, i3, j3)[0U], __m256i);\n    __m256i v0 = mm256_unpacklo_epi64(v0l, v1h);\n    __m256i v1 = mm256_unpackhi_epi64(v0l, v1h);\n    __m256i v2 = mm256_unpacklo_epi64(v2l, v3h);\n    __m256i v3 = mm256_unpackhi_epi64(v2l, v3h);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out0,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v0);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out1,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v1);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out2,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v2);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out3,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v3);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze4<core::core_arch::x86::__m256i> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.squeeze4_17\nwith const generics\n- RATE= 136\n*/\nstatic void\nsqueeze4_17_b2(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  store_block_b2(self, out0, out1, out2, out3, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<4usize> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_block_8f\nwith const generics\n- RATE= 136\n*/\nstatic void load_block_8f_b2(Eurydice_arr_c40 *self, Eurydice_arr_0b0 *input, size_t start)\n{\n  load_block_b2(self, input, start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nabsorb_block_80_48(Eurydice_arr_c40 *self, Eurydice_arr_0b0 *input, size_t start)\n{\n  load_block_8f_b2(self, input, start);\n  keccakf1600_80_5d(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.keccak4\nwith const generics\n- RATE= 136\n- DELIM= 31\n*/\nstatic KRML_MUSTINLINE void\nkeccak4_22(\n  Eurydice_arr_0b0 *data,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  Eurydice_arr_c40 s = new_80_5d();\n  size_t data_len = data->data->meta;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = data_len / (size_t)136U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      size_t rem = data_len % (size_t)136U;\n      absorb_final_80_af(&s, data, data_len - rem, rem);\n      size_t outlen = out0.meta;\n      size_t blocks = outlen / (size_t)136U;\n      size_t last = outlen - outlen % (size_t)136U;\n      if (blocks == (size_t)0U)\n      {\n        squeeze4_17_b2(&s, out0, out1, out2, out3, (size_t)0U, outlen);\n      }\n      else\n      {\n        squeeze4_17_b2(&s, out0, out1, out2, out3, (size_t)0U, (size_t)136U);\n        for (size_t i = (size_t)1U; i < blocks; i++)\n        {\n          size_t i0 = i;\n          keccakf1600_80_5d(&s);\n          squeeze4_17_b2(&s, out0, out1, out2, out3, i0 * (size_t)136U, (size_t)136U);\n        }\n        if (last < outlen)\n        {\n          keccakf1600_80_5d(&s);\n          squeeze4_17_b2(&s, out0, out1, out2, out3, last, outlen - last);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    absorb_block_80_48(&s, data, i * (size_t)136U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n Perform 4 SHAKE256 operations in parallel\n*/\nvoid\nlibcrux_sha3_avx2_x4_shake256(\n  Eurydice_mut_borrow_slice_u8 input0,\n  Eurydice_mut_borrow_slice_u8 input1,\n  Eurydice_mut_borrow_slice_u8 input2,\n  Eurydice_mut_borrow_slice_u8 input3,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_0b0 lvalue = { .data = { input0, input1, input2, input3 } };\n  keccak4_22(&lvalue, out0, out1, out2, out3);\n}\n\n/**\n Initialise the [`KeccakState`].\n*/\nEurydice_arr_c40 libcrux_sha3_avx2_x4_incremental_init(void)\n{\n  return new_80_5d();\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_block\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nload_block_60(Eurydice_arr_c40 *state, Eurydice_arr_0b0 *blocks, size_t offset)\n{\n  for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)32U; i++)\n  {\n    size_t i4 = i;\n    size_t start = offset + (size_t)32U * i4;\n    __m256i\n    v00 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_mut_c8(blocks->data[0U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v10 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_mut_c8(blocks->data[1U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v20 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_mut_c8(blocks->data[2U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i\n    v30 =\n      mm256_loadu_si256_u8(Eurydice_slice_subslice_mut_c8(blocks->data[3U],\n          (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)32U })));\n    __m256i v0l = mm256_unpacklo_epi64(v00, v10);\n    __m256i v1h = mm256_unpackhi_epi64(v00, v10);\n    __m256i v2l = mm256_unpacklo_epi64(v20, v30);\n    __m256i v3h = mm256_unpackhi_epi64(v20, v30);\n    __m256i v0 = mm256_permute2x128_si256(32, v0l, v2l, __m256i);\n    __m256i v1 = mm256_permute2x128_si256(32, v1h, v3h, __m256i);\n    __m256i v2 = mm256_permute2x128_si256(49, v0l, v2l, __m256i);\n    __m256i v3 = mm256_permute2x128_si256(49, v1h, v3h, __m256i);\n    size_t i0 = (size_t)4U * i4 / (size_t)5U;\n    size_t j0 = (size_t)4U * i4 % (size_t)5U;\n    size_t i1 = ((size_t)4U * i4 + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i4 + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i4 + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i4 + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i4 + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i4 + (size_t)3U) % (size_t)5U;\n    set_ij_5d(state, i0, j0, mm256_xor_si256(get_ij_5d(state, i0, j0)[0U], v0));\n    set_ij_5d(state, i1, j1, mm256_xor_si256(get_ij_5d(state, i1, j1)[0U], v1));\n    set_ij_5d(state, i2, j2, mm256_xor_si256(get_ij_5d(state, i2, j2)[0U], v2));\n    set_ij_5d(state, i3, j3, mm256_xor_si256(get_ij_5d(state, i3, j3)[0U], v3));\n  }\n  size_t rem = (size_t)168U % (size_t)32U;\n  size_t start = offset + (size_t)32U * ((size_t)168U / (size_t)32U);\n  Eurydice_arr_ec u8s = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n    Eurydice_slice_subslice_mut_c8(blocks->data[0U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n    Eurydice_slice_subslice_mut_c8(blocks->data[1U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n    Eurydice_slice_subslice_mut_c8(blocks->data[2U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n    Eurydice_slice_subslice_mut_c8(blocks->data[3U],\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + (size_t)8U })),\n    uint8_t);\n  __m256i\n  u =\n    mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n        &u8s,\n        uint8_t,\n        Eurydice_mut_borrow_slice_u8));\n  size_t i0 = (size_t)4U * ((size_t)168U / (size_t)32U) / (size_t)5U;\n  size_t j0 = (size_t)4U * ((size_t)168U / (size_t)32U) % (size_t)5U;\n  set_ij_5d(state, i0, j0, mm256_xor_si256(get_ij_5d(state, i0, j0)[0U], u));\n  if (rem == (size_t)16U)\n  {\n    Eurydice_arr_ec u8s0 = { .data = { 0U } };\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n      Eurydice_slice_subslice_mut_c8(blocks->data[0U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n      Eurydice_slice_subslice_mut_c8(blocks->data[1U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n      Eurydice_slice_subslice_mut_c8(blocks->data[2U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d44(&u8s0,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n      Eurydice_slice_subslice_mut_c8(blocks->data[3U],\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)8U,\n            .end = start + (size_t)16U\n          }\n        )),\n      uint8_t);\n    __m256i\n    u0 =\n      mm256_loadu_si256_u8(core_array___T__N___as_slice((size_t)32U,\n          &u8s0,\n          uint8_t,\n          Eurydice_mut_borrow_slice_u8));\n    size_t i = ((size_t)4U * ((size_t)168U / (size_t)32U) + (size_t)1U) / (size_t)5U;\n    size_t j = ((size_t)4U * ((size_t)168U / (size_t)32U) + (size_t)1U) % (size_t)5U;\n    set_ij_5d(state, i, j, mm256_xor_si256(get_ij_5d(state, i, j)[0U], u0));\n  }\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nstatic KRML_MUSTINLINE void\nload_last_37(Eurydice_arr_c40 *state, Eurydice_arr_0b0 *blocks, size_t start, size_t len)\n{\n  Eurydice_arr_9c\n  buffers =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  KRML_MAYBE_FOR4(i,\n    (size_t)0U,\n    (size_t)4U,\n    (size_t)1U,\n    size_t i0 = i;\n    Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d41(&buffers.data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n      Eurydice_slice_subslice_mut_c8(blocks->data[i0],\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n      uint8_t);\n    buffers.data[i0].data[len] = 31U;\n    size_t uu____0 = i0;\n    size_t uu____1 = (size_t)168U - (size_t)1U;\n    buffers.data[uu____0].data[uu____1] = (uint32_t)buffers.data[uu____0].data[uu____1] | 128U;);\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_0b0\n  lvalue =\n    {\n      .data = {\n        Eurydice_array_to_slice_mut_2c(buffers.data),\n        Eurydice_array_to_slice_mut_2c(&buffers.data[1U]),\n        Eurydice_array_to_slice_mut_2c(&buffers.data[2U]),\n        Eurydice_array_to_slice_mut_2c(&buffers.data[3U])\n      }\n    };\n  load_block_60(state, &lvalue, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<4usize> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.load_last_8f\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nstatic void\nload_last_8f_37(Eurydice_arr_c40 *self, Eurydice_arr_0b0 *input, size_t start, size_t len)\n{\n  load_last_37(self, input, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types core_core_arch_x86___m256i\nwith const generics\n- N= 4\n- RATE= 168\n- DELIM= 31\n*/\nstatic KRML_MUSTINLINE void\nabsorb_final_80_af0(Eurydice_arr_c40 *self, Eurydice_arr_0b0 *input, size_t start, size_t len)\n{\n  load_last_8f_37(self, input, start, len);\n  keccakf1600_80_5d(self);\n}\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_absorb_final(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 data0,\n  Eurydice_mut_borrow_slice_u8 data1,\n  Eurydice_mut_borrow_slice_u8 data2,\n  Eurydice_mut_borrow_slice_u8 data3\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_0b0 lvalue = { .data = { data0, data1, data2, data3 } };\n  absorb_final_80_af0(s, &lvalue, (size_t)0U, data0.meta);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.store_block\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nstore_block_60(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  size_t chunks = len / (size_t)32U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = chunks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      size_t rem = len % (size_t)32U;\n      if (rem > (size_t)0U)\n      {\n        size_t start0 = start + (size_t)32U * chunks;\n        Eurydice_arr_ec u8s = { .data = { 0U } };\n        size_t chunks8 = rem / (size_t)8U;\n        for (size_t i0 = (size_t)0U; i0 < chunks8; i0++)\n        {\n          size_t k = i0;\n          size_t i = ((size_t)4U * chunks + k) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + k) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____1 = Eurydice_array_to_slice_mut_01(&u8s);\n          mm256_storeu_si256_u8(uu____1, get_ij_5d(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)8U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)8U, .end = (size_t)16U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)16U, .end = (size_t)24U })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + (size_t)8U * k,\n                  .end = start0 + (size_t)8U * (k + (size_t)1U)\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)24U, .end = (size_t)32U })),\n            uint8_t);\n        }\n        size_t rem8 = rem % (size_t)8U;\n        if (rem8 > (size_t)0U)\n        {\n          size_t i = ((size_t)4U * chunks + chunks8) / (size_t)5U;\n          size_t j = ((size_t)4U * chunks + chunks8) % (size_t)5U;\n          Eurydice_mut_borrow_slice_u8 uu____2 = Eurydice_array_to_slice_mut_01(&u8s);\n          mm256_storeu_si256_u8(uu____2, get_ij_5d(s, i, j)[0U]);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out0,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = rem8 })),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out1,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)8U,\n                  .end = (size_t)8U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out2,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)16U,\n                  .end = (size_t)16U + rem8\n                }\n              )),\n            uint8_t);\n          Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out3,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = start0 + len - rem8,\n                  .end = start0 + len\n                }\n              )),\n            Eurydice_array_to_subslice_mut_d44(&u8s,\n              (\n                KRML_CLITERAL(core_ops_range_Range_87){\n                  .start = (size_t)24U,\n                  .end = (size_t)24U + rem8\n                }\n              )),\n            uint8_t);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t i0 = (size_t)4U * i / (size_t)5U;\n    size_t j0 = (size_t)4U * i % (size_t)5U;\n    size_t i1 = ((size_t)4U * i + (size_t)1U) / (size_t)5U;\n    size_t j1 = ((size_t)4U * i + (size_t)1U) % (size_t)5U;\n    size_t i2 = ((size_t)4U * i + (size_t)2U) / (size_t)5U;\n    size_t j2 = ((size_t)4U * i + (size_t)2U) % (size_t)5U;\n    size_t i3 = ((size_t)4U * i + (size_t)3U) / (size_t)5U;\n    size_t j3 = ((size_t)4U * i + (size_t)3U) % (size_t)5U;\n    __m256i\n    v0l = mm256_permute2x128_si256(32, get_ij_5d(s, i0, j0)[0U], get_ij_5d(s, i2, j2)[0U], __m256i);\n    __m256i\n    v1h = mm256_permute2x128_si256(32, get_ij_5d(s, i1, j1)[0U], get_ij_5d(s, i3, j3)[0U], __m256i);\n    __m256i\n    v2l = mm256_permute2x128_si256(49, get_ij_5d(s, i0, j0)[0U], get_ij_5d(s, i2, j2)[0U], __m256i);\n    __m256i\n    v3h = mm256_permute2x128_si256(49, get_ij_5d(s, i1, j1)[0U], get_ij_5d(s, i3, j3)[0U], __m256i);\n    __m256i v0 = mm256_unpacklo_epi64(v0l, v1h);\n    __m256i v1 = mm256_unpackhi_epi64(v0l, v1h);\n    __m256i v2 = mm256_unpacklo_epi64(v2l, v3h);\n    __m256i v3 = mm256_unpackhi_epi64(v2l, v3h);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out0,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v0);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out1,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v1);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out2,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v2);\n    mm256_storeu_si256_u8(Eurydice_slice_subslice_mut_c8(out3,\n        (\n          KRML_CLITERAL(core_ops_range_Range_87){\n            .start = start + (size_t)32U * i,\n            .end = start + (size_t)32U * (i + (size_t)1U)\n          }\n        )),\n      v3);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze4<core::core_arch::x86::__m256i> for libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.avx2.squeeze4_17\nwith const generics\n- RATE= 168\n*/\nstatic void\nsqueeze4_17_60(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start,\n  size_t len\n)\n{\n  store_block_60(self, out0, out1, out2, out3, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_first_three_blocks_81\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_first_three_blocks_81_60(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)0U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)168U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)2U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze three blocks\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_first_three_blocks_81_60(s, out0, out1, out2, out3);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_next_block_81\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_next_block_81_60(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start\n)\n{\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, start, (size_t)168U);\n}\n\n/**\n Squeeze another block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_next_block_81_60(s, out0, out1, out2, out3, (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_first_five_blocks_81\nwith const generics\n- RATE= 168\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_first_five_blocks_81_60(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)0U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)168U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)2U * (size_t)168U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)3U * (size_t)168U, (size_t)168U);\n  keccakf1600_80_5d(self);\n  squeeze4_17_60(self, out0, out1, out2, out3, (size_t)4U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze five blocks\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_first_five_blocks_81_60(s, out0, out1, out2, out3);\n}\n\n/**\n Absorb\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_avx2_x4_incremental_shake256_absorb_final(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 data0,\n  Eurydice_mut_borrow_slice_u8 data1,\n  Eurydice_mut_borrow_slice_u8 data2,\n  Eurydice_mut_borrow_slice_u8 data3\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_0b0 lvalue = { .data = { data0, data1, data2, data3 } };\n  absorb_final_80_af(s, &lvalue, (size_t)0U, data0.meta);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_first_block_81\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_first_block_81_b2(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze4_17_b2(self, out0, out1, out2, out3, (size_t)0U, (size_t)136U);\n}\n\n/**\n Squeeze block\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_first_block_81_b2(s, out0, out1, out2, out3);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<core::core_arch::x86::__m256i, 4usize>[core::marker::Sized<core::core_arch::x86::__m256i>, libcrux_sha3::simd::avx2::{libcrux_sha3::traits::KeccakItem<4usize> for core::core_arch::x86::__m256i}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.simd256.squeeze_next_block_81\nwith const generics\n- RATE= 136\n*/\nstatic KRML_MUSTINLINE void\nsqueeze_next_block_81_b2(\n  Eurydice_arr_c40 *self,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3,\n  size_t start\n)\n{\n  keccakf1600_80_5d(self);\n  squeeze4_17_b2(self, out0, out1, out2, out3, start, (size_t)136U);\n}\n\n/**\n Squeeze next block\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n)\n{\n  squeeze_next_block_81_b2(s, out0, out1, out2, out3, (size_t)0U);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_sha3_avx2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_sha3_avx2_H\n#define libcrux_sha3_avx2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"intrinsics/libcrux_intrinsics_avx2.h\"\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types core_core_arch_x86___m256i\nwith const generics\n- $25size_t\n*/\ntypedef struct Eurydice_arr_c40_s { __m256i data[25U]; } Eurydice_arr_c40;\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.KeccakState\nwith types core_core_arch_x86___m256i\nwith const generics\n- $4size_t\n*/\ntypedef Eurydice_arr_c40 libcrux_sha3_generic_keccak_KeccakState_7d;\n\n/**\n Perform 4 SHAKE256 operations in parallel\n*/\nvoid\nlibcrux_sha3_avx2_x4_shake256(\n  Eurydice_mut_borrow_slice_u8 input0,\n  Eurydice_mut_borrow_slice_u8 input1,\n  Eurydice_mut_borrow_slice_u8 input2,\n  Eurydice_mut_borrow_slice_u8 input3,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\ntypedef libcrux_sha3_generic_keccak_KeccakState_7d\nlibcrux_sha3_avx2_x4_incremental_KeccakState;\n\n/**\n Initialise the [`KeccakState`].\n*/\nEurydice_arr_c40 libcrux_sha3_avx2_x4_incremental_init(void);\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_absorb_final(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 data0,\n  Eurydice_mut_borrow_slice_u8 data1,\n  Eurydice_mut_borrow_slice_u8 data2,\n  Eurydice_mut_borrow_slice_u8 data3\n);\n\n/**\n Squeeze three blocks\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze another block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze five blocks\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_absorb_final(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 data0,\n  Eurydice_mut_borrow_slice_u8 data1,\n  Eurydice_mut_borrow_slice_u8 data2,\n  Eurydice_mut_borrow_slice_u8 data3\n);\n\n/**\n Squeeze block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n/**\n Squeeze next block\n*/\nvoid\nlibcrux_sha3_avx2_x4_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_c40 *s,\n  Eurydice_mut_borrow_slice_u8 out0,\n  Eurydice_mut_borrow_slice_u8 out1,\n  Eurydice_mut_borrow_slice_u8 out2,\n  Eurydice_mut_borrow_slice_u8 out3\n);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_sha3_avx2_H_DEFINED\n#endif /* libcrux_sha3_avx2_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_sha3_internal.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_sha3_internal_H\n#define libcrux_sha3_internal_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define libcrux_sha3_Algorithm_Sha224 1\n#define libcrux_sha3_Algorithm_Sha256 2\n#define libcrux_sha3_Algorithm_Sha384 3\n#define libcrux_sha3_Algorithm_Sha512 4\n\ntypedef uint8_t libcrux_sha3_Algorithm;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_sha3_internal_H_DEFINED\n#endif /* libcrux_sha3_internal_H */\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_sha3_portable.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"libcrux_sha3_portable.h\"\n\n#include \"libcrux_core.h\"\n#include \"internal/libcrux_core.h\"\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_zero_d2(void)\n{\n  return 0ULL;\n}\n\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__veor5q_u64(\n  uint64_t a,\n  uint64_t b,\n  uint64_t c,\n  uint64_t d,\n  uint64_t e\n)\n{\n  return (((a ^ b) ^ c) ^ d) ^ e;\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor5_d2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e)\n{\n  return libcrux_sha3_simd_portable__veor5q_u64(a, b, c, d, e);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_76(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)1);\n}\n\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vrax1q_u64(uint64_t a, uint64_t b)\n{\n  return a ^ libcrux_sha3_simd_portable_rotate_left_76(b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_rotate_left1_and_xor_d2(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vrax1q_u64(a, b);\n}\n\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable__vbcaxq_u64(uint64_t a, uint64_t b, uint64_t c)\n{\n  return a ^ (b & ~c);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_and_not_xor_d2(uint64_t a, uint64_t b, uint64_t c)\n{\n  return libcrux_sha3_simd_portable__vbcaxq_u64(a, b, c);\n}\n\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__veorq_n_u64(uint64_t a, uint64_t c)\n{\n  return a ^ c;\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_xor_constant_d2(uint64_t a, uint64_t c)\n{\n  return libcrux_sha3_simd_portable__veorq_n_u64(a, c);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_xor_d2(uint64_t a, uint64_t b)\n{\n  return a ^ b;\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.new_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE Eurydice_arr_7c libcrux_sha3_generic_keccak_new_80_71(void)\n{\n  Eurydice_arr_7c lit;\n  uint64_t repeat_expression[25U];\n  for (size_t i = (size_t)0U; i < (size_t)25U; i++)\n  {\n    repeat_expression[i] = libcrux_sha3_simd_portable_zero_d2();\n  }\n  memcpy(lit.data, repeat_expression, (size_t)25U * sizeof (uint64_t));\n  return lit;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.get_ij\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE uint64_t\n*libcrux_sha3_traits_get_ij_71(Eurydice_arr_7c *arr, size_t i, size_t j)\n{\n  return &arr->data[(size_t)5U * j + i];\n}\n\n/**\nA monomorphic instance of libcrux_sha3.traits.set_ij\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_traits_set_ij_71(Eurydice_arr_7c *arr, size_t i, size_t j, uint64_t value)\n{\n  arr->data[(size_t)5U * j + i] = value;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 72\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_c6(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_7c state_flat = { .data = { 0U } };\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = (size_t)72U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_71(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_mut_c8(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_e0((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 72\n- DELIMITER= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_dc(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_ab buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d4(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_mut_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)72U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_c6(state,\n    Eurydice_array_to_slice_mut_e2(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 72\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_dc(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_dc(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {core::ops::index::Index<(usize, usize), T> for libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.index_c2\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nuint64_t *libcrux_sha3_generic_keccak_index_c2_71(Eurydice_arr_7c *self, size_t_x2 index)\n{\n  return libcrux_sha3_traits_get_ij_71(self, index.fst, index.snd);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.theta_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE Eurydice_arr_84 libcrux_sha3_generic_keccak_theta_80_71(Eurydice_arr_7c *self)\n{\n  Eurydice_arr_84\n  c =\n    {\n      .data = {\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]),\n        libcrux_sha3_simd_portable_xor5_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U])\n      }\n    };\n  return\n    (\n      KRML_CLITERAL(Eurydice_arr_84){\n        .data = {\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)0U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)0U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)1U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)1U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)2U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)2U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)3U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)3U + (size_t)1U) % (size_t)5U]),\n          libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(c.data[((size_t)4U + (size_t)4U) %\n              (size_t)5U],\n            c.data[((size_t)4U + (size_t)1U) % (size_t)5U])\n        }\n      }\n    );\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.set_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid\nlibcrux_sha3_generic_keccak_set_80_71(Eurydice_arr_7c *self, size_t i, size_t j, uint64_t v)\n{\n  libcrux_sha3_traits_set_ij_71(self, i, j, v);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_02(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)36);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_02(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_02(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_02(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_02(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ac(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)3);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_ac(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_ac(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_ac(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_ac(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_020(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)41);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_020(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_020(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_020(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_020(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_a9(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)18);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_a9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_a9(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_a9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_a9(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_0_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_0_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_02(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_ac(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_020(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_a9(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U],\n      t.data[0U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_76(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_76(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_76(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_76(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_58(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)44);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_58(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_58(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_58(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_58(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_e0(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)10);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_e0(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_e0(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_e0(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_e0(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_63(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)45);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_63(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_63(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_63(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_63(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_6a(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)2);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_6a(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_6a(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_6a(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_6a(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_1_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_1_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_76(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_58(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_e0(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_63(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)1U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_6a(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U],\n      t.data[1U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ab(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)62);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_ab(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_ab(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_ab(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_ab(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_5b(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)6);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_5b(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_5b(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_5b(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_5b(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_6f(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)43);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_6f(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_6f(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_6f(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_6f(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_62(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)15);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_62(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_62(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_62(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_62(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_23(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)61);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_23(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_23(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_23(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_23(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_2_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_2_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_ab(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_5b(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_6f(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_62(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)2U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_23(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U],\n      t.data[2U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_37(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)28);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_37(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_37(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_37(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_37(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_bb(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)55);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_bb(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_bb(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_bb(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_bb(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_b9(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)25);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_b9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_b9(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_b9(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_b9(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_54(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)21);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_54(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_54(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_54(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_54(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_4c(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)56);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_4c(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_4c(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_4c(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_4c(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_3_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_3_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_37(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_bb(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_b9(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_54(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)3U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_4c(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U],\n      t.data[3U]));\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_ce(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)27);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_ce(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_ce(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_ce(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_ce(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_77(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)20);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_77(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_77(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_77(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_77(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_25(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)39);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_25(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_25(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_25(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_25(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_af(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)8);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_af(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_af(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_af(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_af(a, b);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable_rotate_left_fd(uint64_t x)\n{\n  return core_num__u64__rotate_left(x, (uint32_t)14);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nKRML_MUSTINLINE uint64_t libcrux_sha3_simd_portable__vxarq_u64_fd(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable_rotate_left_fd(a ^ b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nKRML_MUSTINLINE uint64_t\nlibcrux_sha3_simd_portable_xor_and_rotate_d2_fd(uint64_t a, uint64_t b)\n{\n  return libcrux_sha3_simd_portable__vxarq_u64_fd(a, b);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_4_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_4_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_ce(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_77(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_25(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_af(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)4U,\n    libcrux_sha3_simd_portable_xor_and_rotate_d2_fd(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U],\n      t.data[4U]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_rho_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t)\n{\n  libcrux_sha3_generic_keccak_rho_0_80_71(self, t);\n  libcrux_sha3_generic_keccak_rho_1_80_71(self, t);\n  libcrux_sha3_generic_keccak_rho_2_80_71(self, t);\n  libcrux_sha3_generic_keccak_rho_3_80_71(self, t);\n  libcrux_sha3_generic_keccak_rho_4_80_71(self, t);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_0_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_0_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)0U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)2U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_1_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_1_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)1U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)1U, .snd = (size_t)3U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_2_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_2_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)2U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)2U, .snd = (size_t)4U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_3_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_3_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)1U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)3U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)3U, .snd = (size_t)0U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_4_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_pi_4_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)4U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)1U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)2U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)2U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)0U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)3U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)3U }))[0U]);\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)4U,\n    (size_t)4U,\n    libcrux_sha3_generic_keccak_index_c2_71(&old,\n      (KRML_CLITERAL(size_t_x2){ .fst = (size_t)4U, .snd = (size_t)1U }))[0U]);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_pi_80_71(Eurydice_arr_7c *self)\n{\n  Eurydice_arr_7c old = self[0U];\n  libcrux_sha3_generic_keccak_pi_0_80_71(self, old);\n  libcrux_sha3_generic_keccak_pi_1_80_71(self, old);\n  libcrux_sha3_generic_keccak_pi_2_80_71(self, old);\n  libcrux_sha3_generic_keccak_pi_3_80_71(self, old);\n  libcrux_sha3_generic_keccak_pi_4_80_71(self, old);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.chi_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_chi_80_71(Eurydice_arr_7c *self)\n{\n  Eurydice_arr_7c old = self[0U];\n  KRML_MAYBE_FOR5(i0,\n    (size_t)0U,\n    (size_t)5U,\n    (size_t)1U,\n    size_t i1 = i0;\n    KRML_MAYBE_FOR5(i,\n      (size_t)0U,\n      (size_t)5U,\n      (size_t)1U,\n      size_t j = i;\n      libcrux_sha3_generic_keccak_set_80_71(self,\n        i1,\n        j,\n        libcrux_sha3_simd_portable_and_not_xor_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = j }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)2U) % (size_t)5U }))[0U],\n          libcrux_sha3_generic_keccak_index_c2_71(&old,\n            (KRML_CLITERAL(size_t_x2){ .fst = i1, .snd = (j + (size_t)1U) % (size_t)5U }))[0U]));););\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.iota_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_iota_80_71(Eurydice_arr_7c *self, size_t i)\n{\n  libcrux_sha3_generic_keccak_set_80_71(self,\n    (size_t)0U,\n    (size_t)0U,\n    libcrux_sha3_simd_portable_xor_constant_d2(libcrux_sha3_generic_keccak_index_c2_71(self,\n        (KRML_CLITERAL(size_t_x2){ .fst = (size_t)0U, .snd = (size_t)0U }))[0U],\n      LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS.data[i]));\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nKRML_MUSTINLINE void libcrux_sha3_generic_keccak_keccakf1600_80_71(Eurydice_arr_7c *self)\n{\n  for (size_t i = (size_t)0U; i < (size_t)24U; i++)\n  {\n    size_t i0 = i;\n    Eurydice_arr_84 t = libcrux_sha3_generic_keccak_theta_80_71(self);\n    libcrux_sha3_generic_keccak_rho_80_71(self, t);\n    libcrux_sha3_generic_keccak_pi_80_71(self);\n    libcrux_sha3_generic_keccak_chi_80_71(self);\n    libcrux_sha3_generic_keccak_iota_80_71(self, i0);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 72\n- DELIM= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_dc(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 72\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_c6(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_mut_6e(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_subslice_to_mut_21(&bytes, remaining), uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_c6(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_c6(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_c6(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_c6(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 72\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_e9(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_c6(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 72\n- DELIM= 6\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_dc(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)72U;\n  size_t input_rem = input_len % (size_t)72U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_69 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd(&s, &lvalue, input_len - input_rem, input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)72U;\n      size_t output_rem = output_len % (size_t)72U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, (size_t)0U, (size_t)72U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, i0 * (size_t)72U, (size_t)72U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_c6(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_69 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e9(&s, &lvalue, i * (size_t)72U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHA3 512 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha512(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_dc(data, digest);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_b2(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_7c state_flat = { .data = { 0U } };\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = (size_t)136U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_71(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_mut_c8(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_e0((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_22(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_ff buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d40(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_mut_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)136U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_b2(state,\n    Eurydice_array_to_slice_mut_58(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 136\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_22(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_22(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n- DELIM= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd0(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_22(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_b2(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_mut_6e(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_subslice_to_mut_21(&bytes, remaining), uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_b2(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_b2(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_b2(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_b2(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_e90(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_b2(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 136\n- DELIM= 6\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_22(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)136U;\n  size_t input_rem = input_len % (size_t)136U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_69 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd0(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)136U;\n      size_t output_rem = output_len % (size_t)136U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, (size_t)136U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, i0 * (size_t)136U, (size_t)136U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_69 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e90(&s, &lvalue, i * (size_t)136U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHA3 256 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha256(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_22(data, digest);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_220(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_ff buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d40(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_mut_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 31U;\n  size_t uu____0 = (size_t)136U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_b2(state,\n    Eurydice_array_to_slice_mut_58(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_220(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_220(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n- DELIM= 31\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd1(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_220(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 136\n- DELIM= 31\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_220(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)136U;\n  size_t input_rem = input_len % (size_t)136U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_69 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd1(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)136U;\n      size_t output_rem = output_len % (size_t)136U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, (size_t)0U, (size_t)136U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, i0 * (size_t)136U, (size_t)136U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_b2(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_69 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e90(&s, &lvalue, i * (size_t)136U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHAKE256 implementation.\n*/\nvoid\nlibcrux_sha3_portable_shake256(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_220(data, digest);\n}\n\n/**\n Create a new SHAKE-128 state object.\n*/\nEurydice_arr_7c libcrux_sha3_portable_incremental_shake128_init(void)\n{\n  return libcrux_sha3_generic_keccak_new_80_71();\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_60(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_7c state_flat = { .data = { 0U } };\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = (size_t)168U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_71(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_mut_c8(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_e0((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_37(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_c5 buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d41(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_mut_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 31U;\n  size_t uu____0 = (size_t)168U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_60(state,\n    Eurydice_array_to_slice_mut_2c(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_37(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_37(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 168\n- DELIM= 31\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd2(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_37(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_absorb_final(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 data0\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_69 lvalue = { .data = { data0 } };\n  libcrux_sha3_generic_keccak_absorb_final_80_bd2(s, &lvalue, (size_t)0U, data0.meta);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_60(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_mut_6e(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_subslice_to_mut_21(&bytes, remaining), uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_60(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_three_blocks_b4\nwith const generics\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)0U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)2U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze three blocks\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_60(s, out0);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4\nwith const generics\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start\n)\n{\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, start, (size_t)168U);\n}\n\n/**\n Squeeze another block\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_60(s, out0, (size_t)0U);\n}\n\n/**\n Returns the output size of a digest.\n*/\nsize_t libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode)\n{\n  switch (mode)\n  {\n    case libcrux_sha3_Algorithm_Sha224:\n      {\n        break;\n      }\n    case libcrux_sha3_Algorithm_Sha256:\n      {\n        return LIBCRUX_SHA3_SHA3_256_DIGEST_SIZE;\n      }\n    case libcrux_sha3_Algorithm_Sha384:\n      {\n        return LIBCRUX_SHA3_SHA3_384_DIGEST_SIZE;\n      }\n    case libcrux_sha3_Algorithm_Sha512:\n      {\n        return LIBCRUX_SHA3_SHA3_512_DIGEST_SIZE;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  return LIBCRUX_SHA3_SHA3_224_DIGEST_SIZE;\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 144\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_9e(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_7c state_flat = { .data = { 0U } };\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = (size_t)144U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_71(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_mut_c8(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_e0((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 144\n- DELIMITER= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_3a(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_f4 buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d42(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_mut_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)144U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_9e(state,\n    Eurydice_array_to_slice_mut_38(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 144\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_3a(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_3a(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 144\n- DELIM= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd3(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_3a(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 144\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_9e(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_mut_6e(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_subslice_to_mut_21(&bytes, remaining), uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_9e(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_9e(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_9e(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_9e(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 144\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_e91(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_9e(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 144\n- DELIM= 6\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_3a(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)144U;\n  size_t input_rem = input_len % (size_t)144U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_69 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd3(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)144U;\n      size_t output_rem = output_len % (size_t)144U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, (size_t)0U, (size_t)144U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, i0 * (size_t)144U, (size_t)144U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_9e(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_69 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e91(&s, &lvalue, i * (size_t)144U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHA3 224 implementation.\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_sha224(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_3a(data, digest);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 104\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_block_53(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start\n)\n{\n  Eurydice_arr_7c state_flat = { .data = { 0U } };\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){\n          .start = (size_t)0U,\n          .end = (size_t)104U / (size_t)8U\n        }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++)\n      {\n        size_t i0 = i;\n        libcrux_sha3_traits_set_ij_71(state,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U,\n          libcrux_sha3_traits_get_ij_71(state, i0 / (size_t)5U, i0 % (size_t)5U)[0U] ^\n            state_flat.data[i0]);\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    size_t offset = start + (size_t)8U * i;\n    Eurydice_array_u8x8 arr;\n    memcpy(arr.data,\n      Eurydice_slice_subslice_mut_c8(blocks,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = offset, .end = offset + (size_t)8U })).ptr,\n      (size_t)8U * sizeof (uint8_t));\n    Eurydice_array_u8x8\n    uu____1 =\n      core_result_unwrap_26_e0((\n          KRML_CLITERAL(core_result_Result_8e){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n        ));\n    state_flat.data[i] = core_num__u64__from_le_bytes(uu____1);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 104\n- DELIMITER= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_load_last_dc0(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n)\n{\n  Eurydice_arr_c4 buffer = { .data = { 0U } };\n  Eurydice_slice_copy(Eurydice_array_to_subslice_mut_d43(&buffer,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = len })),\n    Eurydice_slice_subslice_mut_c8(blocks,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = start, .end = start + len })),\n    uint8_t);\n  buffer.data[len] = 6U;\n  size_t uu____0 = (size_t)104U - (size_t)1U;\n  buffer.data[uu____0] = (uint32_t)buffer.data[uu____0] | 128U;\n  libcrux_sha3_simd_portable_load_block_53(state,\n    Eurydice_array_to_slice_mut_72(&buffer),\n    (size_t)0U);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 104\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_dc0(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_dc0(self, input->data[0U], start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 104\n- DELIM= 6\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_final_80_bd4(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_load_last_a1_dc0(self, input, start, len);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 104\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_simd_portable_store_block_53(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  size_t octets = len / (size_t)8U;\n  for (size_t i = (size_t)0U; i < octets; i++)\n  {\n    size_t i0 = i;\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          i0 / (size_t)5U,\n          i0 % (size_t)5U)[0U]);\n    size_t out_pos = start + (size_t)8U * i0;\n    Eurydice_slice_copy(Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + (size_t)8U })),\n      Eurydice_array_to_slice_mut_6e(&bytes),\n      uint8_t);\n  }\n  size_t remaining = len % (size_t)8U;\n  if (remaining > (size_t)0U)\n  {\n    Eurydice_array_u8x8\n    bytes =\n      core_num__u64__to_le_bytes(libcrux_sha3_traits_get_ij_71(s,\n          octets / (size_t)5U,\n          octets % (size_t)5U)[0U]);\n    size_t out_pos = start + len - remaining;\n    Eurydice_mut_borrow_slice_u8\n    uu____0 =\n      Eurydice_slice_subslice_mut_c8(out,\n        (KRML_CLITERAL(core_ops_range_Range_87){ .start = out_pos, .end = out_pos + remaining }));\n    Eurydice_slice_copy(uu____0, Eurydice_array_to_subslice_to_mut_21(&bytes, remaining), uint8_t);\n  }\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_53(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n)\n{\n  libcrux_sha3_simd_portable_store_block_53(self, out, start, len);\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_53(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_53(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 104\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_e92(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_53(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 104\n- DELIM= 6\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_dc0(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)104U;\n  size_t input_rem = input_len % (size_t)104U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_69 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd4(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)104U;\n      size_t output_rem = output_len % (size_t)104U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, (size_t)0U, (size_t)104U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, i0 * (size_t)104U, (size_t)104U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_53(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_69 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e92(&s, &lvalue, i * (size_t)104U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHA3 384 implementation.\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_sha384(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_dc0(data, digest);\n}\n\n/**\n SHA3 224\n\n Preconditions:\n - `digest.len() == 28`\n*/\nvoid\nlibcrux_sha3_sha224_ema(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 payload\n)\n{\n  libcrux_sha3_portable_sha224(digest, payload);\n}\n\n/**\n SHA3 224\n*/\nEurydice_arr_a2 libcrux_sha3_sha224(Eurydice_mut_borrow_slice_u8 data)\n{\n  Eurydice_arr_a2 out = { .data = { 0U } };\n  libcrux_sha3_sha224_ema(Eurydice_array_to_slice_mut_5e(&out), data);\n  return out;\n}\n\n/**\n SHA3 256\n*/\nvoid\nlibcrux_sha3_sha256_ema(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 payload\n)\n{\n  libcrux_sha3_portable_sha256(digest, payload);\n}\n\n/**\n SHA3 256\n*/\nEurydice_arr_ec libcrux_sha3_sha256(Eurydice_mut_borrow_slice_u8 data)\n{\n  Eurydice_arr_ec out = { .data = { 0U } };\n  libcrux_sha3_sha256_ema(Eurydice_array_to_slice_mut_01(&out), data);\n  return out;\n}\n\n/**\n SHA3 384\n*/\nvoid\nlibcrux_sha3_sha384_ema(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 payload\n)\n{\n  libcrux_sha3_portable_sha384(digest, payload);\n}\n\n/**\n SHA3 384\n*/\nEurydice_arr_65 libcrux_sha3_sha384(Eurydice_mut_borrow_slice_u8 data)\n{\n  Eurydice_arr_65 out = { .data = { 0U } };\n  libcrux_sha3_sha384_ema(Eurydice_array_to_slice_mut_9f(&out), data);\n  return out;\n}\n\n/**\n SHA3 512\n*/\nvoid\nlibcrux_sha3_sha512_ema(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 payload\n)\n{\n  libcrux_sha3_portable_sha512(digest, payload);\n}\n\n/**\n SHA3 512\n*/\nEurydice_arr_c7 libcrux_sha3_sha512(Eurydice_mut_borrow_slice_u8 data)\n{\n  Eurydice_arr_c7 out = { .data = { 0U } };\n  libcrux_sha3_sha512_ema(Eurydice_array_to_slice_mut_17(&out), data);\n  return out;\n}\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_60(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_60(self, input->data[0U], start);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_absorb_block_80_e93(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n)\n{\n  libcrux_sha3_simd_portable_load_block_a1_60(self, input, start);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n}\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 168\n- DELIM= 31\n*/\ninline void\nlibcrux_sha3_generic_keccak_portable_keccak1_37(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n)\n{\n  Eurydice_arr_7c s = libcrux_sha3_generic_keccak_new_80_71();\n  size_t input_len = input.meta;\n  size_t input_blocks = input_len / (size_t)168U;\n  size_t input_rem = input_len % (size_t)168U;\n  core_ops_range_Range_87\n  iter =\n    core_iter_traits_collect__core__iter__traits__collect__IntoIterator_Clause1_Item__I__for_I__into_iter((\n        KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = input_blocks }\n      ),\n      core_ops_range_Range_87,\n      size_t,\n      core_ops_range_Range_87);\n  while (true)\n  {\n    core_option_Option_87\n    uu____0 =\n      core_iter_range__core__iter__traits__iterator__Iterator_A__for_core__ops__range__Range_A__TraitClause_0___next(&iter,\n        size_t,\n        core_option_Option_87);\n    if (uu____0.tag == core_option_None)\n    {\n      /* original Rust expression is not an lvalue in C */\n      Eurydice_arr_69 lvalue = { .data = { input } };\n      libcrux_sha3_generic_keccak_absorb_final_80_bd2(&s,\n        &lvalue,\n        input_len - input_rem,\n        input_rem);\n      size_t output_len = output.meta;\n      size_t output_blocks = output_len / (size_t)168U;\n      size_t output_rem = output_len % (size_t)168U;\n      if (output_blocks == (size_t)0U)\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, (size_t)0U, output_len);\n      }\n      else\n      {\n        libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, (size_t)0U, (size_t)168U);\n        for (size_t i = (size_t)1U; i < output_blocks; i++)\n        {\n          size_t i0 = i;\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, i0 * (size_t)168U, (size_t)168U);\n        }\n        if (output_rem != (size_t)0U)\n        {\n          libcrux_sha3_generic_keccak_keccakf1600_80_71(&s);\n          libcrux_sha3_simd_portable_squeeze_9b_60(&s, output, output_len - output_rem, output_rem);\n        }\n      }\n      return;\n    }\n    size_t i = uu____0.f0;\n    /* original Rust expression is not an lvalue in C */\n    Eurydice_arr_69 lvalue = { .data = { input } };\n    libcrux_sha3_generic_keccak_absorb_block_80_e93(&s, &lvalue, i * (size_t)168U);\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n/**\n A portable SHAKE128 implementation.\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_shake128(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n)\n{\n  libcrux_sha3_generic_keccak_portable_keccak1_37(data, digest);\n}\n\n/**\n SHAKE 128\n\n Writes `out.len()` bytes.\n*/\nvoid\nlibcrux_sha3_shake128_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_mut_borrow_slice_u8 data)\n{\n  libcrux_sha3_portable_shake128(out, data);\n}\n\n/**\n SHAKE 256\n\n Writes `out.len()` bytes.\n*/\nvoid\nlibcrux_sha3_shake256_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_mut_borrow_slice_u8 data)\n{\n  libcrux_sha3_portable_shake256(out, data);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_five_blocks_b4\nwith const generics\n- RATE= 168\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)0U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)2U * (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)3U * (size_t)168U, (size_t)168U);\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_60(self, out, (size_t)4U * (size_t)168U, (size_t)168U);\n}\n\n/**\n Squeeze five blocks\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_60(s, out0);\n}\n\n/**\n Absorb some data for SHAKE-256 for the last time\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake256_absorb_final(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 data\n)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_69 lvalue = { .data = { data } };\n  libcrux_sha3_generic_keccak_absorb_final_80_bd1(s, &lvalue, (size_t)0U, data.meta);\n}\n\n/**\n Create a new SHAKE-256 state object.\n*/\nKRML_MUSTINLINE Eurydice_arr_7c libcrux_sha3_portable_incremental_shake256_init(void)\n{\n  return libcrux_sha3_generic_keccak_new_80_71();\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_block_b4\nwith const generics\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_b2(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_simd_portable_squeeze_9b_b2(self, out, (size_t)0U, (size_t)136U);\n}\n\n/**\n Squeeze the first SHAKE-256 block\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_b2(s, out);\n}\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4\nwith const generics\n- RATE= 136\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_b2(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start\n)\n{\n  libcrux_sha3_generic_keccak_keccakf1600_80_71(self);\n  libcrux_sha3_simd_portable_squeeze_9b_b2(self, out, start, (size_t)136U);\n}\n\n/**\n Squeeze the next SHAKE-256 block\n*/\nKRML_MUSTINLINE void\nlibcrux_sha3_portable_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out\n)\n{\n  libcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_b2(s, out, (size_t)0U);\n}\n\n"
  },
  {
    "path": "out/test-libcrux-ml-kem-no-const/libcrux_sha3_portable.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef libcrux_sha3_portable_H\n#define libcrux_sha3_portable_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"libcrux_core.h\"\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t libcrux_sha3_simd_portable_zero_d2(void);\n\nuint64_t\nlibcrux_sha3_simd_portable__veor5q_u64(\n  uint64_t a,\n  uint64_t b,\n  uint64_t c,\n  uint64_t d,\n  uint64_t e\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t\nlibcrux_sha3_simd_portable_xor5_d2(uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_76(uint64_t x);\n\nuint64_t libcrux_sha3_simd_portable__vrax1q_u64(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left1_and_xor_d2(uint64_t a, uint64_t b);\n\nuint64_t libcrux_sha3_simd_portable__vbcaxq_u64(uint64_t a, uint64_t b, uint64_t c);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t libcrux_sha3_simd_portable_and_not_xor_d2(uint64_t a, uint64_t b, uint64_t c);\n\nuint64_t libcrux_sha3_simd_portable__veorq_n_u64(uint64_t a, uint64_t c);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t libcrux_sha3_simd_portable_xor_constant_d2(uint64_t a, uint64_t c);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\nuint64_t libcrux_sha3_simd_portable_xor_d2(uint64_t a, uint64_t b);\n\n#define LIBCRUX_SHA3_GENERIC_KECCAK_CONSTANTS_ROUNDCONSTANTS ((KRML_CLITERAL(Eurydice_arr_22){ .data = { 1ULL, 32898ULL, 9223372036854808714ULL, 9223372039002292224ULL, 32907ULL, 2147483649ULL, 9223372039002292353ULL, 9223372036854808585ULL, 138ULL, 136ULL, 2147516425ULL, 2147483658ULL, 2147516555ULL, 9223372036854775947ULL, 9223372036854808713ULL, 9223372036854808579ULL, 9223372036854808578ULL, 9223372036854775936ULL, 32778ULL, 9223372039002259466ULL, 9223372039002292353ULL, 9223372036854808704ULL, 2147483649ULL, 9223372039002292232ULL } }))\n\ntypedef struct size_t_x2_s\n{\n  size_t fst;\n  size_t snd;\n}\nsize_t_x2;\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.KeccakState\nwith types uint64_t\nwith const generics\n- $1size_t\n*/\ntypedef Eurydice_arr_7c libcrux_sha3_generic_keccak_KeccakState_f3;\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.new_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nEurydice_arr_7c libcrux_sha3_generic_keccak_new_80_71(void);\n\n/**\nA monomorphic instance of libcrux_sha3.traits.get_ij\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nuint64_t *libcrux_sha3_traits_get_ij_71(Eurydice_arr_7c *arr, size_t i, size_t j);\n\n/**\nA monomorphic instance of libcrux_sha3.traits.set_ij\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_traits_set_ij_71(Eurydice_arr_7c *arr, size_t i, size_t j, uint64_t value);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_c6(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 72\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_dc(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 72\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_dc(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {core::ops::index::Index<(usize, usize), T> for libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.index_c2\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nuint64_t *libcrux_sha3_generic_keccak_index_c2_71(Eurydice_arr_7c *self, size_t_x2 index);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.theta_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nEurydice_arr_84 libcrux_sha3_generic_keccak_theta_80_71(Eurydice_arr_7c *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.set_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid\nlibcrux_sha3_generic_keccak_set_80_71(Eurydice_arr_7c *self, size_t i, size_t j, uint64_t v);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_02(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_02(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 36\n- RIGHT= 28\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_02(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_ac(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_ac(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 3\n- RIGHT= 61\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_ac(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_020(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_020(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 41\n- RIGHT= 23\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_020(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_a9(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_a9(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 18\n- RIGHT= 46\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_a9(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_0_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_0_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_76(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 1\n- RIGHT= 63\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_76(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_58(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_58(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 44\n- RIGHT= 20\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_58(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_e0(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_e0(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 10\n- RIGHT= 54\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_e0(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_63(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_63(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 45\n- RIGHT= 19\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_63(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_6a(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_6a(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 2\n- RIGHT= 62\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_6a(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_1_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_1_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_ab(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_ab(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 62\n- RIGHT= 2\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_ab(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_5b(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_5b(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 6\n- RIGHT= 58\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_5b(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_6f(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_6f(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 43\n- RIGHT= 21\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_6f(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_62(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_62(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 15\n- RIGHT= 49\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_62(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_23(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_23(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 61\n- RIGHT= 3\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_23(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_2_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_2_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_37(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_37(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 28\n- RIGHT= 36\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_37(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_bb(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_bb(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 55\n- RIGHT= 9\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_bb(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_b9(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_b9(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 25\n- RIGHT= 39\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_b9(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_54(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_54(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 21\n- RIGHT= 43\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_54(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_4c(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_4c(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 56\n- RIGHT= 8\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_4c(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_3_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_3_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_ce(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_ce(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 27\n- RIGHT= 37\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_ce(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_77(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_77(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 20\n- RIGHT= 44\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_77(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_25(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_25(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 39\n- RIGHT= 25\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_25(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_af(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_af(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 8\n- RIGHT= 56\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_af(uint64_t a, uint64_t b);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.rotate_left\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nuint64_t libcrux_sha3_simd_portable_rotate_left_fd(uint64_t x);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable._vxarq_u64\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nuint64_t libcrux_sha3_simd_portable__vxarq_u64_fd(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::traits::KeccakItem<1usize> for u64}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.xor_and_rotate_d2\nwith const generics\n- LEFT= 14\n- RIGHT= 50\n*/\nuint64_t libcrux_sha3_simd_portable_xor_and_rotate_d2_fd(uint64_t a, uint64_t b);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_4_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_4_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.rho_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_rho_80_71(Eurydice_arr_7c *self, Eurydice_arr_84 t);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_0_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_0_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_1_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_1_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_2_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_2_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_3_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_3_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_4_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_4_80_71(Eurydice_arr_7c *self, Eurydice_arr_7c old);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.pi_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_pi_80_71(Eurydice_arr_7c *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.chi_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_chi_80_71(Eurydice_arr_7c *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.iota_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_iota_80_71(Eurydice_arr_7c *self, size_t i);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600_80\nwith types uint64_t\nwith const generics\n- N= 1\n*/\nvoid libcrux_sha3_generic_keccak_keccakf1600_80_71(Eurydice_arr_7c *self);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 72\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_store_block_c6(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_c6(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_c6(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 72\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_e9(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 72\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_dc(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHA3 512 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha512(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_b2(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_22(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 136\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_22(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd0(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_store_block_b2(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_b2(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_b2(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_e90(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 136\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_22(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHA3 256 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha256(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_220(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 136\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_220(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 136\n- DELIM= 31\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd1(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 136\n- DELIM= 31\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_220(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHAKE256 implementation.\n*/\nvoid\nlibcrux_sha3_portable_shake256(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n);\n\ntypedef libcrux_sha3_generic_keccak_KeccakState_f3 libcrux_sha3_portable_KeccakState;\n\n/**\n Create a new SHAKE-128 state object.\n*/\nEurydice_arr_7c libcrux_sha3_portable_incremental_shake128_init(void);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_60(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_37(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 168\n- DELIMITER= 31\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_37(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 168\n- DELIM= 31\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd2(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\n Absorb\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_absorb_final(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 data0\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_store_block_60(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_three_blocks_b4\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_squeeze_first_three_blocks_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\n Squeeze three blocks\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start\n);\n\n/**\n Squeeze another block\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_squeeze_next_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n);\n\n#define libcrux_sha3_Algorithm_Sha224 1\n#define libcrux_sha3_Algorithm_Sha256 2\n#define libcrux_sha3_Algorithm_Sha384 3\n#define libcrux_sha3_Algorithm_Sha512 4\n\ntypedef uint8_t libcrux_sha3_Algorithm;\n\n#define LIBCRUX_SHA3_SHA3_224_DIGEST_SIZE ((size_t)28U)\n\n#define LIBCRUX_SHA3_SHA3_256_DIGEST_SIZE ((size_t)32U)\n\n#define LIBCRUX_SHA3_SHA3_384_DIGEST_SIZE ((size_t)48U)\n\n#define LIBCRUX_SHA3_SHA3_512_DIGEST_SIZE ((size_t)64U)\n\n/**\n Returns the output size of a digest.\n*/\nsize_t libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_9e(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 144\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_3a(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 144\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_3a(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 144\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd3(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_store_block_9e(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_9e(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_9e(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 144\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_e91(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 144\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_3a(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHA3 224 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha224(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_53(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last\nwith const generics\n- RATE= 104\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_dc0(\n  Eurydice_arr_7c *state,\n  Eurydice_mut_borrow_slice_u8 blocks,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_last_a1\nwith const generics\n- RATE= 104\n- DELIMITER= 6\n*/\nvoid\nlibcrux_sha3_simd_portable_load_last_a1_dc0(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 104\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_final_80_bd4(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start,\n  size_t len\n);\n\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.store_block\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_store_block_53(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Squeeze<u64> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.squeeze_9b\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_squeeze_9b_53(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start,\n  size_t len\n);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_53(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 104\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_e92(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 104\n- DELIM= 6\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_dc0(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHA3 384 implementation.\n*/\nvoid\nlibcrux_sha3_portable_sha384(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n);\n\n/**\n SHA3 224\n\n Preconditions:\n - `digest.len() == 28`\n*/\nvoid\nlibcrux_sha3_sha224_ema(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 payload\n);\n\n/**\n SHA3 224\n*/\nEurydice_arr_a2 libcrux_sha3_sha224(Eurydice_mut_borrow_slice_u8 data);\n\n/**\n SHA3 256\n*/\nvoid\nlibcrux_sha3_sha256_ema(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 payload\n);\n\n/**\n SHA3 256\n*/\nEurydice_arr_ec libcrux_sha3_sha256(Eurydice_mut_borrow_slice_u8 data);\n\n/**\n SHA3 384\n*/\nvoid\nlibcrux_sha3_sha384_ema(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 payload\n);\n\n/**\n SHA3 384\n*/\nEurydice_arr_65 libcrux_sha3_sha384(Eurydice_mut_borrow_slice_u8 data);\n\n/**\n SHA3 512\n*/\nvoid\nlibcrux_sha3_sha512_ema(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 payload\n);\n\n/**\n SHA3 512\n*/\nEurydice_arr_c7 libcrux_sha3_sha512(Eurydice_mut_borrow_slice_u8 data);\n\n/**\nThis function found in impl {libcrux_sha3::traits::Absorb<1usize> for libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.simd.portable.load_block_a1\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_simd_portable_load_block_a1_60(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<T, N>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.absorb_block_80\nwith types uint64_t\nwith const generics\n- N= 1\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_generic_keccak_absorb_block_80_e93(\n  Eurydice_arr_7c *self,\n  Eurydice_arr_69 *input,\n  size_t start\n);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.keccak1\nwith const generics\n- RATE= 168\n- DELIM= 31\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_keccak1_37(\n  Eurydice_mut_borrow_slice_u8 input,\n  Eurydice_mut_borrow_slice_u8 output\n);\n\n/**\n A portable SHAKE128 implementation.\n*/\nvoid\nlibcrux_sha3_portable_shake128(\n  Eurydice_mut_borrow_slice_u8 digest,\n  Eurydice_mut_borrow_slice_u8 data\n);\n\n/**\n SHAKE 128\n\n Writes `out.len()` bytes.\n*/\nvoid\nlibcrux_sha3_shake128_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_mut_borrow_slice_u8 data);\n\n/**\n SHAKE 256\n\n Writes `out.len()` bytes.\n*/\nvoid\nlibcrux_sha3_shake256_ema(Eurydice_mut_borrow_slice_u8 out, Eurydice_mut_borrow_slice_u8 data);\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.KeccakXofState\nwith types uint64_t\nwith const generics\n- $1size_t\n- $168size_t\n*/\ntypedef struct libcrux_sha3_generic_keccak_xof_KeccakXofState_55_s\n{\n  Eurydice_arr_7c inner;\n  Eurydice_arr_88 buf;\n  size_t buf_len;\n  bool sponge;\n}\nlibcrux_sha3_generic_keccak_xof_KeccakXofState_55;\n\ntypedef libcrux_sha3_generic_keccak_xof_KeccakXofState_55\nlibcrux_sha3_portable_incremental_Shake128Xof;\n\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.xof.KeccakXofState\nwith types uint64_t\nwith const generics\n- $1size_t\n- $136size_t\n*/\ntypedef struct libcrux_sha3_generic_keccak_xof_KeccakXofState_8d_s\n{\n  Eurydice_arr_7c inner;\n  Eurydice_arr_0b buf;\n  size_t buf_len;\n  bool sponge;\n}\nlibcrux_sha3_generic_keccak_xof_KeccakXofState_8d;\n\ntypedef libcrux_sha3_generic_keccak_xof_KeccakXofState_8d\nlibcrux_sha3_portable_incremental_Shake256Xof;\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_five_blocks_b4\nwith const generics\n- RATE= 168\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_squeeze_first_five_blocks_b4_60(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\n Squeeze five blocks\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out0\n);\n\n/**\n Absorb some data for SHAKE-256 for the last time\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake256_absorb_final(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 data\n);\n\n/**\n Create a new SHAKE-256 state object.\n*/\nEurydice_arr_7c libcrux_sha3_portable_incremental_shake256_init(void);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_first_block_b4\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_squeeze_first_block_b4_b2(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\n Squeeze the first SHAKE-256 block\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake256_squeeze_first_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\nThis function found in impl {libcrux_sha3::generic_keccak::KeccakState<u64, 1usize>[core::marker::Sized<u64>, libcrux_sha3::simd::portable::{libcrux_sha3::traits::KeccakItem<1usize> for u64}]}\n*/\n/**\nA monomorphic instance of libcrux_sha3.generic_keccak.portable.squeeze_next_block_b4\nwith const generics\n- RATE= 136\n*/\nvoid\nlibcrux_sha3_generic_keccak_portable_squeeze_next_block_b4_b2(\n  Eurydice_arr_7c *self,\n  Eurydice_mut_borrow_slice_u8 out,\n  size_t start\n);\n\n/**\n Squeeze the next SHAKE-256 block\n*/\nvoid\nlibcrux_sha3_portable_incremental_shake256_squeeze_next_block(\n  Eurydice_arr_7c *s,\n  Eurydice_mut_borrow_slice_u8 out\n);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_sha3_portable_KeccakState\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_4a_s { Eurydice_arr_7c data[4U]; } Eurydice_arr_4a;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_sha3_portable_KeccakState\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_1b_s { Eurydice_arr_7c data[3U]; } Eurydice_arr_1b;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types libcrux_sha3_portable_KeccakState\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_e3_s { Eurydice_arr_7c data[2U]; } Eurydice_arr_e3;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define libcrux_sha3_portable_H_DEFINED\n#endif /* libcrux_sha3_portable_H */\n"
  },
  {
    "path": "out/test-lvalue/lvalue.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"lvalue.h\"\n\nvoid lvalue_main(void)\n{\n\n}\n\nlvalue_Struct lvalue_use_struct(lvalue_ThreeWays s)\n{\n  bool uu____0 = false;\n  uu____0 = true;\n  lvalue_Struct uu____1;\n  if (s.tag == lvalue_Middle)\n  {\n    int32_t i = s.val.case_Middle;\n    uu____1 =\n      (\n        KRML_CLITERAL(lvalue_Struct){\n          .tag = lvalue_B,\n          .val = { .case_B = Eurydice_box_new(i, int32_t, int32_t *) }\n        }\n      );\n  }\n  else if (s.tag == lvalue_Left)\n  {\n    Eurydice_vec st = s.val.case_Left;\n    uu____1 = (KRML_CLITERAL(lvalue_Struct){ .tag = lvalue_A, .val = { .case_A = st } });\n  }\n  else\n  {\n    uu____1 = (KRML_CLITERAL(lvalue_Struct){ .tag = lvalue_C });\n  }\n  if (!(s.tag == lvalue_Left))\n  {\n    return uu____1;\n  }\n  return uu____1;\n}\n\n/**\nThis function found in impl {core::marker::Destruct for lvalue::ThreeWays}\n*/\nvoid lvalue_ThreeWays_drop_in_place_d9(lvalue_ThreeWays *_)\n{\n  lvalue_ThreeWays scrut = _[0U];\n  if (!(scrut.tag == lvalue_Middle))\n  {\n    if (scrut.tag == lvalue_Left)\n    {\n\n    }\n  }\n}\n\n"
  },
  {
    "path": "out/test-lvalue/lvalue.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef lvalue_H\n#define lvalue_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define lvalue_A 0\n#define lvalue_B 1\n#define lvalue_C 2\n\ntypedef uint8_t lvalue_Struct_tags;\n\ntypedef struct lvalue_Struct_s\n{\n  lvalue_Struct_tags tag;\n  union {\n    Eurydice_vec case_A;\n    int32_t *case_B;\n  }\n  val;\n}\nlvalue_Struct;\n\n#define lvalue_Middle 0\n#define lvalue_Left 1\n#define lvalue_Right 2\n\ntypedef uint8_t lvalue_ThreeWays_tags;\n\ntypedef struct lvalue_ThreeWays_s\n{\n  lvalue_ThreeWays_tags tag;\n  union {\n    int32_t case_Middle;\n    Eurydice_vec case_Left;\n    float64_t *case_Right;\n  }\n  val;\n}\nlvalue_ThreeWays;\n\nvoid lvalue_main(void);\n\nlvalue_Struct lvalue_use_struct(lvalue_ThreeWays s);\n\n/**\nThis function found in impl {core::marker::Destruct for lvalue::ThreeWays}\n*/\nvoid lvalue_ThreeWays_drop_in_place_d9(lvalue_ThreeWays *_);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define lvalue_H_DEFINED\n#endif /* lvalue_H */\n"
  },
  {
    "path": "out/test-mismatch/mismatch.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"mismatch.h\"\n\nvoid mismatch_main(void)\n{\n\n}\n\n"
  },
  {
    "path": "out/test-mismatch/mismatch.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef mismatch_H\n#define mismatch_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nvoid mismatch_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define mismatch_H_DEFINED\n#endif /* mismatch_H */\n"
  },
  {
    "path": "out/test-more_dst/more_dst.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"more_dst.h\"\n\ntypedef struct const_uint32_t__x2_s\n{\n  const uint32_t *fst;\n  const uint32_t *snd;\n}\nconst_uint32_t__x2;\n\nvoid more_dst_main(void)\n{\n  more_dst_TS1 x1 = { .foo = 0U, .data = { .data = { 0U } } };\n  Eurydice_dst_ref_shared_62 y1 = { .ptr = (const more_dst_T1 *)&x1, .meta = (size_t)4U };\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue0 = 0U;\n  const_uint32_t__x2 uu____0 = { .fst = &((const uint32_t *)y1.ptr->data)[1U], .snd = &lvalue0 };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  more_dst_TS2 x2 = { .foo = 0U, .data = x1 };\n  Eurydice_dst_ref_shared_21 y2 = { .ptr = (const more_dst_T2 *)&x2, .meta = (size_t)4U };\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue1 = 0U;\n  const_uint32_t__x2\n  uu____1 = { .fst = &((const uint32_t *)y2.ptr->data.data)[2U], .snd = &lvalue1 };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n  more_dst_TS3 x3 = { .foo = 0U, .data = x2 };\n  Eurydice_dst_ref_shared_a8 y3 = { .ptr = (const more_dst_T3 *)&x3, .meta = (size_t)4U };\n  /* original Rust expression is not an lvalue in C */\n  uint32_t lvalue = 0U;\n  const_uint32_t__x2\n  uu____2 = { .fst = &((const uint32_t *)y3.ptr->data.data.data)[3U], .snd = &lvalue };\n  EURYDICE_ASSERT(uu____2.fst[0U] == uu____2.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-more_dst/more_dst.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef more_dst_H\n#define more_dst_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\ntypedef struct more_dst_T1_s\n{\n  uint32_t foo;\n  uint32_t data[];\n}\nmore_dst_T1;\n\ntypedef struct more_dst_T2_s\n{\n  uint32_t foo;\n  more_dst_T1 data;\n}\nmore_dst_T2;\n\ntypedef struct more_dst_T3_s\n{\n  uint32_t foo;\n  more_dst_T2 data;\n}\nmore_dst_T3;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_e5_s { uint32_t data[4U]; } Eurydice_arr_e5;\n\ntypedef struct more_dst_TS1_s\n{\n  uint32_t foo;\n  Eurydice_arr_e5 data;\n}\nmore_dst_TS1;\n\ntypedef struct more_dst_TS2_s\n{\n  uint32_t foo;\n  more_dst_TS1 data;\n}\nmore_dst_TS2;\n\ntypedef struct more_dst_TS3_s\n{\n  uint32_t foo;\n  more_dst_TS2 data;\n}\nmore_dst_TS3;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types more_dst_T1, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_62_s\n{\n  const more_dst_T1 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_62;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types uint32_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_0c_s\n{\n  const uint32_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_0c;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types more_dst_T2, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_21_s\n{\n  const more_dst_T2 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_21;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types more_dst_T3, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_a8_s\n{\n  const more_dst_T3 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_a8;\n\nvoid more_dst_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define more_dst_H_DEFINED\n#endif /* more_dst_H */\n"
  },
  {
    "path": "out/test-more_primitive_types/more_primitive_types.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"more_primitive_types.h\"\n\nint32_t more_primitive_types_int128_operations(more_primitive_types_MorePrimitiveTypes *p)\n{\n  Eurydice_Int128_int128_t uu____0 = p->int128;\n  Eurydice_Int128_int128_t\n  uu____1 =\n    Eurydice_Int128_i128_mul(Eurydice_Int128_i128_from_bits(0x0ULL, 0x1ffffffffffffffULL),\n      Eurydice_Int128_i128_from_bits(0x0ULL, 0x1ULL));\n  Eurydice_Int128_int128_t\n  uu____2 =\n    Eurydice_Int128_i128_shl(Eurydice_Int128_i128_sub(Eurydice_Int128_i128_from_bits(0x0ULL,\n          0xffffffff1ULL),\n        uu____1),\n      10U);\n  p->int128 = Eurydice_Int128_i128_band(uu____0, uu____2);\n  Eurydice_Int128_uint128_t uu____3 = p->uint128;\n  Eurydice_Int128_uint128_t\n  uu____4 =\n    Eurydice_Int128_u128_sub(Eurydice_Int128_u128_from_bits(0x0ULL, 0xffffffff1ULL),\n      Eurydice_Int128_u128_from_bits(0x0ULL, 0x1fULL));\n  p->uint128 = Eurydice_Int128_u128_band(uu____3, uu____4);\n  Eurydice_Int128_uint128_t uu____5 = p->uint128;\n  Eurydice_Int128_uint128_t\n  uu____6 =\n    Eurydice_Int128_u128_shr(Eurydice_Int128_u128_from_bits(0x0ULL, 0x1ULL),\n      (uint32_t)uu____5);\n  Eurydice_Int128_uint128_t x = Eurydice_Int128_u128_shl(uu____6, (uint32_t)p->int128);\n  return (int32_t)x;\n}\n\nint32_t more_primitive_types_match_u128(const more_primitive_types_MorePrimitiveTypes *p)\n{\n  if\n  (\n    !(Eurydice_Int128_u128_eq(p->uint128, Eurydice_Int128_u128_from_bits(0x0ULL, 0xffffULL)) ||\n      Eurydice_Int128_u128_eq(p->uint128,\n        Eurydice_Int128_u128_from_bits(0x0ULL, 0xffffffffULL)))\n  )\n  {\n    if\n    (\n      Eurydice_Int128_u128_eq(p->uint128,\n        Eurydice_Int128_u128_from_bits(0xffffffffffffULL, 0xffffffffffffffffULL))\n    )\n    {\n      return 4;\n    }\n    else if\n    (\n      Eurydice_Int128_u128_eq(p->uint128,\n        Eurydice_Int128_u128_from_bits(0xffffffffffffffffULL, 0xffffffffffffffffULL))\n    )\n    {\n      return 5;\n    }\n    else\n    {\n      return 1;\n    }\n  }\n  return 3;\n}\n\nint32_t more_primitive_types_match_i128(const more_primitive_types_MorePrimitiveTypes *p)\n{\n  if\n  (\n    !(Eurydice_Int128_i128_eq(p->int128,\n      Eurydice_Int128_i128_from_bits(0xffffffffffffffffULL, 0xffffffffffff0001ULL))\n    ||\n      Eurydice_Int128_i128_eq(p->int128,\n        Eurydice_Int128_i128_from_bits(0xffffffffffffffffULL, 0xffffffff00000001ULL)))\n  )\n  {\n    if\n    (\n      Eurydice_Int128_i128_eq(p->int128,\n        Eurydice_Int128_i128_from_bits(0xffffffffffffffffULL, 0x1ULL))\n    )\n    {\n      return 4;\n    }\n    else if\n    (\n      Eurydice_Int128_i128_eq(p->int128,\n        Eurydice_Int128_i128_from_bits(0xfffff00000000000ULL, 0x1ULL))\n    )\n    {\n      return 5;\n    }\n    else\n    {\n      return 1;\n    }\n  }\n  return 3;\n}\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $6size_t\n*/\ntypedef struct arr_d7_s { uint8_t data[6U]; } arr_d7;\n\nvoid more_primitive_types_use_more_primitive_types(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  arr_d7 lvalue = { .data = { 97U, 104U, 101U, 108U, 108U, 111U } };\n  const arr_d7 *s = &lvalue;\n  more_primitive_types_MorePrimitiveTypes\n  p =\n    {\n      .int128 = Eurydice_Int128_i128_from_bits(0xfffff00000000000ULL, 0x1ULL),\n      .uint128 = Eurydice_Int128_u128_from_bits(0xffffffffffffULL, 0xffffffffffffffffULL),\n      .c = 97U\n    };\n  more_primitive_types_match_u128(&p);\n  more_primitive_types_match_i128(&p);\n  EURYDICE_ASSERT(p.c == s->data[0U], \"panic!\");\n}\n\nvoid more_primitive_types_main(void)\n{\n  more_primitive_types_use_more_primitive_types();\n}\n\nint32_t more_primitive_types_more_operations(more_primitive_types_MorePrimitiveTypes *p)\n{\n  int32_t result = 0;\n  Eurydice_Int128_int128_t uu____0 = p->int128;\n  result +=\n    (int32_t)Eurydice_Int128_i128_add(uu____0, Eurydice_Int128_i128_from_bits(0x0ULL, 0x1ULL));\n  Eurydice_Int128_uint128_t uu____1 = p->uint128;\n  result +=\n    (int32_t)Eurydice_Int128_u128_add(uu____1, Eurydice_Int128_u128_from_bits(0x0ULL, 0x1ULL));\n  Eurydice_Int128_int128_t uu____2 = p->int128;\n  result +=\n    (int32_t)Eurydice_Int128_i128_sub(uu____2, Eurydice_Int128_i128_from_bits(0x0ULL, 0x1ULL));\n  Eurydice_Int128_uint128_t uu____3 = p->uint128;\n  result +=\n    (int32_t)Eurydice_Int128_u128_sub(uu____3, Eurydice_Int128_u128_from_bits(0x0ULL, 0x1ULL));\n  Eurydice_Int128_int128_t uu____4 = p->int128;\n  result +=\n    (int32_t)Eurydice_Int128_i128_mul(uu____4, Eurydice_Int128_i128_from_bits(0x0ULL, 0x2ULL));\n  Eurydice_Int128_uint128_t uu____5 = p->uint128;\n  result +=\n    (int32_t)Eurydice_Int128_u128_mul(uu____5, Eurydice_Int128_u128_from_bits(0x0ULL, 0x2ULL));\n  Eurydice_Int128_int128_t uu____6 = p->int128;\n  result +=\n    (int32_t)Eurydice_Int128_i128_div(uu____6, Eurydice_Int128_i128_from_bits(0x0ULL, 0x2ULL));\n  Eurydice_Int128_uint128_t uu____7 = p->uint128;\n  result +=\n    (int32_t)Eurydice_Int128_u128_div(uu____7, Eurydice_Int128_u128_from_bits(0x0ULL, 0x2ULL));\n  Eurydice_Int128_int128_t uu____8 = p->int128;\n  result +=\n    (int32_t)Eurydice_Int128_i128_mod(uu____8, Eurydice_Int128_i128_from_bits(0x0ULL, 0x3ULL));\n  Eurydice_Int128_uint128_t uu____9 = p->uint128;\n  result +=\n    (int32_t)Eurydice_Int128_u128_mod(uu____9, Eurydice_Int128_u128_from_bits(0x0ULL, 0x3ULL));\n  result += (int32_t)Eurydice_Int128_i128_shl(p->int128, 1U);\n  result += (int32_t)Eurydice_Int128_u128_shl(p->uint128, 1U);\n  result += (int32_t)Eurydice_Int128_i128_shr(p->int128, 1U);\n  result += (int32_t)Eurydice_Int128_u128_shr(p->uint128, 1U);\n  Eurydice_Int128_int128_t uu____10 = p->int128;\n  result +=\n    (int32_t)Eurydice_Int128_i128_band(uu____10, Eurydice_Int128_i128_from_bits(0x0ULL, 0xffULL));\n  Eurydice_Int128_uint128_t uu____11 = p->uint128;\n  result +=\n    (int32_t)Eurydice_Int128_u128_band(uu____11, Eurydice_Int128_u128_from_bits(0x0ULL, 0xffULL));\n  Eurydice_Int128_int128_t uu____12 = p->int128;\n  result +=\n    (int32_t)Eurydice_Int128_i128_bor(uu____12, Eurydice_Int128_i128_from_bits(0x0ULL, 0xffULL));\n  Eurydice_Int128_uint128_t uu____13 = p->uint128;\n  result +=\n    (int32_t)Eurydice_Int128_u128_bor(uu____13, Eurydice_Int128_u128_from_bits(0x0ULL, 0xffULL));\n  Eurydice_Int128_int128_t uu____14 = p->int128;\n  result +=\n    (int32_t)Eurydice_Int128_i128_bxor(uu____14, Eurydice_Int128_i128_from_bits(0x0ULL, 0xffULL));\n  Eurydice_Int128_uint128_t uu____15 = p->uint128;\n  result +=\n    (int32_t)Eurydice_Int128_u128_bxor(uu____15, Eurydice_Int128_u128_from_bits(0x0ULL, 0xffULL));\n  Eurydice_Int128_int128_t uu____16 = p->int128;\n  if (Eurydice_Int128_i128_eq(uu____16, Eurydice_Int128_i128_from_bits(0x0ULL, 0x0ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_uint128_t uu____17 = p->uint128;\n  if (Eurydice_Int128_u128_eq(uu____17, Eurydice_Int128_u128_from_bits(0x0ULL, 0x0ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_int128_t uu____18 = p->int128;\n  if (Eurydice_Int128_i128_neq(uu____18, Eurydice_Int128_i128_from_bits(0x0ULL, 0x0ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_uint128_t uu____19 = p->uint128;\n  if (Eurydice_Int128_u128_neq(uu____19, Eurydice_Int128_u128_from_bits(0x0ULL, 0x0ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_int128_t uu____20 = p->int128;\n  if (Eurydice_Int128_i128_lt(uu____20, Eurydice_Int128_i128_from_bits(0x0ULL, 0x0ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_uint128_t uu____21 = p->uint128;\n  if (Eurydice_Int128_u128_lt(uu____21, Eurydice_Int128_u128_from_bits(0x0ULL, 0x1ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_int128_t uu____22 = p->int128;\n  if (Eurydice_Int128_i128_lte(uu____22, Eurydice_Int128_i128_from_bits(0x0ULL, 0x0ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_uint128_t uu____23 = p->uint128;\n  if (Eurydice_Int128_u128_lte(uu____23, Eurydice_Int128_u128_from_bits(0x0ULL, 0x1ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_int128_t uu____24 = p->int128;\n  if (Eurydice_Int128_i128_gt(uu____24, Eurydice_Int128_i128_from_bits(0x0ULL, 0x0ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_uint128_t uu____25 = p->uint128;\n  if (Eurydice_Int128_u128_gt(uu____25, Eurydice_Int128_u128_from_bits(0x0ULL, 0x1ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_int128_t uu____26 = p->int128;\n  if (Eurydice_Int128_i128_gte(uu____26, Eurydice_Int128_i128_from_bits(0x0ULL, 0x0ULL)))\n  {\n    result++;\n  }\n  Eurydice_Int128_uint128_t uu____27 = p->uint128;\n  if (Eurydice_Int128_u128_gte(uu____27, Eurydice_Int128_u128_from_bits(0x0ULL, 0x1ULL)))\n  {\n    result++;\n  }\n  result += (int32_t)Eurydice_Int128_i128_neg(p->int128);\n  result += (int32_t)Eurydice_Int128_i128_bnot(p->int128);\n  return result + (int32_t)Eurydice_Int128_u128_bnot(p->uint128);\n}\n\n"
  },
  {
    "path": "out/test-more_primitive_types/more_primitive_types.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef more_primitive_types_H\n#define more_primitive_types_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"eurydice/int128.h\"\n\ntypedef struct more_primitive_types_MorePrimitiveTypes_s\n{\n  Eurydice_Int128_int128_t int128;\n  Eurydice_Int128_uint128_t uint128;\n  uint32_t c;\n}\nmore_primitive_types_MorePrimitiveTypes;\n\nint32_t more_primitive_types_int128_operations(more_primitive_types_MorePrimitiveTypes *p);\n\nint32_t more_primitive_types_match_u128(const more_primitive_types_MorePrimitiveTypes *p);\n\nint32_t more_primitive_types_match_i128(const more_primitive_types_MorePrimitiveTypes *p);\n\nvoid more_primitive_types_use_more_primitive_types(void);\n\nvoid more_primitive_types_main(void);\n\nint32_t more_primitive_types_more_operations(more_primitive_types_MorePrimitiveTypes *p);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define more_primitive_types_H_DEFINED\n#endif /* more_primitive_types_H */\n"
  },
  {
    "path": "out/test-more_str/more_str.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"more_str.h\"\n\nvoid more_str_use_str(Eurydice_dst_ref_shared_0d s)\n{\n  EURYDICE_ASSERT(core_str__str__len(s) > (size_t)2U, \"panic!\");\n}\n\nvoid more_str_main(void)\n{\n  Eurydice_dst_ref_shared_0d eng = { .ptr = \"Hello, world!\", .meta = (size_t)13U };\n  Eurydice_dst_ref_shared_0d\n  chn = { .ptr = \"\\\\u{4f60}\\\\u{597d}\\\\u{ff0c}\\\\u{4e16}\\\\u{754c}\\\\u{ff01}\", .meta = (size_t)18U };\n  Eurydice_dst_ref_shared_0d\n  jpn =\n    {\n      .ptr = \"\\\\u{3053}\\\\u{3093}\\\\u{306b}\\\\u{3061}\\\\u{306f}\\\\u{4e16}\\\\u{754c}\\\\u{ff01}\",\n      .meta = (size_t)24U\n    };\n  Eurydice_dst_ref_shared_0d\n  mix =\n    {\n      .ptr = \"Hello, \\\\u{4f60}\\\\u{597d}\\\\u{ff0c}\\\\u{3053}\\\\u{3093}\\\\u{306b}\\\\u{3061}\\\\u{306f}\\\\u{4e16}\\\\u{754c}\\\\u{ff01}123Hi\",\n      .meta = (size_t)45U\n    };\n  more_str_use_str(eng);\n  more_str_use_str(chn);\n  more_str_use_str(jpn);\n  more_str_use_str(mix);\n}\n\n"
  },
  {
    "path": "out/test-more_str/more_str.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef more_str_H\n#define more_str_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types Eurydice_c_char_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_0d_s\n{\n  const Eurydice_c_char_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_0d;\n\nextern size_t core_str__str__len(Eurydice_dst_ref_shared_0d x0);\n\nvoid more_str_use_str(Eurydice_dst_ref_shared_0d s);\n\nvoid more_str_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define more_str_H_DEFINED\n#endif /* more_str_H */\n"
  },
  {
    "path": "out/test-names/names.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"names.h\"\n\nvoid names_f(uint32_t struct0)\n{\n\n}\n\nvoid names_main(void)\n{\n\n}\n\n"
  },
  {
    "path": "out/test-names/names.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef names_H\n#define names_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define names_Foo 0\n#define names_Bar 1\n\ntypedef uint8_t names_Baz_tags;\n\ntypedef struct names_Baz_s\n{\n  names_Baz_tags tag;\n  union {\n    struct\n    {\n      uint32_t f0;\n      uint32_t f1;\n    }\n    case_Foo;\n    uint32_t case_Bar;\n  }\n  val;\n}\nnames_Baz;\n\ntypedef struct names_Foo0_s\n{\n  uint32_t x;\n  uint32_t y;\n}\nnames_Foo0;\n\ntypedef struct names_Type_s\n{\n  int32_t switch0;\n  int32_t class0;\n}\nnames_Type;\n\nvoid names_f(uint32_t struct0);\n\nvoid names_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define names_H_DEFINED\n#endif /* names_H */\n"
  },
  {
    "path": "out/test-nested_arrays/nested_arrays.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"nested_arrays.h\"\n\ntypedef struct const_uint32_t__x2_s\n{\n  const uint32_t *fst;\n  const uint32_t *snd;\n}\nconst_uint32_t__x2;\n\nvoid nested_arrays_main(void)\n{\n  Eurydice_arr_9a keys;\n  Eurydice_arr_40 repeat_expression0[3U];\n  for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++)\n  {\n    Eurydice_arr_40 lit;\n    nested_arrays_Key repeat_expression[3U];\n    for (size_t i = (size_t)0U; i < (size_t)3U; i++)\n    {\n      repeat_expression[i] = NESTED_ARRAYS_ZERO;\n    }\n    memcpy(lit.data, repeat_expression, (size_t)3U * sizeof (nested_arrays_Key));\n    repeat_expression0[i0] = lit;\n  }\n  memcpy(keys.data, repeat_expression0, (size_t)3U * sizeof (Eurydice_arr_40));\n  for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++)\n  {\n    size_t i1 = i0;\n    for (size_t i2 = (size_t)0U; i2 < (size_t)3U; i2++)\n    {\n      size_t j = i2;\n      for (size_t i = (size_t)0U; i < (size_t)8U; i++)\n      {\n        size_t k = i;\n        uint32_t actual = keys.data[i1].data[j].data[k];\n        uint32_t expected = (uint32_t)k;\n        const_uint32_t__x2 uu____0 = { .fst = &actual, .snd = &expected };\n        EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n      }\n    }\n  }\n}\n\nEurydice_arr_a1 nested_arrays_test(void)\n{\n  Eurydice_arr_5c out0 = { .data = { 0U } };\n  Eurydice_arr_5c out1 = { .data = { 0U } };\n  Eurydice_arr_5c out2 = { .data = { 0U } };\n  Eurydice_arr_5c out3 = { .data = { 0U } };\n  return (KRML_CLITERAL(Eurydice_arr_a1){ .data = { out0, out1, out2, out3 } });\n}\n\n"
  },
  {
    "path": "out/test-nested_arrays/nested_arrays.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef nested_arrays_H\n#define nested_arrays_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern size_t core_clone_impls__core__clone__Clone_for_usize__clone(const size_t *x0);\n\n#define core_cmp_Ordering_Less -1\n#define core_cmp_Ordering_Equal 0\n#define core_cmp_Ordering_Greater 1\n\ntypedef int8_t core_cmp_Ordering;\n\nextern bool\ncore_cmp_impls__core__cmp__PartialEq_usize__for_usize__eq(const size_t *x0, const size_t *x1);\n\n#define core_option_None 0\n#define core_option_Some 1\n\ntypedef uint8_t core_option_Option_77_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types core_cmp_Ordering\n\n*/\ntypedef struct core_option_Option_77_s\n{\n  core_option_Option_77_tags tag;\n  core_cmp_Ordering f0;\n}\ncore_option_Option_77;\n\nextern core_option_Option_77\ncore_cmp_impls__core__cmp__PartialOrd_usize__for_usize__partial_cmp(\n  const size_t *x0,\n  const size_t *x1\n);\n\n/**\nA monomorphic instance of core.option.Option\nwith types size_t\n\n*/\ntypedef struct core_option_Option_87_s\n{\n  core_option_Option_77_tags tag;\n  size_t f0;\n}\ncore_option_Option_87;\n\nextern core_option_Option_87\ncore_iter_range__core__iter__range__Step_for_usize__backward_checked(size_t x0, size_t x1);\n\nextern core_option_Option_87\ncore_iter_range__core__iter__range__Step_for_usize__forward_checked(size_t x0, size_t x1);\n\n/**\nA monomorphic instance of n-tuple\nwith types size_t, core_option_Option_87\n\n*/\ntypedef struct tuple_21_s\n{\n  size_t fst;\n  core_option_Option_87 snd;\n}\ntuple_21;\n\nextern tuple_21\ncore_iter_range__core__iter__range__Step_for_usize__steps_between(\n  const size_t *x0,\n  const size_t *x1\n);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\ntypedef struct nested_arrays_Key_s { uint32_t data[8U]; } nested_arrays_Key;\n\n#define NESTED_ARRAYS_ZERO ((KRML_CLITERAL(nested_arrays_Key){ .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U } }))\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types nested_arrays_Key\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_40_s { nested_arrays_Key data[3U]; } Eurydice_arr_40;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_40\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_9a_s { Eurydice_arr_40 data[3U]; } Eurydice_arr_9a;\n\nvoid nested_arrays_main(void);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $200size_t\n*/\ntypedef struct Eurydice_arr_5c_s { uint8_t data[200U]; } Eurydice_arr_5c;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_5c\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_a1_s { Eurydice_arr_5c data[4U]; } Eurydice_arr_a1;\n\nEurydice_arr_a1 nested_arrays_test(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define nested_arrays_H_DEFINED\n#endif /* nested_arrays_H */\n"
  },
  {
    "path": "out/test-nested_arrays2/nested_arrays2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"nested_arrays2.h\"\n\nvoid nested_arrays2_main(void)\n{\n\n}\n\n"
  },
  {
    "path": "out/test-nested_arrays2/nested_arrays2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef nested_arrays2_H\n#define nested_arrays2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_82_s { uint8_t data[1U]; } Eurydice_arr_82;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_82\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_99_s { Eurydice_arr_82 data[1U]; } Eurydice_arr_99;\n\n#define NESTED_ARRAYS2_TABLE ((KRML_CLITERAL(Eurydice_arr_99){ .data = { { .data = { 1U } } } }))\n\nvoid nested_arrays2_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define nested_arrays2_H_DEFINED\n#endif /* nested_arrays2_H */\n"
  },
  {
    "path": "out/test-option/option.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"option.h\"\n\nvoid option_main(void)\n{\n\n}\n\n/**\n Converts from `&Option<T>` to `Option<&T>`.\n\n # Examples\n\n Calculates the length of an <code>Option<[String]></code> as an <code>Option<[usize]></code>\n without moving the [`String`]. The [`map`] method takes the `self` argument by value,\n consuming the original, so this technique uses `as_ref` to first take an `Option` to a\n reference to the value inside the original.\n\n [`map`]: Option::map\n [String]: ../../std/string/struct.String.html \"String\"\n [`String`]: ../../std/string/struct.String.html \"String\"\n\n ```\n let text: Option<String> = Some(\"Hello, world!\".to_string());\n // First, cast `Option<String>` to `Option<&String>` with `as_ref`,\n // then consume *that* with `map`, leaving `text` on the stack.\n let text_length: Option<usize> = text.as_ref().map(|s| s.len());\n println!(\"still can print text: {text:?}\");\n ```\n*/\n/**\nThis function found in impl {core::option::Option<T>[TraitClause@0]}\n*/\n/**\nA monomorphic instance of core.option.as_ref_cd\nwith types Eurydice_arr uint8_t[[$16size_t]]\n\n*/\ninline core_option_Option_4d core_option_as_ref_cd_4f(const core_option_Option_9e *self)\n{\n  if (!(self->tag == core_option_None))\n  {\n    const Eurydice_arr_b2 *x = &self->f0;\n    return (KRML_CLITERAL(core_option_Option_4d){ .tag = core_option_Some, .f0 = x });\n  }\n  return (KRML_CLITERAL(core_option_Option_4d){ .tag = core_option_None });\n}\n\n/**\nThis function found in impl {option::S}\n*/\ncore_option_Option_4d option_option_ref_b6(const core_option_Option_9e *self)\n{\n  return core_option_as_ref_cd_4f(self);\n}\n\n"
  },
  {
    "path": "out/test-option/option.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef option_H\n#define option_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_b2_s { uint8_t data[16U]; } Eurydice_arr_b2;\n\n#define core_option_None 0\n#define core_option_Some 1\n\ntypedef uint8_t core_option_Option_9e_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_arr_b2\n\n*/\ntypedef struct core_option_Option_9e_s\n{\n  core_option_Option_9e_tags tag;\n  Eurydice_arr_b2 f0;\n}\ncore_option_Option_9e;\n\ntypedef core_option_Option_9e option_S;\n\ntypedef Eurydice_arr_b2 option_Val;\n\nvoid option_main(void);\n\n/**\nA monomorphic instance of core.option.Option\nwith types const Eurydice_arr_b2*\n\n*/\ntypedef struct core_option_Option_4d_s\n{\n  core_option_Option_9e_tags tag;\n  const Eurydice_arr_b2 *f0;\n}\ncore_option_Option_4d;\n\n/**\n Converts from `&Option<T>` to `Option<&T>`.\n\n # Examples\n\n Calculates the length of an <code>Option<[String]></code> as an <code>Option<[usize]></code>\n without moving the [`String`]. The [`map`] method takes the `self` argument by value,\n consuming the original, so this technique uses `as_ref` to first take an `Option` to a\n reference to the value inside the original.\n\n [`map`]: Option::map\n [String]: ../../std/string/struct.String.html \"String\"\n [`String`]: ../../std/string/struct.String.html \"String\"\n\n ```\n let text: Option<String> = Some(\"Hello, world!\".to_string());\n // First, cast `Option<String>` to `Option<&String>` with `as_ref`,\n // then consume *that* with `map`, leaving `text` on the stack.\n let text_length: Option<usize> = text.as_ref().map(|s| s.len());\n println!(\"still can print text: {text:?}\");\n ```\n*/\n/**\nThis function found in impl {core::option::Option<T>[TraitClause@0]}\n*/\n/**\nA monomorphic instance of core.option.as_ref_cd\nwith types Eurydice_arr uint8_t[[$16size_t]]\n\n*/\ncore_option_Option_4d core_option_as_ref_cd_4f(const core_option_Option_9e *self);\n\n/**\nThis function found in impl {option::S}\n*/\ncore_option_Option_4d option_option_ref_b6(const core_option_Option_9e *self);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define option_H_DEFINED\n#endif /* option_H */\n"
  },
  {
    "path": "out/test-parentparent/parentparent.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"parentparent.h\"\n\nvoid parentparent_main(void)\n{\n\n}\n\n"
  },
  {
    "path": "out/test-parentparent/parentparent.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef parentparent_H\n#define parentparent_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nvoid parentparent_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define parentparent_H_DEFINED\n#endif /* parentparent_H */\n"
  },
  {
    "path": "out/test-partial_eq/partial_eq.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"partial_eq.h\"\n\n/**\nThis function found in impl {core::cmp::PartialEq<partial_eq::Enum> for partial_eq::Enum}\n*/\ninline bool partial_eq_eq_31(const partial_eq_Enum *self, const partial_eq_Enum *other)\n{\n  return true;\n}\n\ntypedef struct const_partial_eq_Enum__x2_s\n{\n  const partial_eq_Enum *fst;\n  const partial_eq_Enum *snd;\n}\nconst_partial_eq_Enum__x2;\n\ntypedef struct const_const_partial_eq_Enum___x2_s\n{\n  const partial_eq_Enum *const *fst;\n  const partial_eq_Enum *const *snd;\n}\nconst_const_partial_eq_Enum___x2;\n\nvoid partial_eq_main(void)\n{\n  partial_eq_Enum expected = partial_eq_Enum_A;\n  const_partial_eq_Enum__x2 uu____0 = { .fst = &expected, .snd = &expected };\n  EURYDICE_ASSERT(partial_eq_eq_31(uu____0.fst, uu____0.snd), \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  const partial_eq_Enum *lvalue0 = &expected;\n  /* original Rust expression is not an lvalue in C */\n  const partial_eq_Enum *lvalue = &expected;\n  const_const_partial_eq_Enum___x2 uu____1 = { .fst = &lvalue0, .snd = &lvalue };\n  EURYDICE_ASSERT(partial_eq_eq_31(uu____1.fst[0U], uu____1.snd[0U]), \"panic!\");\n}\n\n/**\nThis function found in impl {core::fmt::Debug for partial_eq::Enum}\n*/\ninline core_result_Result_10\npartial_eq_fmt_29(const partial_eq_Enum *self, core_fmt_Formatter *f)\n{\n  return\n    core_fmt__core__fmt__Formatter__a___write_str(f,\n      (KRML_CLITERAL(Eurydice_dst_ref_shared_0d){ .ptr = \"A\", .meta = (size_t)1U }));\n}\n\n"
  },
  {
    "path": "out/test-partial_eq/partial_eq.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef partial_eq_H\n#define partial_eq_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types Eurydice_c_char_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_0d_s\n{\n  const Eurydice_c_char_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_0d;\n\n#define core_result_Ok 0\n#define core_result_Err 1\n\ntypedef uint8_t core_result_Result_10;\n\nextern core_result_Result_10\ncore_fmt__core__fmt__Formatter__a___write_str(\n  core_fmt_Formatter *x0,\n  Eurydice_dst_ref_shared_0d x1\n);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n#define partial_eq_Enum_A 0\n\ntypedef uint8_t partial_eq_Enum;\n\n/**\nThis function found in impl {core::cmp::PartialEq<partial_eq::Enum> for partial_eq::Enum}\n*/\nbool partial_eq_eq_31(const partial_eq_Enum *self, const partial_eq_Enum *other);\n\nvoid partial_eq_main(void);\n\n/**\nThis function found in impl {core::fmt::Debug for partial_eq::Enum}\n*/\ncore_result_Result_10 partial_eq_fmt_29(const partial_eq_Enum *self, core_fmt_Formatter *f);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define partial_eq_H_DEFINED\n#endif /* partial_eq_H */\n"
  },
  {
    "path": "out/test-raw_pointers/raw_pointers.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"raw_pointers.h\"\n\ntypedef struct const_uint8_t__x2_s\n{\n  const uint8_t *fst;\n  const uint8_t *snd;\n}\nconst_uint8_t__x2;\n\nvoid raw_pointers_main(void)\n{\n  uint8_t x = 0U;\n  const uint8_t *px = (const uint8_t *)&x;\n  /* original Rust expression is not an lvalue in C */\n  uint8_t lvalue = 0U;\n  const_uint8_t__x2 uu____0 = { .fst = &lvalue, .snd = px };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-raw_pointers/raw_pointers.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef raw_pointers_H\n#define raw_pointers_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nvoid raw_pointers_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define raw_pointers_H_DEFINED\n#endif /* raw_pointers_H */\n"
  },
  {
    "path": "out/test-reborrow/reborrow.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"reborrow.h\"\n\ntypedef struct const_uint8_t__x2_s\n{\n  const uint8_t *fst;\n  const uint8_t *snd;\n}\nconst_uint8_t__x2;\n\nvoid reborrow_main(void)\n{\n  uint8_t x = 0U;\n  const uint8_t *px = (const uint8_t *)&x;\n  /* original Rust expression is not an lvalue in C */\n  uint8_t lvalue0 = 0U;\n  const_uint8_t__x2 uu____0 = { .fst = &lvalue0, .snd = px };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  const uint8_t *py = px;\n  /* original Rust expression is not an lvalue in C */\n  uint8_t lvalue1 = 0U;\n  const_uint8_t__x2 uu____1 = { .fst = &lvalue1, .snd = py };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n  uint8_t val = 0U;\n  uint8_t *b = Eurydice_box_new(val, uint8_t, uint8_t *);\n  const uint8_t *pb = b;\n  /* original Rust expression is not an lvalue in C */\n  uint8_t lvalue2 = 0U;\n  const_uint8_t__x2 uu____2 = { .fst = &lvalue2, .snd = pb };\n  EURYDICE_ASSERT(uu____2.fst[0U] == uu____2.snd[0U], \"panic!\");\n  const uint8_t *pb2 = pb;\n  /* original Rust expression is not an lvalue in C */\n  uint8_t lvalue = 0U;\n  const_uint8_t__x2 uu____3 = { .fst = &lvalue, .snd = pb2 };\n  EURYDICE_ASSERT(uu____3.fst[0U] == uu____3.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-reborrow/reborrow.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef reborrow_H\n#define reborrow_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nvoid reborrow_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define reborrow_H_DEFINED\n#endif /* reborrow_H */\n"
  },
  {
    "path": "out/test-recursion/recursion.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"recursion.h\"\n\nbool recursion_is_odd(int32_t y)\n{\n  if (!(y < 0))\n  {\n    switch (y)\n    {\n      case 0:\n        {\n          break;\n        }\n      case 1:\n        {\n          return true;\n        }\n      default:\n        {\n          int32_t y0 = y;\n          return recursion_is_odd(y0 - 2);\n        }\n    }\n    return false;\n  }\n  return recursion_is_odd(-y);\n}\n\nvoid recursion_main(void)\n{\n  EURYDICE_ASSERT(!!recursion_is_odd(5), \"assert failure\");\n}\n\n"
  },
  {
    "path": "out/test-recursion/recursion.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef recursion_H\n#define recursion_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nbool recursion_is_odd(int32_t y);\n\nvoid recursion_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define recursion_H_DEFINED\n#endif /* recursion_H */\n"
  },
  {
    "path": "out/test-repeat/repeat.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"repeat.h\"\n\nvoid repeat_main(void)\n{\n  if\n  (\n    !(REPEAT_C1.data[0U] + REPEAT_C2.data->data[0U] +\n      (uint32_t)REPEAT_REJECTION_SAMPLE_SHUFFLE_TABLE.data[255U].data[0U]\n    != 0U)\n  )\n  {\n    return;\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n"
  },
  {
    "path": "out/test-repeat/repeat.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef repeat_H\n#define repeat_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint32_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_d5_s { uint32_t data[1U]; } Eurydice_arr_d5;\n\n#define REPEAT_C1 ((KRML_CLITERAL(Eurydice_arr_d5){ .data = { 0U } }))\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_d5\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_aa_s { Eurydice_arr_d5 data[1U]; } Eurydice_arr_aa;\n\n#define REPEAT_C2 ((KRML_CLITERAL(Eurydice_arr_aa){ .data = { { .data = { 0U } } } }))\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $16size_t\n*/\ntypedef struct Eurydice_arr_b2_s { uint8_t data[16U]; } Eurydice_arr_b2;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_b2\nwith const generics\n- $256size_t\n*/\ntypedef struct Eurydice_arr_87_s { Eurydice_arr_b2 data[256U]; } Eurydice_arr_87;\n\n#define REPEAT_REJECTION_SAMPLE_SHUFFLE_TABLE ((KRML_CLITERAL(Eurydice_arr_87){ .data = { { .data = { 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U } }, { .data = { 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U } }, { .data = { 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U } }, { .data = { 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U } }, { .data = { 0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U } }, { .data = { 0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U } } } }))\n\nvoid repeat_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define repeat_H_DEFINED\n#endif /* repeat_H */\n"
  },
  {
    "path": "out/test-result/result.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"result.h\"\n\nresult_S result_ident(result_S x)\n{\n  return x;\n}\n\nresult_S result_mk1(uint32_t x, uint32_t y)\n{\n  return\n    (KRML_CLITERAL(result_S){ .tag = result_S1, .val = { .case_S1 = { .x1 = x, .y1 = y } } });\n}\n\nvoid result_main(void)\n{\n  result_S uu____0 = result_mk1(0U, 0U);\n  if (uu____0.tag == result_S1)\n  {\n    switch (uu____0.val.case_S1.x1)\n    {\n      case 0U:\n        {\n          switch (uu____0.val.case_S1.y1)\n          {\n            case 0U:\n              {\n                result_S\n                uu____1 =\n                  result_ident((\n                      KRML_CLITERAL(result_S){\n                        .tag = result_S2,\n                        .val = { .case_S2 = { .x2 = 0U, .y2 = 0U } }\n                      }\n                    ));\n                if (uu____1.tag == result_S2)\n                {\n                  switch (uu____1.val.case_S2.x2)\n                  {\n                    case 0U:\n                      {\n                        switch (uu____1.val.case_S2.y2)\n                        {\n                          case 0U:\n                            {\n                              return;\n                            }\n                          default:\n                            {\n\n                            }\n                        }\n                        break;\n                      }\n                    default:\n                      {\n\n                      }\n                  }\n                }\n                KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n                KRML_HOST_EXIT(255U);\n                break;\n              }\n            default:\n              {\n\n              }\n          }\n          break;\n        }\n      default:\n        {\n\n        }\n    }\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n"
  },
  {
    "path": "out/test-result/result.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef result_H\n#define result_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define result_S1 0\n#define result_S2 1\n\ntypedef uint8_t result_S_tags;\n\ntypedef struct result_S_s\n{\n  result_S_tags tag;\n  union {\n    struct\n    {\n      uint32_t x1;\n      uint32_t y1;\n    }\n    case_S1;\n    struct\n    {\n      uint32_t x2;\n      uint32_t y2;\n    }\n    case_S2;\n  }\n  val;\n}\nresult_S;\n\nresult_S result_ident(result_S x);\n\nresult_S result_mk1(uint32_t x, uint32_t y);\n\nvoid result_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define result_H_DEFINED\n#endif /* result_H */\n"
  },
  {
    "path": "out/test-signed_wrapping/signed_wrapping.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"signed_wrapping.h\"\n\ntypedef struct const_int8_t__x2_s\n{\n  const int8_t *fst;\n  const int8_t *snd;\n}\nconst_int8_t__x2;\n\ntypedef struct const_int16_t__x2_s\n{\n  const int16_t *fst;\n  const int16_t *snd;\n}\nconst_int16_t__x2;\n\ntypedef struct const_int32_t__x2_s\n{\n  const int32_t *fst;\n  const int32_t *snd;\n}\nconst_int32_t__x2;\n\ntypedef struct const_int64_t__x2_s\n{\n  const int64_t *fst;\n  const int64_t *snd;\n}\nconst_int64_t__x2;\n\nvoid signed_wrapping_main(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue0 = core_num__i8__wrapping_add(100, 27);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue1 = 127;\n  const_int8_t__x2 uu____0 = { .fst = &lvalue0, .snd = &lvalue1 };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue2 = core_num__i8__wrapping_add(100, 100);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue3 = -56;\n  const_int8_t__x2 uu____1 = { .fst = &lvalue2, .snd = &lvalue3 };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue4 = core_num__i8__wrapping_add(-128, -1);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue5 = 127;\n  const_int8_t__x2 uu____2 = { .fst = &lvalue4, .snd = &lvalue5 };\n  EURYDICE_ASSERT(uu____2.fst[0U] == uu____2.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue6 = core_num__i8__wrapping_sub(10, 20);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue7 = -10;\n  const_int8_t__x2 uu____3 = { .fst = &lvalue6, .snd = &lvalue7 };\n  EURYDICE_ASSERT(uu____3.fst[0U] == uu____3.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue8 = core_num__i8__wrapping_sub(-128, 1);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue9 = 127;\n  const_int8_t__x2 uu____4 = { .fst = &lvalue8, .snd = &lvalue9 };\n  EURYDICE_ASSERT(uu____4.fst[0U] == uu____4.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue10 = core_num__i8__wrapping_sub(127, -1);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue11 = -128;\n  const_int8_t__x2 uu____5 = { .fst = &lvalue10, .snd = &lvalue11 };\n  EURYDICE_ASSERT(uu____5.fst[0U] == uu____5.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue12 = core_num__i8__wrapping_mul(10, 5);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue13 = 50;\n  const_int8_t__x2 uu____6 = { .fst = &lvalue12, .snd = &lvalue13 };\n  EURYDICE_ASSERT(uu____6.fst[0U] == uu____6.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue14 = core_num__i8__wrapping_mul(100, 2);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue15 = -56;\n  const_int8_t__x2 uu____7 = { .fst = &lvalue14, .snd = &lvalue15 };\n  EURYDICE_ASSERT(uu____7.fst[0U] == uu____7.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue16 = core_num__i8__wrapping_mul(-128, -1);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue17 = -128;\n  const_int8_t__x2 uu____8 = { .fst = &lvalue16, .snd = &lvalue17 };\n  EURYDICE_ASSERT(uu____8.fst[0U] == uu____8.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue18 = core_num__i8__wrapping_neg(5);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue19 = -5;\n  const_int8_t__x2 uu____9 = { .fst = &lvalue18, .snd = &lvalue19 };\n  EURYDICE_ASSERT(uu____9.fst[0U] == uu____9.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue20 = core_num__i8__wrapping_neg(-128);\n  /* original Rust expression is not an lvalue in C */\n  int8_t lvalue21 = -128;\n  const_int8_t__x2 uu____10 = { .fst = &lvalue20, .snd = &lvalue21 };\n  EURYDICE_ASSERT(uu____10.fst[0U] == uu____10.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue22 = core_num__i16__wrapping_add(30000, 2768);\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue23 = -32768;\n  const_int16_t__x2 uu____11 = { .fst = &lvalue22, .snd = &lvalue23 };\n  EURYDICE_ASSERT(uu____11.fst[0U] == uu____11.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue24 = core_num__i16__wrapping_add(-32768, -1);\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue25 = 32767;\n  const_int16_t__x2 uu____12 = { .fst = &lvalue24, .snd = &lvalue25 };\n  EURYDICE_ASSERT(uu____12.fst[0U] == uu____12.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue26 = core_num__i16__wrapping_sub(-32768, 1);\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue27 = 32767;\n  const_int16_t__x2 uu____13 = { .fst = &lvalue26, .snd = &lvalue27 };\n  EURYDICE_ASSERT(uu____13.fst[0U] == uu____13.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue28 = core_num__i16__wrapping_sub(32767, -1);\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue29 = -32768;\n  const_int16_t__x2 uu____14 = { .fst = &lvalue28, .snd = &lvalue29 };\n  EURYDICE_ASSERT(uu____14.fst[0U] == uu____14.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue30 = core_num__i16__wrapping_mul(200, 200);\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue31 = -25536;\n  const_int16_t__x2 uu____15 = { .fst = &lvalue30, .snd = &lvalue31 };\n  EURYDICE_ASSERT(uu____15.fst[0U] == uu____15.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue32 = core_num__i16__wrapping_mul(-32768, -1);\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue33 = -32768;\n  const_int16_t__x2 uu____16 = { .fst = &lvalue32, .snd = &lvalue33 };\n  EURYDICE_ASSERT(uu____16.fst[0U] == uu____16.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue34 = core_num__i16__wrapping_neg(5);\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue35 = -5;\n  const_int16_t__x2 uu____17 = { .fst = &lvalue34, .snd = &lvalue35 };\n  EURYDICE_ASSERT(uu____17.fst[0U] == uu____17.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue36 = core_num__i16__wrapping_neg(-32768);\n  /* original Rust expression is not an lvalue in C */\n  int16_t lvalue37 = -32768;\n  const_int16_t__x2 uu____18 = { .fst = &lvalue36, .snd = &lvalue37 };\n  EURYDICE_ASSERT(uu____18.fst[0U] == uu____18.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue38 = core_num__i32__wrapping_add(2000000000, 2000000000);\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue39 = -294967296;\n  const_int32_t__x2 uu____19 = { .fst = &lvalue38, .snd = &lvalue39 };\n  EURYDICE_ASSERT(uu____19.fst[0U] == uu____19.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue40 = core_num__i32__wrapping_add(INT32_MIN, -1);\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue41 = 2147483647;\n  const_int32_t__x2 uu____20 = { .fst = &lvalue40, .snd = &lvalue41 };\n  EURYDICE_ASSERT(uu____20.fst[0U] == uu____20.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue42 = core_num__i32__wrapping_sub(INT32_MIN, 1);\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue43 = 2147483647;\n  const_int32_t__x2 uu____21 = { .fst = &lvalue42, .snd = &lvalue43 };\n  EURYDICE_ASSERT(uu____21.fst[0U] == uu____21.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue44 = core_num__i32__wrapping_sub(2147483647, -1);\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue45 = INT32_MIN;\n  const_int32_t__x2 uu____22 = { .fst = &lvalue44, .snd = &lvalue45 };\n  EURYDICE_ASSERT(uu____22.fst[0U] == uu____22.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue46 = core_num__i32__wrapping_mul(100000, 100000);\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue47 = 1410065408;\n  const_int32_t__x2 uu____23 = { .fst = &lvalue46, .snd = &lvalue47 };\n  EURYDICE_ASSERT(uu____23.fst[0U] == uu____23.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue48 = core_num__i32__wrapping_mul(INT32_MIN, -1);\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue49 = INT32_MIN;\n  const_int32_t__x2 uu____24 = { .fst = &lvalue48, .snd = &lvalue49 };\n  EURYDICE_ASSERT(uu____24.fst[0U] == uu____24.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue50 = core_num__i32__wrapping_neg(5);\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue51 = -5;\n  const_int32_t__x2 uu____25 = { .fst = &lvalue50, .snd = &lvalue51 };\n  EURYDICE_ASSERT(uu____25.fst[0U] == uu____25.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue52 = core_num__i32__wrapping_neg(INT32_MIN);\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue53 = INT32_MIN;\n  const_int32_t__x2 uu____26 = { .fst = &lvalue52, .snd = &lvalue53 };\n  EURYDICE_ASSERT(uu____26.fst[0U] == uu____26.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue54 = core_num__i64__wrapping_add(5000000000000000000LL, 5000000000000000000LL);\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue55 = -8446744073709551616LL;\n  const_int64_t__x2 uu____27 = { .fst = &lvalue54, .snd = &lvalue55 };\n  EURYDICE_ASSERT(uu____27.fst[0U] == uu____27.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue56 = core_num__i64__wrapping_add(INT64_MIN, -1LL);\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue57 = 9223372036854775807LL;\n  const_int64_t__x2 uu____28 = { .fst = &lvalue56, .snd = &lvalue57 };\n  EURYDICE_ASSERT(uu____28.fst[0U] == uu____28.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue58 = core_num__i64__wrapping_sub(INT64_MIN, 1LL);\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue59 = 9223372036854775807LL;\n  const_int64_t__x2 uu____29 = { .fst = &lvalue58, .snd = &lvalue59 };\n  EURYDICE_ASSERT(uu____29.fst[0U] == uu____29.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue60 = core_num__i64__wrapping_sub(9223372036854775807LL, -1LL);\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue61 = INT64_MIN;\n  const_int64_t__x2 uu____30 = { .fst = &lvalue60, .snd = &lvalue61 };\n  EURYDICE_ASSERT(uu____30.fst[0U] == uu____30.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue62 = core_num__i64__wrapping_mul(3000000000LL, 3000000000LL);\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue63 = 9000000000000000000LL;\n  const_int64_t__x2 uu____31 = { .fst = &lvalue62, .snd = &lvalue63 };\n  EURYDICE_ASSERT(uu____31.fst[0U] == uu____31.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue64 = core_num__i64__wrapping_mul(INT64_MIN, -1LL);\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue65 = INT64_MIN;\n  const_int64_t__x2 uu____32 = { .fst = &lvalue64, .snd = &lvalue65 };\n  EURYDICE_ASSERT(uu____32.fst[0U] == uu____32.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue66 = core_num__i64__wrapping_neg(5LL);\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue67 = -5LL;\n  const_int64_t__x2 uu____33 = { .fst = &lvalue66, .snd = &lvalue67 };\n  EURYDICE_ASSERT(uu____33.fst[0U] == uu____33.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue68 = core_num__i64__wrapping_neg(INT64_MIN);\n  /* original Rust expression is not an lvalue in C */\n  int64_t lvalue = INT64_MIN;\n  const_int64_t__x2 uu____34 = { .fst = &lvalue68, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____34.fst[0U] == uu____34.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-signed_wrapping/signed_wrapping.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef signed_wrapping_H\n#define signed_wrapping_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nstatic inline int16_t core_num__i16__wrapping_add(int16_t x0, int16_t x1);\n\nstatic inline int16_t core_num__i16__wrapping_mul(int16_t x0, int16_t x1);\n\nstatic inline int16_t core_num__i16__wrapping_neg(int16_t x0);\n\nstatic inline int16_t core_num__i16__wrapping_sub(int16_t x0, int16_t x1);\n\nstatic inline int32_t core_num__i32__wrapping_add(int32_t x0, int32_t x1);\n\nstatic inline int32_t core_num__i32__wrapping_mul(int32_t x0, int32_t x1);\n\nstatic inline int32_t core_num__i32__wrapping_neg(int32_t x0);\n\nstatic inline int32_t core_num__i32__wrapping_sub(int32_t x0, int32_t x1);\n\nstatic inline int64_t core_num__i64__wrapping_add(int64_t x0, int64_t x1);\n\nstatic inline int64_t core_num__i64__wrapping_mul(int64_t x0, int64_t x1);\n\nstatic inline int64_t core_num__i64__wrapping_neg(int64_t x0);\n\nstatic inline int64_t core_num__i64__wrapping_sub(int64_t x0, int64_t x1);\n\nstatic inline int8_t core_num__i8__wrapping_add(int8_t x0, int8_t x1);\n\nstatic inline int8_t core_num__i8__wrapping_mul(int8_t x0, int8_t x1);\n\nstatic inline int8_t core_num__i8__wrapping_neg(int8_t x0);\n\nstatic inline int8_t core_num__i8__wrapping_sub(int8_t x0, int8_t x1);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nvoid signed_wrapping_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define signed_wrapping_H_DEFINED\n#endif /* signed_wrapping_H */\n"
  },
  {
    "path": "out/test-slice_array/slice_array.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"slice_array.h\"\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types Eurydice_arr uint8_t[[$4size_t]]\nwith const generics\n- N= 4\n*/\nstatic Eurydice_dst_ref_mut_b5 array_to_slice_mut_4e(Eurydice_arr_ba *a)\n{\n  Eurydice_dst_ref_mut_b5 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\ntypedef struct const_uint8_t__x2_s\n{\n  const uint8_t *fst;\n  const uint8_t *snd;\n}\nconst_uint8_t__x2;\n\nvoid slice_array_f1(void)\n{\n  Eurydice_arr_ba\n  x =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_dst_ref_mut_b5\n  y0 =\n    Eurydice_slice_split_at_mut(array_to_slice_mut_4e(&x),\n      (size_t)2U,\n      Eurydice_array_u8x4,\n      Eurydice_dst_ref_mut_b5_x2).fst;\n  y0.ptr->data[0U] = 1U;\n  uint8_t actual = x.data->data[0U];\n  uint8_t expected = 1U;\n  const_uint8_t__x2 uu____0 = { .fst = &actual, .snd = &expected };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\nvoid slice_array_f2(void)\n{\n  Eurydice_arr_ba\n  x =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_dst_ref_mut_b5\n  y0 =\n    Eurydice_slice_split_at_mut(array_to_slice_mut_4e(&x),\n      (size_t)2U,\n      Eurydice_array_u8x4,\n      Eurydice_dst_ref_mut_b5_x2).fst;\n  Eurydice_array_u8x4 z = y0.ptr[0U];\n  z.data[0U] = 1U;\n  uint8_t actual = x.data->data[0U];\n  uint8_t expected = 0U;\n  const_uint8_t__x2 uu____0 = { .fst = &actual, .snd = &expected };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  /* original Rust expression is not an lvalue in C */\n  uint8_t lvalue = 1U;\n  const_uint8_t__x2 uu____1 = { .fst = z.data, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 4\n*/\nstatic Eurydice_borrow_slice_u8 array_to_slice_shared_98(const Eurydice_array_u8x4 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types Eurydice_arr uint8_t[[$4size_t]], core_array_TryFromSliceError\n\n*/\nstatic Eurydice_array_u8x4 unwrap_26_cc(core_result_Result_c7 self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nThis function found in impl {core::result::Result<T, E>[TraitClause@0, TraitClause@1]}\n*/\n/**\nA monomorphic instance of core.result.unwrap_26\nwith types const Eurydice_arr uint8_t[[$4size_t]]*, core_array_TryFromSliceError\n\n*/\nstatic const Eurydice_array_u8x4 *unwrap_26_7f(core_result_Result_90 self)\n{\n  if (self.tag == core_result_Ok)\n  {\n    return self.val.case_Ok;\n  }\n  else\n  {\n    KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"unwrap not Ok\");\n    KRML_HOST_EXIT(255U);\n  }\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_mut\nwith types uint8_t\nwith const generics\n- N= 4\n*/\nstatic Eurydice_mut_borrow_slice_u8 array_to_slice_mut_98(Eurydice_array_u8x4 *a)\n{\n  Eurydice_mut_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\nvoid slice_array_f3(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x4 lvalue0 = { .data = { 0U } };\n  Eurydice_borrow_slice_u8 x1 = array_to_slice_shared_98(&lvalue0);\n  Eurydice_array_u8x4 arr0;\n  memcpy(arr0.data, x1.ptr, (size_t)4U * sizeof (uint8_t));\n  Eurydice_array_u8x4\n  y1 =\n    unwrap_26_cc((\n        KRML_CLITERAL(core_result_Result_c7){ .tag = core_result_Ok, .val = { .case_Ok = arr0 } }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x4 lvalue1 = { .data = { 0U } };\n  Eurydice_borrow_slice_u8 x2 = array_to_slice_shared_98(&lvalue1);\n  Eurydice_borrow_slice_u8 uu____0 = x2;\n  Eurydice_array_u8x4 arr1;\n  memcpy(arr1.data, uu____0.ptr, (size_t)4U * sizeof (uint8_t));\n  const\n  Eurydice_array_u8x4\n  *y2 =\n    unwrap_26_7f(Eurydice_slice_to_ref_array2((size_t)4U,\n        uu____0,\n        &arr1,\n        Eurydice_borrow_slice_u8,\n        const Eurydice_array_u8x4 *,\n        core_array_TryFromSliceError,\n        core_result_Result_90));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x4 lvalue = { .data = { 0U } };\n  Eurydice_mut_borrow_slice_u8 x3 = array_to_slice_mut_98(&lvalue);\n  Eurydice_array_u8x4 arr;\n  memcpy(arr.data, x3.ptr, (size_t)4U * sizeof (uint8_t));\n  Eurydice_array_u8x4\n  y3 =\n    unwrap_26_cc((\n        KRML_CLITERAL(core_result_Result_c7){ .tag = core_result_Ok, .val = { .case_Ok = arr } }\n      ));\n  const_uint8_t__x2 uu____1 = { .fst = y1.data, .snd = y2->data };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n  const_uint8_t__x2 uu____2 = { .fst = y1.data, .snd = y3.data };\n  EURYDICE_ASSERT(uu____2.fst[0U] == uu____2.snd[0U], \"panic!\");\n}\n\n/**\nA monomorphic instance of slice_array.f4\nwith const generics\n- K= 4\n*/\nvoid slice_array_f4_23(void)\n{\n  Eurydice_arr_ba\n  x =\n    { .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } } };\n  Eurydice_dst_ref_mut_b5\n  y0 =\n    Eurydice_slice_split_at_mut(array_to_slice_mut_4e(&x),\n      (size_t)2U,\n      Eurydice_array_u8x4,\n      Eurydice_dst_ref_mut_b5_x2).fst;\n  y0.ptr->data[0U] = 1U;\n  uint8_t actual = x.data->data[0U];\n  uint8_t expected = 1U;\n  const_uint8_t__x2 uu____0 = { .fst = &actual, .snd = &expected };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n/**\nA monomorphic instance of slice_array.f5\nwith const generics\n- K= 4\n*/\nvoid slice_array_f5_23(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x4 lvalue0 = { .data = { 0U } };\n  Eurydice_borrow_slice_u8 x1 = array_to_slice_shared_98(&lvalue0);\n  Eurydice_array_u8x4 arr0;\n  memcpy(arr0.data, x1.ptr, (size_t)4U * sizeof (uint8_t));\n  Eurydice_array_u8x4\n  y1 =\n    unwrap_26_cc((\n        KRML_CLITERAL(core_result_Result_c7){ .tag = core_result_Ok, .val = { .case_Ok = arr0 } }\n      ));\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_array_u8x4 lvalue = { .data = { 0U } };\n  Eurydice_borrow_slice_u8\n  x2 = core_array___T__N___as_slice((size_t)4U, &lvalue, uint8_t, Eurydice_borrow_slice_u8);\n  Eurydice_borrow_slice_u8 uu____0 = x2;\n  Eurydice_array_u8x4 arr;\n  memcpy(arr.data, uu____0.ptr, (size_t)4U * sizeof (uint8_t));\n  const\n  Eurydice_array_u8x4\n  *y2 =\n    unwrap_26_7f(Eurydice_slice_to_ref_array2((size_t)4U,\n        uu____0,\n        &arr,\n        Eurydice_borrow_slice_u8,\n        const Eurydice_array_u8x4 *,\n        core_array_TryFromSliceError,\n        core_result_Result_90));\n  const_uint8_t__x2 uu____1 = { .fst = y1.data, .snd = y2->data };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n}\n\nvoid slice_array_main(void)\n{\n  slice_array_f1();\n  slice_array_f2();\n  slice_array_f3();\n  slice_array_f4_23();\n  slice_array_f5_23();\n}\n\n"
  },
  {
    "path": "out/test-slice_array/slice_array.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef slice_array_H\n#define slice_array_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define core_result_Ok 0\n#define core_result_Err 1\n\ntypedef uint8_t core_result_Result_10;\n\nextern core_result_Result_10\ncore_array__core__fmt__Debug_for_core__array__TryFromSliceError__fmt(\n  const core_array_TryFromSliceError *x0,\n  core_fmt_Formatter *x1\n);\n\nextern uint8_t core_clone_impls__core__clone__Clone_for_u8__clone(const uint8_t *x0);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types Eurydice_array_u8x4, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_mut_b5_s\n{\n  Eurydice_array_u8x4 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_mut_b5;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_array_u8x4\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_ba_s { Eurydice_array_u8x4 data[4U]; } Eurydice_arr_ba;\n\ntypedef struct Eurydice_dst_ref_mut_b5_x2_s\n{\n  Eurydice_dst_ref_mut_b5 fst;\n  Eurydice_dst_ref_mut_b5 snd;\n}\nEurydice_dst_ref_mut_b5_x2;\n\nvoid slice_array_f1(void);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types Eurydice_array_u8x4, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_b5_s\n{\n  const Eurydice_array_u8x4 *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_b5;\n\nvoid slice_array_f2(void);\n\n/**\nA monomorphic instance of core.result.Result\nwith types Eurydice_array_u8x4, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_c7_s\n{\n  core_result_Result_10 tag;\n  union {\n    Eurydice_array_u8x4 case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_c7;\n\n/**\nA monomorphic instance of core.result.Result\nwith types const Eurydice_array_u8x4*, core_array_TryFromSliceError\n\n*/\ntypedef struct core_result_Result_90_s\n{\n  core_result_Result_10 tag;\n  union {\n    const Eurydice_array_u8x4 *case_Ok;\n    core_array_TryFromSliceError case_Err;\n  }\n  val;\n}\ncore_result_Result_90;\n\nvoid slice_array_f3(void);\n\n/**\nA monomorphic instance of slice_array.f4\nwith const generics\n- K= 4\n*/\nvoid slice_array_f4_23(void);\n\n/**\nA monomorphic instance of slice_array.f5\nwith const generics\n- K= 4\n*/\nvoid slice_array_f5_23(void);\n\nvoid slice_array_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define slice_array_H_DEFINED\n#endif /* slice_array_H */\n"
  },
  {
    "path": "out/test-step_by/step_by.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"step_by.h\"\n\ntypedef struct const_int32_t__x2_s\n{\n  const int32_t *fst;\n  const int32_t *snd;\n}\nconst_int32_t__x2;\n\nvoid step_by_bar(void)\n{\n  int32_t i0 = 0;\n  for (int32_t i = 0; i < 24; i += (int32_t)(size_t)6U)\n  {\n    int32_t j = i;\n    i0 += j;\n  }\n  /* original Rust expression is not an lvalue in C */\n  int32_t lvalue = 36;\n  const_int32_t__x2 uu____0 = { .fst = &i0, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\nvoid step_by_main1(void)\n{\n  step_by_bar();\n  int32_t i0 = 0;\n  for (int32_t i = 0; i < 24; i += (int32_t)(size_t)6U)\n  {\n    int32_t j = i;\n    i0 += j;\n  }\n  for (int32_t i = 0; i < 24; i += (int32_t)(size_t)6U)\n  {\n    int32_t j = i;\n    i0 += j;\n  }\n}\n\nvoid step_by_main2(void)\n{\n  step_by_main1();\n  for (int32_t i = 0; i < 24; i += (int32_t)(size_t)6U)\n  {\n\n  }\n  for (int32_t i = 0; i < 24; i += (int32_t)(size_t)6U)\n  {\n\n  }\n}\n\nvoid step_by_main(void)\n{\n  step_by_main2();\n  for (int32_t i = 0; i < 24; i++)\n  {\n\n  }\n  for (int32_t i = 0; i < 24; i++)\n  {\n\n  }\n}\n\n"
  },
  {
    "path": "out/test-step_by/step_by.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef step_by_H\n#define step_by_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern int32_t core_clone_impls__core__clone__Clone_for_i32__clone(const int32_t *x0);\n\n#define core_cmp_Ordering_Less -1\n#define core_cmp_Ordering_Equal 0\n#define core_cmp_Ordering_Greater 1\n\ntypedef int8_t core_cmp_Ordering;\n\nextern bool\ncore_cmp_impls__core__cmp__PartialEq_i32__for_i32__eq(const int32_t *x0, const int32_t *x1);\n\n#define core_option_None 0\n#define core_option_Some 1\n\ntypedef uint8_t core_option_Option_77_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types core_cmp_Ordering\n\n*/\ntypedef struct core_option_Option_77_s\n{\n  core_option_Option_77_tags tag;\n  core_cmp_Ordering f0;\n}\ncore_option_Option_77;\n\nextern core_option_Option_77\ncore_cmp_impls__core__cmp__PartialOrd_i32__for_i32__partial_cmp(\n  const int32_t *x0,\n  const int32_t *x1\n);\n\n/**\nA monomorphic instance of core.option.Option\nwith types int32_t\n\n*/\ntypedef struct core_option_Option_9e_s\n{\n  core_option_Option_77_tags tag;\n  int32_t f0;\n}\ncore_option_Option_9e;\n\nextern core_option_Option_9e\ncore_iter_range__core__iter__range__Step_for_i32__backward_checked(int32_t x0, size_t x1);\n\nextern core_option_Option_9e\ncore_iter_range__core__iter__range__Step_for_i32__forward_checked(int32_t x0, size_t x1);\n\n/**\nA monomorphic instance of core.option.Option\nwith types size_t\n\n*/\ntypedef struct core_option_Option_87_s\n{\n  core_option_Option_77_tags tag;\n  size_t f0;\n}\ncore_option_Option_87;\n\n/**\nA monomorphic instance of n-tuple\nwith types size_t, core_option_Option_87\n\n*/\ntypedef struct tuple_21_s\n{\n  size_t fst;\n  core_option_Option_87 snd;\n}\ntuple_21;\n\nextern tuple_21\ncore_iter_range__core__iter__range__Step_for_i32__steps_between(\n  const int32_t *x0,\n  const int32_t *x1\n);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\nvoid step_by_bar(void);\n\nvoid step_by_main1(void);\n\nvoid step_by_main2(void);\n\nvoid step_by_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define step_by_H_DEFINED\n#endif /* step_by_H */\n"
  },
  {
    "path": "out/test-substr/substr.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"substr.h\"\n\n/**\nA monomorphic instance of Eurydice.dst_ref_mut\nwith types Eurydice_c_char_t, size_t\n\n*/\ntypedef struct dst_ref_mut_0d_s\n{\n  Eurydice_c_char_t *ptr;\n  size_t meta;\n}\ndst_ref_mut_0d;\n\n#define None 0\n#define Some 1\n\ntypedef uint8_t Option_9f_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_dst_ref_shared_0d\n\n*/\ntypedef struct Option_9f_s\n{\n  Option_9f_tags tag;\n  Eurydice_dst_ref_shared_0d f0;\n}\nOption_9f;\n\nextern Option_9f\ncore_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____get(\n  size_t x0,\n  Eurydice_dst_ref_shared_0d x1\n);\n\n/**\nA monomorphic instance of core.option.Option\nwith types Eurydice_dst_ref_mut_0d\n\n*/\ntypedef struct Option_c0_s\n{\n  Option_9f_tags tag;\n  dst_ref_mut_0d f0;\n}\nOption_c0;\n\nextern Option_c0\ncore_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____get_mut(\n  size_t x0,\n  dst_ref_mut_0d x1\n);\n\nextern Eurydice_dst_ref_shared_0d\ncore_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____get_unchecked(\n  size_t x0,\n  Eurydice_dst_ref_shared_0d x1\n);\n\nextern dst_ref_mut_0d\ncore_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____get_unchecked_mut(\n  size_t x0,\n  dst_ref_mut_0d x1\n);\n\nextern Eurydice_dst_ref_shared_0d\ncore_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____index(\n  size_t x0,\n  Eurydice_dst_ref_shared_0d x1\n);\n\nextern dst_ref_mut_0d\ncore_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____index_mut(\n  size_t x0,\n  dst_ref_mut_0d x1\n);\n\nvoid substr_main(void)\n{\n  Eurydice_dst_ref_shared_0d str = { .ptr = \"abc\", .meta = (size_t)3U };\n  Eurydice_dst_ref_shared_0d\n  take =\n    core_str_traits__core__ops__index__Index_I__Clause1_Output__for_str__index(core_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____get,\n      core_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____get_mut,\n      core_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____get_unchecked,\n      core_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____get_unchecked_mut,\n      core_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____index,\n      core_str_traits__core__slice__index__SliceIndex_str__str__for_core__ops__range__RangeFrom_usize__core__marker__Sized_usize____index_mut,\n      str,\n      (size_t)1U,\n      size_t,\n      Eurydice_c_char_t [],\n      Eurydice_dst_ref_shared_0d);\n  EURYDICE_ASSERT(core_str__str__len(take) == (size_t)2U, \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-substr/substr.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef substr_H\n#define substr_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"substr_stubs.h\"\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types Eurydice_c_char_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_0d_s\n{\n  const Eurydice_c_char_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_0d;\n\nextern size_t core_str__str__len(Eurydice_dst_ref_shared_0d x0);\n\nvoid substr_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define substr_H_DEFINED\n#endif /* substr_H */\n"
  },
  {
    "path": "out/test-symcrust/internal/Eurydice.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef internal_Eurydice_H\n#define internal_Eurydice_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern uint32_t Eurydice_min_u32(uint32_t x, uint32_t y);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define internal_Eurydice_H_DEFINED\n#endif /* internal_Eurydice_H */\n"
  },
  {
    "path": "out/test-symcrust/symcrust.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"symcrust.h\"\n\n#include \"internal/Eurydice.h\"\n\n/**\nA monomorphic instance of Eurydice.slice_subslice_mut\nwith types uint8_t, core_ops_range_Range size_t, Eurydice_derefed_slice uint8_t\n\n*/\nstatic Eurydice_mut_borrow_slice_u8\nslice_subslice_mut_c8(Eurydice_mut_borrow_slice_u8 s, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_mut_borrow_slice_u8){ .ptr = s.ptr + r.start, .meta = r.end - r.start }\n    );\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types uint8_t\nwith const generics\n- N= 4\n*/\nstatic Eurydice_borrow_slice_u8 array_to_slice_shared_98(const Eurydice_array_u8x4 *a)\n{\n  Eurydice_borrow_slice_u8 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)4U;\n  return lit;\n}\n\nvoid\nsymcrust_SymCrustMlKemPolyElementCompressAndEncode(\n  const Eurydice_arr_82 *coeffs,\n  uint32_t nBitsPerCoefficient,\n  Eurydice_mut_borrow_slice_u8 dst\n)\n{\n  uint64_t SYMCRYPT_MLKEM_COMPRESS_MULCONSTANT = 10321339ULL;\n  uint32_t SYMCRYPT_MLKEM_COMPRESS_SHIFTCONSTANT = 35U;\n  size_t cbDstWritten = (size_t)0U;\n  uint32_t accumulator = 0U;\n  uint32_t nBitsInAccumulator = 0U;\n  EURYDICE_ASSERT(nBitsPerCoefficient > 0U, \"panic!\");\n  EURYDICE_ASSERT(nBitsPerCoefficient <= 12U, \"panic!\");\n  EURYDICE_ASSERT((uint64_t)dst.meta == 256ULL * (uint64_t)nBitsPerCoefficient / 8ULL, \"panic!\");\n  for (size_t i = (size_t)0U; i < (size_t)256U; i++)\n  {\n    size_t i0 = i;\n    uint32_t nBitsInCoefficient = nBitsPerCoefficient;\n    uint32_t coefficient = (uint32_t)coeffs->data[i0];\n    if (nBitsPerCoefficient < 12U)\n    {\n      uint64_t multiplication = (uint64_t)coefficient * SYMCRYPT_MLKEM_COMPRESS_MULCONSTANT;\n      coefficient =\n        (uint32_t)(multiplication >>\n          (uint32_t)(SYMCRYPT_MLKEM_COMPRESS_SHIFTCONSTANT - (nBitsPerCoefficient + 1U)));\n      coefficient++;\n      coefficient >>= 1U;\n      coefficient &= ((1U << (uint32_t)nBitsPerCoefficient) - 1U);\n    }\n    while (nBitsInCoefficient > 0U)\n    {\n      uint32_t nBitsToEncode = Eurydice_min_u32(nBitsInCoefficient, 32U - nBitsInAccumulator);\n      uint32_t bitsToEncode = coefficient & ((1U << (uint32_t)nBitsToEncode) - 1U);\n      coefficient >>= (uint32_t)nBitsToEncode;\n      nBitsInCoefficient -= nBitsToEncode;\n      accumulator |= bitsToEncode << (uint32_t)nBitsInAccumulator;\n      nBitsInAccumulator += nBitsToEncode;\n      if (nBitsInAccumulator == 32U)\n      {\n        Eurydice_mut_borrow_slice_u8\n        uu____0 =\n          slice_subslice_mut_c8(dst,\n            (\n              KRML_CLITERAL(core_ops_range_Range_87){\n                .start = cbDstWritten,\n                .end = cbDstWritten + (size_t)4U\n              }\n            ));\n        /* original Rust expression is not an lvalue in C */\n        Eurydice_array_u8x4 lvalue = core_num__u32__to_le_bytes(accumulator);\n        Eurydice_slice_copy(uu____0, array_to_slice_shared_98(&lvalue), uint8_t);\n        cbDstWritten += (size_t)4U;\n        accumulator = 0U;\n        nBitsInAccumulator = 0U;\n      }\n    }\n  }\n}\n\nvoid symcrust_main(void)\n{\n\n}\n\n"
  },
  {
    "path": "out/test-symcrust/symcrust.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef symcrust_H\n#define symcrust_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern uint8_t core_clone_impls__core__clone__Clone_for_u8__clone(const uint8_t *x0);\n\nextern size_t core_clone_impls__core__clone__Clone_for_usize__clone(const size_t *x0);\n\n#define core_cmp_Ordering_Less -1\n#define core_cmp_Ordering_Equal 0\n#define core_cmp_Ordering_Greater 1\n\ntypedef int8_t core_cmp_Ordering;\n\nextern uint32_t core_cmp_impls__core__cmp__Ord_for_u32__min(uint32_t x0, uint32_t x1);\n\nextern bool\ncore_cmp_impls__core__cmp__PartialEq_usize__for_usize__eq(const size_t *x0, const size_t *x1);\n\n#define core_option_None 0\n#define core_option_Some 1\n\ntypedef uint8_t core_option_Option_77_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types core_cmp_Ordering\n\n*/\ntypedef struct core_option_Option_77_s\n{\n  core_option_Option_77_tags tag;\n  core_cmp_Ordering f0;\n}\ncore_option_Option_77;\n\nextern core_option_Option_77\ncore_cmp_impls__core__cmp__PartialOrd_usize__for_usize__partial_cmp(\n  const size_t *x0,\n  const size_t *x1\n);\n\nstatic inline uint32_t core_convert_num__core__convert__From_u16__for_u32__from(uint16_t x0);\n\nstatic inline uint64_t core_convert_num__core__convert__From_u32__for_u64__from(uint32_t x0);\n\n/**\nA monomorphic instance of core.option.Option\nwith types size_t\n\n*/\ntypedef struct core_option_Option_87_s\n{\n  core_option_Option_77_tags tag;\n  size_t f0;\n}\ncore_option_Option_87;\n\nextern core_option_Option_87\ncore_iter_range__core__iter__range__Step_for_usize__backward_checked(size_t x0, size_t x1);\n\nextern core_option_Option_87\ncore_iter_range__core__iter__range__Step_for_usize__forward_checked(size_t x0, size_t x1);\n\n/**\nA monomorphic instance of n-tuple\nwith types size_t, core_option_Option_87\n\n*/\ntypedef struct tuple_21_s\n{\n  size_t fst;\n  core_option_Option_87 snd;\n}\ntuple_21;\n\nextern tuple_21\ncore_iter_range__core__iter__range__Step_for_usize__steps_between(\n  const size_t *x0,\n  const size_t *x1\n);\n\nstatic inline Eurydice_array_u8x4 core_num__u32__to_le_bytes(uint32_t x0);\n\n/**\nA monomorphic instance of core.ops.range.Range\nwith types size_t\n\n*/\ntypedef struct core_ops_range_Range_87_s\n{\n  size_t start;\n  size_t end;\n}\ncore_ops_range_Range_87;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint16_t\nwith const generics\n- $256size_t\n*/\ntypedef struct Eurydice_arr_82_s { uint16_t data[256U]; } Eurydice_arr_82;\n\nvoid\nsymcrust_SymCrustMlKemPolyElementCompressAndEncode(\n  const Eurydice_arr_82 *coeffs,\n  uint32_t nBitsPerCoefficient,\n  Eurydice_mut_borrow_slice_u8 dst\n);\n\nvoid symcrust_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define symcrust_H_DEFINED\n#endif /* symcrust_H */\n"
  },
  {
    "path": "out/test-trait_generics/trait_generics.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"trait_generics.h\"\n\n/**\nThis function found in impl {trait_generics::MyFnOnce for trait_generics::Foo<K>}\n*/\n/**\nA monomorphic instance of trait_generics.call_once_a3\nwith const generics\n- K= 10\n*/\nuint32_t trait_generics_call_once_a3_55(void)\n{\n  return 0U;\n}\n\n/**\nA monomorphic instance of trait_generics.from_fn\nwith types trait_generics_Foo[[$10size_t]]\nwith const generics\n\n*/\nvoid trait_generics_from_fn_74(void)\n{\n  trait_generics_call_once_a3_55();\n}\n\nvoid trait_generics_main(void)\n{\n  trait_generics_from_fn_74();\n}\n\n"
  },
  {
    "path": "out/test-trait_generics/trait_generics.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef trait_generics_H\n#define trait_generics_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nThis function found in impl {trait_generics::MyFnOnce for trait_generics::Foo<K>}\n*/\n/**\nA monomorphic instance of trait_generics.call_once_a3\nwith const generics\n- K= 10\n*/\nuint32_t trait_generics_call_once_a3_55(void);\n\n/**\nA monomorphic instance of trait_generics.from_fn\nwith types trait_generics_Foo[[$10size_t]]\nwith const generics\n\n*/\nvoid trait_generics_from_fn_74(void);\n\nvoid trait_generics_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define trait_generics_H_DEFINED\n#endif /* trait_generics_H */\n"
  },
  {
    "path": "out/test-traits/traits.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"traits.h\"\n\n/**\nThis function found in impl {traits::ToInt for traits::Foo}\n*/\nuint32_t traits_to_int_ac(const traits_Foo *self)\n{\n  switch (self[0U])\n  {\n    case traits_Foo_Foo1:\n      {\n        break;\n      }\n    case traits_Foo_Foo2:\n      {\n        return 2U;\n      }\n    default:\n      {\n        KRML_HOST_EPRINTF(\"KaRaMeL incomplete match at %s:%d\\n\", __FILE__, __LINE__);\n        KRML_HOST_EXIT(253U);\n      }\n  }\n  return 1U;\n}\n\n/**\nThis function found in impl {traits::ToInt for &0 ([traits::Foo])}\n*/\nuint32_t traits_to_int_0f(const Eurydice_dst_ref_shared_42 *self)\n{\n  uint32_t uu____0 = traits_to_int_ac(&self->ptr[0U]);\n  return uu____0 * traits_to_int_ac(&self->ptr[1U]);\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_subslice_shared\nwith types traits_Foo, core_ops_range_Range size_t, Eurydice_derefed_slice traits_Foo\nwith const generics\n- N= 2\n*/\nstatic Eurydice_dst_ref_shared_42\narray_to_subslice_shared_7d(const Eurydice_arr_0e *a, core_ops_range_Range_87 r)\n{\n  return\n    (\n      KRML_CLITERAL(Eurydice_dst_ref_shared_42){ .ptr = a->data + r.start, .meta = r.end - r.start }\n    );\n}\n\nvoid traits_main(void)\n{\n  Eurydice_arr_0e foos = { .data = { traits_Foo_Foo1, traits_Foo_Foo2 } };\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_dst_ref_shared_42\n  lvalue =\n    array_to_subslice_shared_7d(&foos,\n      (KRML_CLITERAL(core_ops_range_Range_87){ .start = (size_t)0U, .end = (size_t)2U }));\n  if (!(traits_to_int_0f(&lvalue) != 2U))\n  {\n    return;\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n"
  },
  {
    "path": "out/test-traits/traits.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef traits_H\n#define traits_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of core.ops.range.Range\nwith types size_t\n\n*/\ntypedef struct core_ops_range_Range_87_s\n{\n  size_t start;\n  size_t end;\n}\ncore_ops_range_Range_87;\n\n#define traits_Foo_Foo1 0\n#define traits_Foo_Foo2 1\n\ntypedef uint8_t traits_Foo;\n\n/**\nThis function found in impl {traits::ToInt for traits::Foo}\n*/\nuint32_t traits_to_int_ac(const traits_Foo *self);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types traits_Foo, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_42_s\n{\n  const traits_Foo *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_42;\n\n/**\nThis function found in impl {traits::ToInt for &0 ([traits::Foo])}\n*/\nuint32_t traits_to_int_0f(const Eurydice_dst_ref_shared_42 *self);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types traits_Foo\nwith const generics\n- $2size_t\n*/\ntypedef struct Eurydice_arr_0e_s { traits_Foo data[2U]; } Eurydice_arr_0e;\n\nvoid traits_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define traits_H_DEFINED\n#endif /* traits_H */\n"
  },
  {
    "path": "out/test-traits2/traits2.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"traits2.h\"\n\nvoid traits2_main(void)\n{\n\n}\n\n"
  },
  {
    "path": "out/test-traits2/traits2.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef traits2_H\n#define traits2_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern size_t core_clone_impls__core__clone__Clone_for_usize__clone(const size_t *x0);\n\n#define core_cmp_Ordering_Less -1\n#define core_cmp_Ordering_Equal 0\n#define core_cmp_Ordering_Greater 1\n\ntypedef int8_t core_cmp_Ordering;\n\nextern bool\ncore_cmp_impls__core__cmp__PartialEq_usize__for_usize__eq(const size_t *x0, const size_t *x1);\n\n#define core_option_None 0\n#define core_option_Some 1\n\ntypedef uint8_t core_option_Option_77_tags;\n\n/**\nA monomorphic instance of core.option.Option\nwith types core_cmp_Ordering\n\n*/\ntypedef struct core_option_Option_77_s\n{\n  core_option_Option_77_tags tag;\n  core_cmp_Ordering f0;\n}\ncore_option_Option_77;\n\nextern core_option_Option_77\ncore_cmp_impls__core__cmp__PartialOrd_usize__for_usize__partial_cmp(\n  const size_t *x0,\n  const size_t *x1\n);\n\n/**\nA monomorphic instance of core.option.Option\nwith types size_t\n\n*/\ntypedef struct core_option_Option_87_s\n{\n  core_option_Option_77_tags tag;\n  size_t f0;\n}\ncore_option_Option_87;\n\nextern core_option_Option_87\ncore_iter_range__core__iter__range__Step_for_usize__backward_checked(size_t x0, size_t x1);\n\nextern core_option_Option_87\ncore_iter_range__core__iter__range__Step_for_usize__forward_checked(size_t x0, size_t x1);\n\n/**\nA monomorphic instance of n-tuple\nwith types size_t, core_option_Option_87\n\n*/\ntypedef struct tuple_21_s\n{\n  size_t fst;\n  core_option_Option_87 snd;\n}\ntuple_21;\n\nextern tuple_21\ncore_iter_range__core__iter__range__Step_for_usize__steps_between(\n  const size_t *x0,\n  const size_t *x1\n);\n\n/**\nA monomorphic instance of core.ops.range.Range\nwith types size_t\n\n*/\ntypedef struct core_ops_range_Range_87_s\n{\n  size_t start;\n  size_t end;\n}\ncore_ops_range_Range_87;\n\nvoid traits2_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define traits2_H_DEFINED\n#endif /* traits2_H */\n"
  },
  {
    "path": "out/test-traits3/traits3.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"traits3.h\"\n\n/**\nThis function found in impl {traits3::internal::KeccakItem<2usize> for (u64, u64)}\n*/\nuint64_t_x2 traits3_zero_c8(void)\n{\n  return (KRML_CLITERAL(uint64_t_x2){ .fst = 0ULL, .snd = 0ULL });\n}\n\n/**\nA monomorphic instance of traits3.keccak\nwith types (uint64_t * uint64_t)\nwith const generics\n- N= 2\n*/\nvoid traits3_keccak_ea(void)\n{\n\n}\n\nvoid traits3_keccakx2(void)\n{\n\n}\n\nvoid traits3_main(void)\n{\n\n}\n\n"
  },
  {
    "path": "out/test-traits3/traits3.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef traits3_H\n#define traits3_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\ntypedef struct uint64_t_x2_s\n{\n  uint64_t fst;\n  uint64_t snd;\n}\nuint64_t_x2;\n\n/**\nThis function found in impl {traits3::internal::KeccakItem<2usize> for (u64, u64)}\n*/\nuint64_t_x2 traits3_zero_c8(void);\n\n/**\nA monomorphic instance of traits3.keccak\nwith types (uint64_t * uint64_t)\nwith const generics\n- N= 2\n*/\nvoid traits3_keccak_ea(void);\n\nvoid traits3_keccakx2(void);\n\nvoid traits3_main(void);\n\ntypedef uint64_t_x2 traits3_uint64x2_t;\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define traits3_H_DEFINED\n#endif /* traits3_H */\n"
  },
  {
    "path": "out/test-we_need_charon_monomorphization/we_need_charon_monomorphization.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"we_need_charon_monomorphization.h\"\n\n/**\nA monomorphic instance of we_need_charon_monomorphization.use_ref\nwith types Eurydice_derefed_slice int32_t\n\n*/\nvoid we_need_charon_monomorphization_use_ref_ee(const int32_t (*_t)[])\n{\n\n}\n\nvoid we_need_charon_monomorphization_supply_ref(Eurydice_dst_ref_shared_83 s)\n{\n\n}\n\n/**\nA monomorphic instance of Eurydice.array_to_slice_shared\nwith types int32_t\nwith const generics\n- N= 3\n*/\nstatic Eurydice_dst_ref_shared_83 array_to_slice_shared_ab(const Eurydice_arr_bf *a)\n{\n  Eurydice_dst_ref_shared_83 lit;\n  lit.ptr = a->data;\n  lit.meta = (size_t)3U;\n  return lit;\n}\n\nvoid we_need_charon_monomorphization_main(void)\n{\n  /* original Rust expression is not an lvalue in C */\n  Eurydice_arr_bf lvalue = { .data = { 1, 2, 3 } };\n  we_need_charon_monomorphization_supply_ref(array_to_slice_shared_ab(&lvalue));\n}\n\n"
  },
  {
    "path": "out/test-we_need_charon_monomorphization/we_need_charon_monomorphization.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef we_need_charon_monomorphization_H\n#define we_need_charon_monomorphization_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n/**\nA monomorphic instance of we_need_charon_monomorphization.use_ref\nwith types Eurydice_derefed_slice int32_t\n\n*/\nvoid we_need_charon_monomorphization_use_ref_ee(const int32_t (*_t)[]);\n\n/**\nA monomorphic instance of Eurydice.dst_ref_shared\nwith types int32_t, size_t\n\n*/\ntypedef struct Eurydice_dst_ref_shared_83_s\n{\n  const int32_t *ptr;\n  size_t meta;\n}\nEurydice_dst_ref_shared_83;\n\nvoid we_need_charon_monomorphization_supply_ref(Eurydice_dst_ref_shared_83 s);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types int32_t\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_bf_s { int32_t data[3U]; } Eurydice_arr_bf;\n\nvoid we_need_charon_monomorphization_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define we_need_charon_monomorphization_H_DEFINED\n#endif /* we_need_charon_monomorphization_H */\n"
  },
  {
    "path": "out/test-where_clauses_closures/where_clauses_closures.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"where_clauses_closures.h\"\n\n/**\nThis function found in impl {where_clauses_closures::Ops<1usize> for usize}\n*/\nsize_t where_clauses_closures_zero_38(void)\n{\n  return (size_t)0U;\n}\n\n/**\nThis function found in impl {where_clauses_closures::Ops<1usize> for usize}\n*/\nsize_t where_clauses_closures_of_usize_38(size_t x)\n{\n  return x;\n}\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), T> for where_clauses_closures::test::closure<T, K>[TraitClause@0, TraitClause@1, TraitClause@2]}\n*/\n/**\nA monomorphic instance of where_clauses_closures.test.call_mut_1a\nwith types size_t\nwith const generics\n- K= 1\n*/\nsize_t where_clauses_closures_test_call_mut_1a_df(void **_, size_t tupled_args)\n{\n  size_t i = tupled_args;\n  return where_clauses_closures_of_usize_38(i);\n}\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), T> for where_clauses_closures::test::closure<T, K>[TraitClause@0, TraitClause@1, TraitClause@2]}\n*/\n/**\nA monomorphic instance of where_clauses_closures.test.call_once_79\nwith types size_t\nwith const generics\n- K= 1\n*/\nsize_t where_clauses_closures_test_call_once_79_df(size_t _)\n{\n  /* original Rust expression is not an lvalue in C */\n  void *lvalue = (void *)0U;\n  return where_clauses_closures_test_call_mut_1a_df(&lvalue, _);\n}\n\n/**\nA monomorphic instance of where_clauses_closures.test\nwith types size_t\nwith const generics\n- K= 1\n*/\nsize_t_x2 where_clauses_closures_test_df(void)\n{\n  Eurydice_arr_58 arr_struct;\n  {\n    /* original Rust expression is not an lvalue in C */\n    void *lvalue = (void *)0U;\n    arr_struct.data[0U] = where_clauses_closures_test_call_mut_1a_df(&lvalue, (size_t)0U);\n  }\n  Eurydice_arr_58 x = arr_struct;\n  size_t y = where_clauses_closures_zero_38();\n  return (KRML_CLITERAL(size_t_x2){ .fst = x.data[0U], .snd = y });\n}\n\ntypedef struct const_size_t__x2_s\n{\n  const size_t *fst;\n  const size_t *snd;\n}\nconst_size_t__x2;\n\nvoid where_clauses_closures_main(void)\n{\n  size_t_x2 uu____0 = where_clauses_closures_test_df();\n  size_t x = uu____0.fst;\n  size_t y = uu____0.snd;\n  const_size_t__x2 uu____1 = { .fst = &x, .snd = &y };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-where_clauses_closures/where_clauses_closures.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef where_clauses_closures_H\n#define where_clauses_closures_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern size_t core_clone_impls__core__clone__Clone_for_usize__clone(const size_t *x0);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n/**\nThis function found in impl {where_clauses_closures::Ops<1usize> for usize}\n*/\nsize_t where_clauses_closures_zero_38(void);\n\n/**\nThis function found in impl {where_clauses_closures::Ops<1usize> for usize}\n*/\nsize_t where_clauses_closures_of_usize_38(size_t x);\n\n/**\nThis function found in impl {core::ops::function::FnMut<(usize), T> for where_clauses_closures::test::closure<T, K>[TraitClause@0, TraitClause@1, TraitClause@2]}\n*/\n/**\nA monomorphic instance of where_clauses_closures.test.call_mut_1a\nwith types size_t\nwith const generics\n- K= 1\n*/\nsize_t where_clauses_closures_test_call_mut_1a_df(void **_, size_t tupled_args);\n\n/**\nThis function found in impl {core::ops::function::FnOnce<(usize), T> for where_clauses_closures::test::closure<T, K>[TraitClause@0, TraitClause@1, TraitClause@2]}\n*/\n/**\nA monomorphic instance of where_clauses_closures.test.call_once_79\nwith types size_t\nwith const generics\n- K= 1\n*/\nsize_t where_clauses_closures_test_call_once_79_df(size_t _);\n\ntypedef struct size_t_x2_s\n{\n  size_t fst;\n  size_t snd;\n}\nsize_t_x2;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types size_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_58_s { size_t data[1U]; } Eurydice_arr_58;\n\n/**\nA monomorphic instance of where_clauses_closures.test\nwith types size_t\nwith const generics\n- K= 1\n*/\nsize_t_x2 where_clauses_closures_test_df(void);\n\nvoid where_clauses_closures_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define where_clauses_closures_H_DEFINED\n#endif /* where_clauses_closures_H */\n"
  },
  {
    "path": "out/test-where_clauses_fncg/where_clauses_fncg.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"where_clauses_fncg.h\"\n\n/**\nThis function found in impl {where_clauses_fncg::Foo<K> for u64}\n*/\n/**\nA monomorphic instance of where_clauses_fncg.bar_16\nwith const generics\n- K= 8\n- L= 4\n*/\nuint64_t where_clauses_fncg_bar_16_f4(Eurydice_arr_07 x, Eurydice_arr_34 _)\n{\n  return (uint64_t)x.data->data[0U];\n}\n\n/**\nA monomorphic instance of where_clauses_fncg.f\nwith types uint64_t\nwith const generics\n- K= 6\n- L= 8\n- M= 10\n*/\nuint64_t where_clauses_fncg_f_d3(void)\n{\n  return\n    where_clauses_fncg_bar_16_f4((\n        KRML_CLITERAL(Eurydice_arr_07){\n          .data = {\n            { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n            { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }\n          }\n        }\n      ),\n      (\n        KRML_CLITERAL(Eurydice_arr_34){\n          .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } }\n        }\n      ));\n}\n\n/**\nThis function found in impl {where_clauses_fncg::Foo<K> for u64}\n*/\n/**\nA monomorphic instance of where_clauses_fncg.bar_16\nwith const generics\n- K= 12\n- L= 4\n*/\nuint64_t where_clauses_fncg_bar_16_9e(Eurydice_arr_40 x, Eurydice_arr_11 _)\n{\n  return (uint64_t)x.data->data[0U];\n}\n\n/**\nThis function found in impl {where_clauses_fncg::UseFoo for ()}\n*/\n/**\nA monomorphic instance of where_clauses_fncg.method_foo_db\nwith types uint64_t\nwith const generics\n- K= 12\n*/\nuint64_t where_clauses_fncg_method_foo_db_27(void)\n{\n  return\n    where_clauses_fncg_bar_16_9e((\n        KRML_CLITERAL(Eurydice_arr_40){\n          .data = {\n            { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n            { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } },\n            { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }\n          }\n        }\n      ),\n      (\n        KRML_CLITERAL(Eurydice_arr_11){\n          .data = { { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } }, { .data = { 0U } } }\n        }\n      ));\n}\n\n/**\nA monomorphic instance of where_clauses_fncg.g\nwith types ()\nwith const generics\n\n*/\nuint64_t where_clauses_fncg_g_ec(void)\n{\n  return where_clauses_fncg_method_foo_db_27();\n}\n\ntypedef struct const_uint64_t__x2_s\n{\n  const uint64_t *fst;\n  const uint64_t *snd;\n}\nconst_uint64_t__x2;\n\nvoid where_clauses_fncg_main(void)\n{\n  uint64_t r = where_clauses_fncg_f_d3();\n  /* original Rust expression is not an lvalue in C */\n  uint64_t lvalue0 = 0ULL;\n  const_uint64_t__x2 uu____0 = { .fst = &r, .snd = &lvalue0 };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  uint64_t r0 = where_clauses_fncg_g_ec();\n  /* original Rust expression is not an lvalue in C */\n  uint64_t lvalue = 0ULL;\n  const_uint64_t__x2 uu____1 = { .fst = &r0, .snd = &lvalue };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-where_clauses_fncg/where_clauses_fncg.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef where_clauses_fncg_H\n#define where_clauses_fncg_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nstatic inline uint64_t core_convert_num__core__convert__From_u8__for_u64__from(uint8_t x0);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_array_u8x4\nwith const generics\n- $8size_t\n*/\ntypedef struct Eurydice_arr_07_s { Eurydice_array_u8x4 data[8U]; } Eurydice_arr_07;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_array_u8x8\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_34_s { Eurydice_array_u8x8 data[4U]; } Eurydice_arr_34;\n\n/**\nThis function found in impl {where_clauses_fncg::Foo<K> for u64}\n*/\n/**\nA monomorphic instance of where_clauses_fncg.bar_16\nwith const generics\n- K= 8\n- L= 4\n*/\nuint64_t where_clauses_fncg_bar_16_f4(Eurydice_arr_07 x, Eurydice_arr_34 _);\n\n/**\nA monomorphic instance of where_clauses_fncg.f\nwith types uint64_t\nwith const generics\n- K= 6\n- L= 8\n- M= 10\n*/\nuint64_t where_clauses_fncg_f_d3(void);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_array_u8x4\nwith const generics\n- $12size_t\n*/\ntypedef struct Eurydice_arr_40_s { Eurydice_array_u8x4 data[12U]; } Eurydice_arr_40;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint8_t\nwith const generics\n- $12size_t\n*/\ntypedef struct Eurydice_arr_a3_s { uint8_t data[12U]; } Eurydice_arr_a3;\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types Eurydice_arr_a3\nwith const generics\n- $4size_t\n*/\ntypedef struct Eurydice_arr_11_s { Eurydice_arr_a3 data[4U]; } Eurydice_arr_11;\n\n/**\nThis function found in impl {where_clauses_fncg::Foo<K> for u64}\n*/\n/**\nA monomorphic instance of where_clauses_fncg.bar_16\nwith const generics\n- K= 12\n- L= 4\n*/\nuint64_t where_clauses_fncg_bar_16_9e(Eurydice_arr_40 x, Eurydice_arr_11 _);\n\n/**\nThis function found in impl {where_clauses_fncg::UseFoo for ()}\n*/\n/**\nA monomorphic instance of where_clauses_fncg.method_foo_db\nwith types uint64_t\nwith const generics\n- K= 12\n*/\nuint64_t where_clauses_fncg_method_foo_db_27(void);\n\n/**\nA monomorphic instance of where_clauses_fncg.g\nwith types ()\nwith const generics\n\n*/\nuint64_t where_clauses_fncg_g_ec(void);\n\nvoid where_clauses_fncg_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define where_clauses_fncg_H_DEFINED\n#endif /* where_clauses_fncg_H */\n"
  },
  {
    "path": "out/test-where_clauses_simple/where_clauses_simple.c",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"where_clauses_simple.h\"\n\n/**\nThis function found in impl {where_clauses_simple::Ops<K> for usize}\n*/\n/**\nA monomorphic instance of where_clauses_simple.of_u16_81\nwith const generics\n- K= 3\n*/\nsize_t where_clauses_simple_of_u16_81_78(uint16_t x)\n{\n  return (size_t)x;\n}\n\n/**\nThis function found in impl {where_clauses_simple::Ops<K> for usize}\n*/\n/**\nA monomorphic instance of where_clauses_simple.add_81\nwith const generics\n- K= 3\n*/\nsize_t where_clauses_simple_add_81_78(Eurydice_arr_dc x, size_t y)\n{\n  return (size_t)x.data[0U] + y + (size_t)3U;\n}\n\n/**\nA monomorphic instance of where_clauses_simple.fn_k\nwith types size_t\nwith const generics\n- K= 3\n*/\nsize_t where_clauses_simple_fn_k_f3(void)\n{\n  size_t x = where_clauses_simple_of_u16_81_78(0U);\n  return where_clauses_simple_add_81_78((KRML_CLITERAL(Eurydice_arr_dc){ .data = { 0U } }), x);\n}\n\ntypedef struct const_size_t__x2_s\n{\n  const size_t *fst;\n  const size_t *snd;\n}\nconst_size_t__x2;\n\nvoid where_clauses_simple_k_calls_k(void)\n{\n  size_t r = where_clauses_simple_fn_k_f3();\n  size_t r_expected = (size_t)3U;\n  const_size_t__x2 uu____0 = { .fst = &r, .snd = &r_expected };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n/**\nThis function found in impl {where_clauses_simple::Ops<1usize> for u64}\n*/\nuint64_t where_clauses_simple_add_19(Eurydice_arr_96 x, uint64_t y)\n{\n  return (uint64_t)x.data[0U] + y;\n}\n\n/**\nThis function found in impl {where_clauses_simple::Ops<1usize> for u64}\n*/\nuint64_t where_clauses_simple_of_u16_19(uint16_t x)\n{\n  return (uint64_t)x;\n}\n\n/**\nA monomorphic instance of where_clauses_simple.fn_k\nwith types uint64_t\nwith const generics\n- K= 1\n*/\nuint64_t where_clauses_simple_fn_k_1c(void)\n{\n  uint64_t x = where_clauses_simple_of_u16_19(0U);\n  return where_clauses_simple_add_19((KRML_CLITERAL(Eurydice_arr_96){ .data = { 0U } }), x);\n}\n\ntypedef struct const_uint64_t__x2_s\n{\n  const uint64_t *fst;\n  const uint64_t *snd;\n}\nconst_uint64_t__x2;\n\nvoid where_clauses_simple_k_calls_one(void)\n{\n  uint64_t r = where_clauses_simple_fn_k_1c();\n  uint64_t r_expected = 0ULL;\n  const_uint64_t__x2 uu____0 = { .fst = &r, .snd = &r_expected };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n/**\nThis function found in impl {where_clauses_simple::Ops<K> for usize}\n*/\n/**\nA monomorphic instance of where_clauses_simple.of_u16_81\nwith const generics\n- K= 1\n*/\nsize_t where_clauses_simple_of_u16_81_6c(uint16_t x)\n{\n  return (size_t)x;\n}\n\n/**\nThis function found in impl {where_clauses_simple::Ops<K> for usize}\n*/\n/**\nA monomorphic instance of where_clauses_simple.add_81\nwith const generics\n- K= 1\n*/\nsize_t where_clauses_simple_add_81_6c(Eurydice_arr_96 x, size_t y)\n{\n  return (size_t)x.data[0U] + y + (size_t)1U;\n}\n\n/**\nA monomorphic instance of where_clauses_simple.fn_1\nwith types size_t\nwith const generics\n\n*/\nsize_t where_clauses_simple_fn_1_2f(void)\n{\n  size_t x = where_clauses_simple_of_u16_81_6c(0U);\n  return where_clauses_simple_add_81_6c((KRML_CLITERAL(Eurydice_arr_96){ .data = { 0U } }), x);\n}\n\nvoid where_clauses_simple_one_calls_k(void)\n{\n  size_t r = where_clauses_simple_fn_1_2f();\n  size_t r_expected = (size_t)1U;\n  const_size_t__x2 uu____0 = { .fst = &r, .snd = &r_expected };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n/**\nA monomorphic instance of where_clauses_simple.fn_1\nwith types uint64_t\nwith const generics\n\n*/\nuint64_t where_clauses_simple_fn_1_e5(void)\n{\n  uint64_t x = where_clauses_simple_of_u16_19(0U);\n  return where_clauses_simple_add_19((KRML_CLITERAL(Eurydice_arr_96){ .data = { 0U } }), x);\n}\n\nvoid where_clauses_simple_one_calls_one(void)\n{\n  uint64_t r = where_clauses_simple_fn_1_e5();\n  uint64_t r_expected = 0ULL;\n  const_uint64_t__x2 uu____0 = { .fst = &r, .snd = &r_expected };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n}\n\n/**\nA monomorphic instance of where_clauses_simple.double\nwith types uint64_t, size_t\nwith const generics\n\n*/\ntuple_3d where_clauses_simple_double_4e(uint64_t x, size_t y)\n{\n  uint64_t\n  uu____0 = where_clauses_simple_add_19((KRML_CLITERAL(Eurydice_arr_96){ .data = { 0U } }), x);\n  return\n    (\n      KRML_CLITERAL(tuple_3d){\n        .fst = uu____0,\n        .snd = where_clauses_simple_add_81_6c((KRML_CLITERAL(Eurydice_arr_96){ .data = { 0U } }), y)\n      }\n    );\n}\n\n/**\nA monomorphic instance of where_clauses_simple.double_k\nwith types size_t, uint64_t\nwith const generics\n- K= 3\n*/\ntuple_7d where_clauses_simple_double_k_c8(size_t x, uint64_t y)\n{\n  size_t\n  uu____0 = where_clauses_simple_add_81_78((KRML_CLITERAL(Eurydice_arr_dc){ .data = { 0U } }), x);\n  return\n    (\n      KRML_CLITERAL(tuple_7d){\n        .fst = uu____0,\n        .snd = where_clauses_simple_add_19((KRML_CLITERAL(Eurydice_arr_96){ .data = { 0U } }), y)\n      }\n    );\n}\n\nvoid where_clauses_simple_main(void)\n{\n  where_clauses_simple_k_calls_k();\n  where_clauses_simple_k_calls_one();\n  where_clauses_simple_one_calls_k();\n  where_clauses_simple_one_calls_one();\n  tuple_3d x = where_clauses_simple_double_4e(1ULL, (size_t)1U);\n  tuple_7d y = where_clauses_simple_double_k_c8((size_t)1U, 1ULL);\n  uint64_t x_0 = 1ULL;\n  size_t x_1 = (size_t)2U;\n  const_uint64_t__x2 uu____0 = { .fst = &x.fst, .snd = &x_0 };\n  EURYDICE_ASSERT(uu____0.fst[0U] == uu____0.snd[0U], \"panic!\");\n  const_size_t__x2 uu____1 = { .fst = &x.snd, .snd = &x_1 };\n  EURYDICE_ASSERT(uu____1.fst[0U] == uu____1.snd[0U], \"panic!\");\n  size_t y_0 = (size_t)4U;\n  uint64_t y_1 = 1ULL;\n  const_size_t__x2 uu____2 = { .fst = &y.fst, .snd = &y_0 };\n  EURYDICE_ASSERT(uu____2.fst[0U] == uu____2.snd[0U], \"panic!\");\n  const_uint64_t__x2 uu____3 = { .fst = &y.snd, .snd = &y_1 };\n  EURYDICE_ASSERT(uu____3.fst[0U] == uu____3.snd[0U], \"panic!\");\n}\n\n"
  },
  {
    "path": "out/test-where_clauses_simple/where_clauses_simple.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef where_clauses_simple_H\n#define where_clauses_simple_H\n\n#include \"eurydice_glue.h\"\n\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern uint64_t core_clone_impls__core__clone__Clone_for_u64__clone(const uint64_t *x0);\n\nextern size_t core_clone_impls__core__clone__Clone_for_usize__clone(const size_t *x0);\n\nstatic inline uint64_t core_convert_num__core__convert__From_u16__for_u64__from(uint16_t x0);\n\nstatic inline size_t core_convert_num__core__convert__From_u16__for_usize__from(uint16_t x0);\n\n#define core_panicking_AssertKind_Eq 0\n#define core_panicking_AssertKind_Ne 1\n#define core_panicking_AssertKind_Match 2\n\ntypedef uint8_t core_panicking_AssertKind;\n\n/**\nThis function found in impl {where_clauses_simple::Ops<K> for usize}\n*/\n/**\nA monomorphic instance of where_clauses_simple.of_u16_81\nwith const generics\n- K= 3\n*/\nsize_t where_clauses_simple_of_u16_81_78(uint16_t x);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint16_t\nwith const generics\n- $3size_t\n*/\ntypedef struct Eurydice_arr_dc_s { uint16_t data[3U]; } Eurydice_arr_dc;\n\n/**\nThis function found in impl {where_clauses_simple::Ops<K> for usize}\n*/\n/**\nA monomorphic instance of where_clauses_simple.add_81\nwith const generics\n- K= 3\n*/\nsize_t where_clauses_simple_add_81_78(Eurydice_arr_dc x, size_t y);\n\n/**\nA monomorphic instance of where_clauses_simple.fn_k\nwith types size_t\nwith const generics\n- K= 3\n*/\nsize_t where_clauses_simple_fn_k_f3(void);\n\nvoid where_clauses_simple_k_calls_k(void);\n\n/**\nA monomorphic instance of Eurydice.arr\nwith types uint16_t\nwith const generics\n- $1size_t\n*/\ntypedef struct Eurydice_arr_96_s { uint16_t data[1U]; } Eurydice_arr_96;\n\n/**\nThis function found in impl {where_clauses_simple::Ops<1usize> for u64}\n*/\nuint64_t where_clauses_simple_add_19(Eurydice_arr_96 x, uint64_t y);\n\n/**\nThis function found in impl {where_clauses_simple::Ops<1usize> for u64}\n*/\nuint64_t where_clauses_simple_of_u16_19(uint16_t x);\n\n/**\nA monomorphic instance of where_clauses_simple.fn_k\nwith types uint64_t\nwith const generics\n- K= 1\n*/\nuint64_t where_clauses_simple_fn_k_1c(void);\n\nvoid where_clauses_simple_k_calls_one(void);\n\n/**\nThis function found in impl {where_clauses_simple::Ops<K> for usize}\n*/\n/**\nA monomorphic instance of where_clauses_simple.of_u16_81\nwith const generics\n- K= 1\n*/\nsize_t where_clauses_simple_of_u16_81_6c(uint16_t x);\n\n/**\nThis function found in impl {where_clauses_simple::Ops<K> for usize}\n*/\n/**\nA monomorphic instance of where_clauses_simple.add_81\nwith const generics\n- K= 1\n*/\nsize_t where_clauses_simple_add_81_6c(Eurydice_arr_96 x, size_t y);\n\n/**\nA monomorphic instance of where_clauses_simple.fn_1\nwith types size_t\nwith const generics\n\n*/\nsize_t where_clauses_simple_fn_1_2f(void);\n\nvoid where_clauses_simple_one_calls_k(void);\n\n/**\nA monomorphic instance of where_clauses_simple.fn_1\nwith types uint64_t\nwith const generics\n\n*/\nuint64_t where_clauses_simple_fn_1_e5(void);\n\nvoid where_clauses_simple_one_calls_one(void);\n\n/**\nA monomorphic instance of n-tuple\nwith types uint64_t, size_t\n\n*/\ntypedef struct tuple_3d_s\n{\n  uint64_t fst;\n  size_t snd;\n}\ntuple_3d;\n\n/**\nA monomorphic instance of where_clauses_simple.double\nwith types uint64_t, size_t\nwith const generics\n\n*/\ntuple_3d where_clauses_simple_double_4e(uint64_t x, size_t y);\n\n/**\nA monomorphic instance of n-tuple\nwith types size_t, uint64_t\n\n*/\ntypedef struct tuple_7d_s\n{\n  size_t fst;\n  uint64_t snd;\n}\ntuple_7d;\n\n/**\nA monomorphic instance of where_clauses_simple.double_k\nwith types size_t, uint64_t\nwith const generics\n- K= 3\n*/\ntuple_7d where_clauses_simple_double_k_c8(size_t x, uint64_t y);\n\nvoid where_clauses_simple_main(void);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define where_clauses_simple_H_DEFINED\n#endif /* where_clauses_simple_H */\n"
  },
  {
    "path": "out/testxx-result/result.cc",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#include \"result.h\"\n\nresult_S result_ident(result_S x)\n{\n  return x;\n}\n\nresult_S result_mk1(uint32_t x, uint32_t y)\n{\n  return result_S_s(result_S1, &result_S_s::U::case_S1, { x, y });\n}\n\nvoid result_main(void)\n{\n  result_S uu____0 = result_mk1(0U, 0U);\n  if (uu____0.tag == result_S1)\n  {\n    switch (uu____0.val.case_S1.x1)\n    {\n      case 0U:\n        {\n          switch (uu____0.val.case_S1.y1)\n          {\n            case 0U:\n              {\n                result_S\n                uu____1 = result_ident(result_S_s(result_S2, &result_S_s::U::case_S2, { 0U, 0U }));\n                if (uu____1.tag == result_S2)\n                {\n                  switch (uu____1.val.case_S2.x2)\n                  {\n                    case 0U:\n                      {\n                        switch (uu____1.val.case_S2.y2)\n                        {\n                          case 0U:\n                            {\n                              return;\n                            }\n                          default:\n                            {\n\n                            }\n                        }\n                        break;\n                      }\n                    default:\n                      {\n\n                      }\n                  }\n                }\n                KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n                KRML_HOST_EXIT(255U);\n                break;\n              }\n            default:\n              {\n\n              }\n          }\n          break;\n        }\n      default:\n        {\n\n        }\n    }\n  }\n  KRML_HOST_EPRINTF(\"KaRaMeL abort at %s:%d\\n%s\\n\", __FILE__, __LINE__, \"panic!\");\n  KRML_HOST_EXIT(255U);\n}\n\n"
  },
  {
    "path": "out/testxx-result/result.h",
    "content": "/* \n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n\n  F* version: <unknown>\n\n */\n\n#ifndef result_H\n#define result_H\n\n#include \"eurydice_glue.h\"\n\n\n\n#define result_S1 0\n#define result_S2 1\n\ntypedef uint8_t result_S_tags;\n\ntypedef struct result_S_s\n{\n  result_S_tags tag;\n  union U {\n    struct\n    {\n      uint32_t x1;\n      uint32_t y1;\n    }\n    case_S1;\n    struct\n    {\n      uint32_t x2;\n      uint32_t y2;\n    }\n    case_S2;\n  }\n  val;\n  KRML_UNION_CONSTRUCTOR(result_S_s)\n}\nresult_S;\n\nresult_S result_ident(result_S x);\n\nresult_S result_mk1(uint32_t x, uint32_t y);\n\nvoid result_main(void);\n\n\n#define result_H_DEFINED\n#endif /* result_H */\n"
  },
  {
    "path": "scripts/check-dependency.sh",
    "content": "#!/usr/bin/env bash\n# Eurydice has 3 dependencies that must be handled by hand: karamel, charon, and libcrux.\n# For each, we require that `./$PROJECT` contain a clone of the corresponding repository.\n# For users/devs of Eurydice only, the repos can be cloned directly there and\n# this script will ensure the right commit is checked out. For devs that also\n# touch those linked projects, each `./$PROJECT` can be instead a symlink to a\n# local clone, in which case having the wrong commit checked out will only be a\n# flagged as a warning.\n#\n# This script must be called like:\n#   ./scripts/check-dependency.sh <PROJECT>\n# or\n#   ./scripts/check-dependency.sh <PROJECT> --force\n\nif [[ \"$IN_CI\" == \"1\" ]]; then\n    # Don't check commit hashes etc in CI.\n    exit 0\nfi\n\nPROJECT=\"$1\"\nFORCE=\nif [[ \"$2\" == \"--force\" ]]; then\n    FORCE=1\nfi\n\nif !which jq 2> /dev/null 1>&2; then\n    echo 'Error: `jq` not found. Please install the `jq` command-line utility.'\n    exit 1\nfi\n\nrebuild() {\n    if which nix 2> /dev/null 1>&2; then\n      local has_nix=true\n    else\n      local has_nix=false\n    fi\n    case \"$1\" in\n        karamel)\n            if ! $has_nix; then\n              opam install --deps-only .\n            fi\n            make lib/Version.ml lib/AutoConfig.ml\n        ;;\n        charon)\n            if $has_nix; then\n                # No need to install dependencies via opam if we're within nix\n                nix develop --command bash -c \"make test\"\n            elif which rustup 2> /dev/null 1>&2; then\n                opam install --deps-only .\n                make test\n            else\n                echo 'Error: Neither `rustup` nor `nix` appears to be installed. Install one or the other in order to build `charon`.'\n                exit 1\n            fi\n            # If we rebuilt charon, most likely the llbc files in eurydice are stale.\n            (cd .. && make clean-llbc)\n        ;;\n        libcrux)\n            # Nothing to do\n        ;;\n    esac\n}\n\nPINNED_COMMIT=\"$(jq -r \".nodes.$PROJECT.locked.rev\" flake.lock)\"\nREPO_URL=\"$(jq -r '.nodes.'$PROJECT'.original | \"https://github.com/\\(.owner)/\\(.repo)\"' flake.lock)\"\nif [ -e \"./$PROJECT\" ]; then\n    # If ./$PROJECT is a symlink, we assume it's a working copy so we won't enforce commit hashes.\n    IS_SYMLINK=\n    if [ -L \"./$PROJECT\" ]; then\n        # echo 'Warning: `./'\"$PROJECT\"'` is a symlink; we assume it is a working copy and will not enforce commit hashes.'\n        IS_SYMLINK=1\n    fi\n\n    cd \"$PROJECT\"\n\n    ACTUAL_COMMIT=\"$(git rev-parse HEAD)\"\n    if [[ \"$ACTUAL_COMMIT\" != \"$PINNED_COMMIT\" ]]; then\n        if [[ \"$FORCE\" == \"1\" ]]; then\n            git fetch origin && git checkout \"$PINNED_COMMIT\" && rebuild\n            exit 0\n        elif [[ \"$IS_SYMLINK\" == \"1\" ]]; then\n            echo 'Warning: `'\"$PROJECT\"'` commit ('\"$ACTUAL_COMMIT\"') is not the pinned commit ('\"$PINNED_COMMIT\"').'\n            exit 0\n        else\n            echo 'Error: `'$PROJECT'` commit is not the pinned commit. Update the '$PROJECT' repository to the commit specified in `flake.lock`:'\n            echo '  $ cd '$PROJECT' && git fetch origin && git checkout '\"$PINNED_COMMIT\"' && make'\n            echo 'To do this automatically, run `make setup-'$PROJECT'`.'\n            exit 1\n        fi\n    fi\n\n    if [[ \"$FORCE\" == \"1\" ]]; then\n        rebuild\n        exit 0\n    fi\nelse\n    if [[ \"$FORCE\" == \"1\" ]]; then\n        git clone \"$REPO_URL\"\n        cd \"$PROJECT\" && git checkout \"$PINNED_COMMIT\" && rebuild $PROJECT\n        exit 0\n    else\n        echo 'Error: `'$PROJECT'` not found. Please clone the '$PROJECT' repository into `./'$PROJECT'`,'\\\n            'or make a symlink to an existing clone of '$PROJECT':'\n        echo '  $ git clone '$REPO_URL''\n        echo '  $ cd '$PROJECT' && git checkout '\"$PINNED_COMMIT\"' && make'\n        echo 'To do this automatically, run `make setup-'$PROJECT'`.'\n        exit 1\n    fi\nfi\n"
  },
  {
    "path": "scripts/ci-check-charon-pin-is-forward.sh",
    "content": "#!/usr/bin/env bash\n# Checks that the charon pin moves forward from the previous pin, to ensure we don't regress the Charon version.\n\nNEW_CHARON_PIN=\"$(cat flake.lock | jq -r .nodes.charon.locked.rev)\"\nOLD_CHARON_PIN=\"$(git show origin/main:flake.lock | jq -r .nodes.charon.locked.rev)\"\necho \"This PR updates the charon pin from $OLD_CHARON_PIN to $NEW_CHARON_PIN\"\n\ngit clone https://github.com/AeneasVerif/charon\ncd charon\n\n# Fetch commits in PRs\ngit config remote.origin.fetch \"+refs/pull/*/head:refs/remotes/origin/pr/*\"\ngit fetch --all\n\nif ! git merge-base --is-ancestor \"$OLD_CHARON_PIN\" \"$NEW_CHARON_PIN\"; then\n    echo \"Error: the new charon pin does not have the old one as its ancestor. The pin must only move forward.\"\n    exit 1\nfi\n"
  },
  {
    "path": "scripts/ci-check-charon-pin-is-merged.sh",
    "content": "#!/usr/bin/env bash\n# Checks that the charon pin is merged into Charon.\n\nNEW_CHARON_PIN=\"$(cat flake.lock | jq -r .nodes.charon.locked.rev)\"\nOLD_CHARON_PIN=\"$(git show origin/main:flake.lock | jq -r .nodes.charon.locked.rev)\"\necho \"This PR updates the charon pin from $OLD_CHARON_PIN to $NEW_CHARON_PIN\"\n\ngit clone https://github.com/AeneasVerif/charon\ncd charon\nCHARON_MAIN=\"$(git rev-parse HEAD)\"\n\nif ! git merge-base --is-ancestor \"$NEW_CHARON_PIN\" \"$CHARON_MAIN\"; then\n    echo \"Error: commit $NEW_CHARON_PIN is not merged into Charon.\"\n    exit 1\nfi\n"
  },
  {
    "path": "scripts/format.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nusage() {\n  echo \"Usage: $0 {check|apply}\" >&2\n  exit 1\n}\n\nif [ $# -ne 1 ]; then\n  usage\nfi\n\nformat_file=\"${FORMAT_FILE:-include/eurydice_glue.h}\"\n\ncase \"$1\" in\n  check)\n    status=0\n    if ! dune build @fmt; then\n      status=1\n    fi\n\n    tmp_file=\"$(mktemp)\"\n    trap 'rm -f \"$tmp_file\"' EXIT\n\n    clang-format \"$format_file\" > \"$tmp_file\"\n    if ! diff \"$format_file\" \"$tmp_file\"; then\n      status=1\n    fi\n\n    if [ \"$status\" -ne 0 ]; then\n      echo -e \"\\033[0;31m⚠️⚠️⚠️ SUGGESTED: make format-apply\\033[0;m\"\n    fi\n    exit \"$status\"\n    ;;\n  apply)\n    dune fmt >/dev/null || true\n    clang-format -i \"$format_file\"\n    ;;\n  *)\n    usage\n    ;;\nesac\n"
  },
  {
    "path": "scripts/update-charon-pin.sh",
    "content": "#!/usr/bin/env bash\nCHARON_DIR=./lib/charon\nCHARON_BRANCH=\"$(git -C \"$CHARON_DIR\" rev-parse --abbrev-ref HEAD)\"\nCHARON_COMMIT=\"$(git -C \"$CHARON_DIR\" rev-parse HEAD)\"\necho 'Taking the commit from your local charon directory. The charon branch is `'\"$CHARON_BRANCH\"'`'\nnix flake update charon --extra-experimental-features nix-command --extra-experimental-features flakes --override-input charon \"github:aeneasverif/charon/$CHARON_COMMIT\"\n"
  },
  {
    "path": "test/array.rs",
    "content": "struct Foo {\n    x: [u32; 2],\n    y: [u32; 2],\n}\n\nfn mut_array(mut x: [u32; 2]) {\n    x[0] = 1u32;\n}\n\nfn mut_foo(mut f: Foo) {\n    f.x[0] = 1u32;\n    let mut copy: [u32; 2] = f.y;\n    copy[0] = 0u32;\n    assert!(copy[0]!=1u32);\n}\n\nfn mk_foo() -> Foo {\n    let x = [0u32, 0u32];\n    let y = [1u32, 1u32];\n    Foo { x, y }\n}\n\nfn mk_foo2() -> Foo {\n    mk_foo()\n}\n\nfn mk_incr2<const K: usize>() -> [u32; K] {\n    let j = 1;\n    core::array::from_fn(|i| i as u32 + j)\n}\n\nfn mk_incr<const K: usize>() -> [u32; K] {\n    core::array::from_fn(|i| i as u32)\n}\n\nfn nested_from_fn<const K: usize>() -> [[usize; K]; K] {\n    core::array::from_fn(|j| core::array::from_fn(|i| i+j))\n}\n\nfn plus_one<const K: usize>(x: [u32; K]) -> [u16; K] {\n    x.map(|x| (x + 1) as u16)\n}\n\nfn const_eq<const K:usize>(x: [u32; K], y: [u32; K]) -> bool {\n   x == y\n}\n\npub fn fun(x: &[[u8; 32]]) -> u8 {\n    x[0][0..1][0]\n}\n \nfn init() -> [u8; 32] {\n    [0u8; 32]\n}\n\nfn references() -> () {\n    let x = &init();\n}\n\nfn main() {\n    // XXX1\n    let Foo { x, y } = mk_foo2();\n    let unsigned = 0u32;\n    mut_array(x);\n    // XXX2\n    mut_foo(Foo { x, y });\n    assert_eq!(x[0], unsigned);\n\n    let a: [u32; 10] = mk_incr();\n    // XXX3\n    assert_eq!(a[9], 9);\n\n    let a: [u32; 10] = mk_incr2();\n    let expected = 10;\n    assert_eq!(a[9], expected);\n\n    // XXX4\n    let a = plus_one([0u32]);\n    assert_eq!(a[0], 1u16);\n\n    // XXX5\n    let a = nested_from_fn::<4>();\n    assert_eq!(a[3][3], 6);\n\n    // XXX6\n    let x = [2u32; 2];\n    let y = [2u32; 2];\n    let b = const_eq(x,y);\n    assert_eq!(b, true);\n}\n\n"
  },
  {
    "path": "test/array2d.rs",
    "content": "fn f(mut x: [[u32; 2]; 4]) -> bool {\n    x[0] = [ 1, 2 ];\n    let y: [[u32; 2]; 4] = [\n        [1, 2],\n        [3, 4],\n        [1, 2],\n        [3, 4],\n    ];\n    x == y\n}\n\nfn main() {\n    let mut y = [[1,2]; 4];\n    y[1] = [3, 4];\n    y[3] = [3, 4];\n    let actual = f(y);\n    let expected = true;\n    assert_eq!(actual, expected);\n}\n"
  },
  {
    "path": "test/castunsize.rs",
    "content": "struct S<U: ?Sized> {\n    foo: u32,\n    my_data: U,\n}\n\ntype T = S<[u32]>;\n\nfn main1() {\n    let x = S { foo: 0, my_data: [0 ; 4] };\n    let x: &T = &x;\n    assert_eq!(x.my_data[3],0);\n}\n\nfn main2<const K:usize>() {\n    let x = S { foo: 0, my_data: [0 ; K] };\n    let x: &T = &x;\n    assert_eq!(x.my_data[3],0);\n}\n\nfn main3() {\n    let x: Box<[u32]> = Box::new([0; 4]);\n    assert_eq!(x[3], 0);\n}\n\nfn main4<const K:usize>() {\n    let x: Box<[u32]> = Box::new([0; K]);\n    assert_eq!(x[3], 0);\n}\n\nfn main() {\n    main1();\n    main2::<5>();\n    main3();\n    main4::<5>();\n}\n"
  },
  {
    "path": "test/chunks.rs",
    "content": "fn main() {\n    let a = [ 0, 1, 2, 3, 4, 5, 6 ];\n    let mut i = 0;\n    // This one not supported -- all the other ones are.\n    for v in a {\n        i += v;\n    }\n    for v in a.iter() {\n        i += v;\n    }\n    for _ in a.chunks(2) {\n        i += 1;\n    }\n    for _ in a.chunks_exact(2) {\n        i += 1;\n    }\n    let expected = 28;\n    assert_eq!(i, expected);\n}\n"
  },
  {
    "path": "test/closure.rs",
    "content": "fn f() -> [[usize; 1]; 1] {\n    let s = [0; 1];\n    let a: [[usize; 1]; 1] = core::array::from_fn(|i| {\n        core::array::from_fn(|j| (s[0]+i+j))\n    });\n    a\n}\n\nfn main() {\n    let actual = f()[0][0];\n    let expected = 0;\n    assert_eq!(actual, expected);\n}\n"
  },
  {
    "path": "test/closure_fn_cast.rs",
    "content": "fn main(){\n    let f: fn(i32) -> i32 = |x| x + 42;\n    f(1);\n}\n"
  },
  {
    "path": "test/collision.rs",
    "content": "enum Either {\n  Left(i32),\n  Right(bool),\n}\nenum Direction {\n  Left(u64),\n  Middle,\n  Right(u64),\n}\nfn collision(a : Either, b : Direction) -> i32 {\n  let x = match a {\n    Either::Left(_) => 1,\n    Either::Right(_) => 2,\n  };\n  let y = match b {\n    Direction::Left(_) => 3,\n    Direction::Middle => 0,\n    Direction::Right(_) => 4,\n  };\n  x + y\n}\nfn main() {\n  assert!(collision(Either::Left(10), Direction::Right(20)) > 0);\n}\n"
  },
  {
    "path": "test/const_generics.rs",
    "content": "/* TEST 1, with data types -- doesn't work yet */\nstruct Pair<T, U, const N: usize, const M: usize> {\n    left: [ T; N ],\n    right: [ U; M ]\n}\n\nfn mk_pairs<T: Copy, U: Copy, const N: usize, const M: usize> (x: T, y: U) -> Pair<T, T, N, N> {\n    let a1 = [ x; N ];\n    let a2 = [ y; M ];\n    let p1 = Pair { left: a1, right: a2 };\n    let p2 = Pair { left: a2, right: a1 };\n    Pair { left: p1.left, right: p2.right }\n}\n\nfn main1() {\n    let Pair { left, right } = mk_pairs::<u32,u64,2,4>(0u32, 0u64);\n    let expected = 0u32;\n    assert_eq!(left[0], expected);\n    assert_eq!(left[1], expected);\n    assert_eq!(right[0], expected);\n    assert_eq!(right[1], expected);\n}\n\n/* TEST 2, too many trait bounds -- doesn't work yet */\n/*\nfn alloc2<const N: usize, const M: usize, T: Copy + Eq>(x: T) {\n    let a1 = [x; N];\n    let a2 = [x; M];\n    if a1[0] != a2[0] {\n        alloc2::<M, N, T>(x);\n    }\n}\n\nfn main() {\n    alloc2::<1,1, u32>(0);\n}\n*/\n\n/* TEST 3 */\nfn h<const FOO: usize>(x: u32) -> usize {\n    FOO\n}\n\nfn i<const FOO: usize>(x: u32) -> u32 {\n    x\n}\n\nfn f<const FOO: usize, const BAR: u32>(x: u32, y: usize) -> bool {\n    let arr1 = [ x; FOO ];\n    let arr2 = [ y; FOO ];\n    arr1[0] == BAR && arr2[0] == FOO\n}\n\nfn g<const BAR: usize, const FOO: u32>(x: u32, y: usize) -> bool {\n    f::<BAR, FOO>(x, y) && x == FOO && y == BAR\n}\n\nfn main3() {\n    let x = f::<1, 2>(0, 0) && g::<3, 4>(0, 0);\n    let expected = false;\n    assert_eq!(x, expected);\n}\n\n/* TEST 4 (Franziskus) */\nfn serialize<const OUT_LEN: usize>(re: &[u32]) -> [u8; OUT_LEN] {\n  let mut out = [0u8; OUT_LEN];\n  out[..4].copy_from_slice(&re[0].to_be_bytes());\n  out[4..].copy_from_slice(&re[1].to_be_bytes());\n  out\n}\n\nfn main() {\n    let s: [u8; 8] = serialize(&[1, 2]);\n    assert!(s[3] == 1);\n    assert!(s[7] == 2);\n}\n"
  },
  {
    "path": "test/core_cmp_lib.c",
    "content": "// this file provides the comparison implementations for various built-in types\n\n#include \"eurydice_glue.h\"\n\n// the implementation for `()` comparison -- the inputs are `&()`\n// as the function interface is `&self`\nbool core_cmp_impls__core__cmp__PartialEq_____for_____eq(void **x0, void **x1) {\n  return true;\n}\n"
  },
  {
    "path": "test/core_num.rs",
    "content": "fn main() {\n    let x = std::primitive::u32::BITS;\n    assert_eq!(x, 32)\n}\n"
  },
  {
    "path": "test/core_str_lib.c",
    "content": "// This file provides the C implementation of the `core::str` Rust library.\n// Notably, we assume `&str` to be represented by `Eurydice_str`.\n\n#include <stddef.h>\n\n// types\n\ntypedef struct Eurydice_str_s {\n    char* data;\n    size_t len;\n} Eurydice_str;\n\n// functions\n\nsize_t core_str__str__len(Eurydice_str s) {\n    return s.len;\n}\n"
  },
  {
    "path": "test/dst.rs",
    "content": "struct T2<U: ?Sized> {\n    header: usize,\n    my_data: U,\n}\n\nfn mk() -> Box<T2<[u32]>> {\n    let mut x = T2 { header: 0, my_data: [0u32; 4] };\n    x.my_data[1] = 2;\n    let y: Box<T2<[u32]>> = Box::new(x);\n    y\n}\n\n// ---\n\nstruct S<U: ?Sized> {\n    foo: u32,\n    my_data: U,\n}\n\ntype T = S<[u32]>;\n\nfn check_regular_field(x: Box<T>) {\n    assert_eq!(x.foo, 0);\n}\n\nfn check_var_field(x: Box<T>) {\n    assert_eq!(x.my_data[0], 0);\n}\n\nfn check_regular_field_ref(x: &T) {\n    assert_eq!(x.foo, 0);\n}\n\nfn check_var_field_ref(x: &T) {\n    assert_eq!(x.my_data[0], 0);\n}\n\nfn alloc() -> Box<T> {\n    Box::new(S { foo: 0, my_data: [ 0; 4 ] })\n}\n\n// ---\n\ntype T3 = S<[[u32; 3]]>;\n\nfn alloc3() -> Box<T3> {\n    Box::new(S { foo: 0, my_data: [ [0; 3]; 4 ] })\n}\n\nfn check_var_field_ref3(x: &T3) {\n    assert_eq!(x.my_data[0][0], 0);\n}\n\nfn main3() {\n    let x = alloc3();\n    check_var_field_ref3(&x);\n}\n\n// ---\n\nfn main4() {\n    let x: Box<[u32]> = Box::new([0; 4]);\n    let y = &x;\n    assert_eq!(x[3], 0);\n}\n\n// ---\n\nfn main() {\n    check_regular_field(alloc());\n    check_var_field(alloc());\n\n    let x = S { foo: 0, my_data: [ 0; 4 ] };\n    let x: &T = &x;\n    check_regular_field_ref(x);\n    check_var_field_ref(x);\n\n    main3();\n\n    assert_eq!((mk()).my_data[0], 0);\n    assert_eq!((mk()).my_data[1], 2);\n\n    main4();\n}\n"
  },
  {
    "path": "test/dyn_trait_struct_type.rs",
    "content": "trait Trait {\n  fn method(&self);\n}\n\n// impl Trait for i32 {\n//   fn method(&self) {\n//     assert!(*self > 0);\n//   }\n// }\n\nfn use_trait(t: &dyn Trait) {\n  t.method();\n}\nfn main() {\n  // use_trait(&100);\n}"
  },
  {
    "path": "test/floating_points.rs",
    "content": "fn main() {\n  let f : f32 = 1.0;\n  let arr = [f; 100];\n  let d = 1.0f64;\n  let arr2 = [d; 100];\n  assert_eq!(arr[0], 1.0);\n  assert_eq!(arr2[0], 1.0);\n  assert_eq!(arr.len(), 100);\n  assert_eq!(arr2.len(), 100);\n}"
  },
  {
    "path": "test/fn_cast.rs",
    "content": "fn id_ref<'a, T>(x: &'a T) -> &'a T {\n    x\n}\n\nfn applies<'a, 'b, T, R>(f : fn(&'a T) -> &'b R, arg : &'a T) -> &'b R {\n  f(arg)\n}\n\nfn main() {\n  assert_eq!(*applies(id_ref, &1), 1)\n}\n"
  },
  {
    "path": "test/fn_higher_order.rs",
    "content": "\nfn sum_lst<const N : usize>(lst : &[usize;N]) -> usize {\n  let mut sum = 0;\n  for i in 0 .. N { sum = sum + lst[i]; }\n  sum + N\n}\n\nfn more_sum_lst(l : &[i32; 3]) -> i32 {\n  let mut sum = 0;\n  for i in 0..3 { sum = sum + l[i]; }\n  sum\n}\n\nfn empty_ptr(f : fn() -> i32) -> i32 {\n  f()\n}\n\nfn unit_empty_ptr(f : fn()) {\n  f()\n}\n\nfn id<R>(r : R) -> R { r }\n\nfn compose_cg_apply<X : Copy,Y,const N : usize,Z>(\n  f : fn(&[X;N]) -> Y, \n  g : fn(Y) -> Z, \n  arg : &[X;N]) -> Z {\n  g(f(arg))\n}\n\nfn use_compose_cg() {\n  let x = compose_cg_apply(sum_lst, id, &[1,2,3,4,5]);\n  let y = compose_cg_apply(more_sum_lst, id, &[10,11,12]);\n  assert_eq!(x, 20);\n  assert_eq!(y, 33);\n}\n\nfn main() {\n    use_compose_cg();\n}\n"
  },
  {
    "path": "test/for.rs",
    "content": "pub fn other(input: &[u8]) -> u8 {\n    for i in 0..5 {\n        if i == 2 {\n            return 6;\n        }\n    }\n    input[0]\n}\n\nfn main(){}\n"
  },
  {
    "path": "test/global_ref.rs",
    "content": "const C_VAL : &&&() = &&&();\nstatic S_VAL : &&&i32 = &&&0;\n\nfn main() {\n  assert_eq!(***C_VAL, ());\n  assert!(***S_VAL == 0);\n}\n"
  },
  {
    "path": "test/i32_shl.rs",
    "content": "fn main() {\n    let x = -1i16 << 8;\n    assert_eq!(x, -256i16);\n\n    let y = ((-1i16 & 0xff00u16 as i16) << 8) >> 8;\n    assert_eq!(y, 0);\n}\n"
  },
  {
    "path": "test/inline_attributes.rs",
    "content": "\n#[inline]\nfn f () -> u32 {\n   1\n}\n\n#[inline(never)]\nfn g () -> u32 {\n   2\n}\n\n#[inline(always)]\nfn h () -> u32 {\n   3\n}\n\n\nfn main() {\n    let r = f() + g() + h();\n}\n"
  },
  {
    "path": "test/int_switch.rs",
    "content": "fn f() -> u32 {\n    return 0;\n}\n\nfn main() {\n    match f() {\n        0 => (),\n        1 => panic!(),\n        _ => panic!(),\n    }\n}\n"
  },
  {
    "path": "test/issue_102.rs",
    "content": "enum Error1 {\n    Reason1 = 1,\n    Reason2 = 2,\n}\n\nenum Error2 {\n    Reason1 = 3,\n    Reason2 = 4,\n}\n\nfn main() {\n}\n"
  },
  {
    "path": "test/issue_104.rs",
    "content": "trait Fun {\n    const VAL: u8;\n}\n\nstruct S {}\nimpl Fun for S {\n    const VAL: u8 = 5;\n}\n\nfn sth<F: Fun>() -> u8 {\n    F::VAL\n}\n\nfn call() -> u8 {\n    sth::<S>()\n}\n\nfn main() {\n    assert_eq!(call(), 5);\n}\n"
  },
  {
    "path": "test/issue_105.rs",
    "content": "fn inner() -> Result<(), u8> {\n    Err(1)\n}\n\nfn call_it() -> Result<(), u8> {\n    inner()?;\n    Ok(())\n}\n\nfn main() {\n    assert_eq!(call_it(), Err(1))\n}\n"
  },
  {
    "path": "test/issue_106.rs",
    "content": "struct MyStruct {\n    v: u8,\n}\n\nfn generate() -> MyStruct {\n    MyStruct { v: 5 }\n}\n\nfn use_it(x: &MyStruct) -> u8 {\n    x.v\n}\n\nfn use_ref() -> u8 {\n    use_it(&generate())\n}\n\nfn main() {\n}\n"
  },
  {
    "path": "test/issue_107.rs",
    "content": "struct MyStruct {}\n\ntrait Fun {\n    fn f() -> u8;\n}\n\nimpl Fun for MyStruct {\n    fn f() -> u8 {\n        5\n    }\n}\n\nfn generic_fun<F: Fun>() -> u8 {\n    F::f()\n}\n\nfn main() {\n}\n"
  },
  {
    "path": "test/issue_123.rs",
    "content": "enum Gamma2 {\n    V95_232 = 95_232,\n    V261_888 = 261_888,\n}\n\nenum E1 {\n    C1 = 0xffffffff,\n    C2 = -0xffffffff,\n    C3 = 0x0fffffff\n}\n\n#[derive(PartialEq)]\nenum E2 {\n    C1 = 0xff,\n    C2 = -1,\n}\n\nenum E3 {\n    C1 = 0xff\n}\n\nenum E4 {\n    C1 = 0x7f,\n    C2 = -0x7e\n}\n\nenum E {\n    One = 1,\n    Five = 5,\n}\n\nfn fun(e: E) -> i32 {\n    e as i32\n}\n\nfn main() {\n    assert_eq!(E2::C2 as isize, -1);\n    assert_eq!(fun(E::One), 1);\n}\n"
  },
  {
    "path": "test/issue_128.rs",
    "content": "enum E {\n    A = 1,\n    B = 2,\n}\n\nfn fun_a(_x: &[u8]) {}\nfn fun_b(_x: &[u8]) {}\n\nfn use_enum(e: E, x: &[u8]) {\n    match e {\n        E::A => fun_a(x),\n        E::B => fun_b(x),\n    }\n}\n\nfn main() {\n    use_enum(E::A, &[]);\n}\n"
  },
  {
    "path": "test/issue_14.rs",
    "content": "fn f(x: &mut [u8]) {}\n\nfn main() {\n    let mut x = [0; 1];\n    f(&mut x[..]);\n}\n"
  },
  {
    "path": "test/issue_212.rs",
    "content": "fn id_mut<'a, T>(x : &'a T) -> &'a T { x }\n\nfn main() {\n  let arr : [i32; 3] = [1,2,3];\n  let r : &[i32; 3] = id_mut(&arr);\n  assert!(r[0] > 0);\n}\n"
  },
  {
    "path": "test/issue_311.rs",
    "content": "fn use_debug(_d: &dyn core::fmt::Debug) { }\nfn main() { use_debug(&&1); }\n"
  },
  {
    "path": "test/issue_37.rs",
    "content": "fn b(x: &[u8]) -> [u8; 32] {\n    [0u8; 32]\n}\n\npub fn bb(x: &[u8]) -> [u8; 32] {\n    core::hint::black_box(b(x))\n}\n\nfn main() {\n}\n"
  },
  {
    "path": "test/issue_49.rs",
    "content": "pub fn f(a: usize, b: usize) -> usize {\n    a.min(b)\n}\n\nfn main() {\n    let expected = 0;\n    let actual = f(0, 0);\n    assert_eq!(expected, actual);\n}\n"
  },
  {
    "path": "test/issue_96.rs",
    "content": "pub struct MyStruct([u8; 5]);\nfn use_it(x: &MyStruct) {\n    let _ = x.0[0];\n}\n\npub struct MyStruct2([u8; 5], u32);\n\nfn use_it2(x: &MyStruct2) {\n    let _ = x.0[0];\n    let _ = x.1;\n}\n\nfn main() {\n    let x = MyStruct([0; 5]);\n    use_it(&x);\n    let x = MyStruct2([0; 5], 2);\n    use_it2(&x)\n}\n"
  },
  {
    "path": "test/issue_99.rs",
    "content": "type Val = [u8; 16];\nstruct S {\n    v: Option<Val>,\n}\nimpl S {\n    fn option_ref(&self) -> Option<&Val> {\n        self.v.as_ref()\n    }\n}\n\nfn main() {\n    let s: S = S { v: Some ([0; 16 ]) };\n    assert_eq!(s.option_ref().unwrap()[0], 0)\n}\n"
  },
  {
    "path": "test/issue_k630.rs",
    "content": "fn main(){\n   let v = [[2u32; 1]; 5];\n   assert_eq!(v[0][0], 2u32);\n}\n\n"
  },
  {
    "path": "test/issue_shift.rs",
    "content": "fn main() {\n    let x = -1i32;\n    let y = x << 1;\n    assert_eq!(y, -2);\n\n    let x = -1i8;\n    let y = x << 1;\n    assert_eq!(y, -2);\n\n    let x = -1i16;\n    let y = x << 1;\n    assert_eq!(y, -2);\n\n    let x = -1i64;\n    let y = x << 1;\n    assert_eq!(y, -2);\n}\n"
  },
  {
    "path": "test/libcrux-ml-dsa/CMakeLists.txt",
    "content": "# cmake -B build -G \"Ninja Multi-Config\"\n# cmake --build build\n# # For release (benchmarks)\n# cmake --build build --config Release\n\ncmake_minimum_required(VERSION 3.10..4.0)\n\nproject(libcrux-ml-kem\n    VERSION 0.1.0\n    LANGUAGES C CXX\n)\n\nset(CMAKE_C_STANDARD 11)\nset(CMAKE_CXX_STANDARD 20)\nset(CMAKE_OSX_ARCHITECTURES \"x86_64\")\n\nif(NOT MSVC)\n    # TODO: Clean up\n    add_compile_options(\n        -Wall\n\n        # -Wextra\n        # -pedantic\n        # -Wconversion\n        # -Wsign-conversion\n        $<$<CONFIG:DEBUG>:-g>\n        $<$<CONFIG:DEBUG>:-Og>\n        $<$<CONFIG:RELEASE>:-g>\n        $<$<CONFIG:RELEASE>:-O3>\n    )\nendif(NOT MSVC)\n\nset(CMAKE_COLOR_DIAGNOSTICS \"ON\")\n\nset(EURYDICE_ROOT \"../..\")\nset(OUT_DIR \"../../out/test-libcrux-ml-dsa\")\n\n# For LSP-based editors\nset(CMAKE_EXPORT_COMPILE_COMMANDS 1)\ninclude_directories(\n    ${PROJECT_SOURCE_DIR}\n    ${PROJECT_SOURCE_DIR}/intrinsics\n    ${OUT_DIR}\n    ${OUT_DIR}/internal\n    ${EURYDICE_ROOT}/include\n    ${EURYDICE_ROOT}/karamel/include\n)\nfile(GLOB SOURCES\n    ${OUT_DIR}/libcrux_mldsa44_portable.c\n    ${OUT_DIR}/libcrux_mldsa65_portable.c\n    ${OUT_DIR}/libcrux_mldsa87_portable.c\n    ${OUT_DIR}/libcrux_mldsa_core.c\n    ${OUT_DIR}/libcrux_mldsa_portable.c\n)\nfile(GLOB SOURCES_vec256\n    ${OUT_DIR}/libcrux_mldsa44_avx2.c\n    ${OUT_DIR}/libcrux_mldsa65_avx2.c\n    ${OUT_DIR}/libcrux_mldsa87_avx2.c\n    ${OUT_DIR}/libcrux_mldsa_avx2.c\n    ${OUT_DIR}/libcrux_sha3_avx2.c\n)\n\nif(${CMAKE_SYSTEM_NAME} MATCHES Linux)\n    add_compile_options(\n        -fPIC\n    )\nendif(${CMAKE_SYSTEM_NAME} MATCHES Linux)\n\n# if(${CMAKE_SYSTEM_NAME} MATCHES Linux AND CMAKE_BUILD_TYPE MATCHES \"Release\")\n#     add_compile_options(\n#         -flto\n#     )\n#     add_link_options(-flto)\n# endif(${CMAKE_SYSTEM_NAME} MATCHES Linux AND CMAKE_BUILD_TYPE MATCHES \"Release\")\n\nadd_library(ml_dsa SHARED ${SOURCES})\nadd_library(ml_dsa_static STATIC ${SOURCES})\n\n# This is only for local testing and we assume avx2 on x64.\nif(CMAKE_SYSTEM_PROCESSOR MATCHES \"x86_64|amd64|AMD64\")\n    message(STATUS \"Detected an x64 architecture\")\n    add_compile_definitions(LIBCRUX_X64)\n\n    add_library(ml_dsa_vec256 OBJECT ${SOURCES_vec256})\n    target_sources(ml_dsa_static PRIVATE $<TARGET_OBJECTS:ml_dsa_vec256>)\n    target_sources(ml_dsa PRIVATE $<TARGET_OBJECTS:ml_dsa_vec256>)\n\n    if(NOT MSVC)\n        target_compile_options(ml_dsa_vec256 PRIVATE\n            -mavx\n            -mavx2\n        )\n    endif(NOT MSVC)\nendif()\n\n# This is only for local testing and we assume neon on arm64.\nif(CMAKE_SYSTEM_PROCESSOR MATCHES \"aarch64|arm64|arm64v8\" AND DEFINED ENV{LIBCRUX_NEON})\n    message(STATUS \"Detected an arm64 architecture\")\n    add_compile_definitions(LIBCRUX_AARCH64)\n\n    add_library(ml_dsa_vec128 OBJECT ${SOURCES_vec128})\n    target_sources(ml_dsa_static PRIVATE $<TARGET_OBJECTS:ml_dsa_vec128>)\n    target_sources(ml_dsa PRIVATE $<TARGET_OBJECTS:ml_dsa_vec128>)\nendif()\n\n# --- Tests\nif(DEFINED ENV{LIBCRUX_UNPACKED})\n    add_compile_definitions(LIBCRUX_UNPACKED)\nendif(DEFINED ENV{LIBCRUX_UNPACKED})\n\n# Get gtests\ninclude(FetchContent)\nFetchContent_Declare(googletest\n    GIT_REPOSITORY https://github.com/google/googletest.git\n    GIT_TAG v1.17.0\n)\n\n# For Windows: Prevent overriding the parent project's compiler/linker settings\nset(gtest_force_shared_crt ON CACHE BOOL \"\" FORCE)\nFetchContent_MakeAvailable(googletest)\n\n# Get nlohmann json\nFetchContent_Declare(json\n    GIT_REPOSITORY https://github.com/nlohmann/json.git\n    GIT_TAG v3.11.3\n)\nFetchContent_MakeAvailable(json)\n\nadd_executable(ml_dsa_test\n    ${PROJECT_SOURCE_DIR}/tests/mldsa65.cc\n)\ntarget_link_libraries(ml_dsa_test PRIVATE\n    ml_dsa_static\n    gtest_main\n    nlohmann_json::nlohmann_json\n)\n"
  },
  {
    "path": "test/libcrux-ml-dsa/c.yaml",
    "content": "files:\n  # INTRINSICS\n\n  - name: libcrux_intrinsics_neon\n    library: true\n    inline_static: true\n    api:\n      - [libcrux_intrinsics, arm64]\n\n  - name: libcrux_intrinsics_avx2\n    library: true\n    inline_static: true\n    api:\n      - [libcrux_intrinsics, avx2]\n\n  # SHA3 (no mention of libcrux_mldsa in this section, please)\n\n  # Keep the per-target seperation idea: each SHA3 variant in its own file\n  - name: libcrux_sha3_neon\n    api:\n      - [libcrux_sha3, neon, \"*\"]\n    private:\n      # When patterns is the only key of private, it is optional, and one may\n      # just specify a list of patterns that are understood to match patterns\n      # (not monomorphizations)\n      patterns:\n        - [libcrux_sha3, neon, \"*\"]\n        - [libcrux_sha3, simd, arm64, \"*\"]\n      monomorphizations_of:\n        - [libcrux_sha3, neon, \"*\"]\n        - [libcrux_sha3, simd, arm64, \"*\"]\n      monomorphizations_using:\n        - [libcrux_sha3, neon, \"*\"]\n        - [libcrux_sha3, simd, arm64, \"*\"]\n      monomorphizations_exact:\n        - [libcrux_sha3, generic_keccak, \"KeccakState_fc\"]\n    include_in_h:\n      - '\"intrinsics/libcrux_intrinsics_arm64.h\"'\n\n  - name: libcrux_sha3_avx2\n    api:\n      - [libcrux_sha3, avx2, \"*\"]\n    private:\n      patterns:\n        - [libcrux_sha3, avx2, \"*\"]\n        - [libcrux_sha3, simd, avx2, \"*\"]\n        - [libcrux_sha3, generic_keccak, simd256, \"*\"]\n      monomorphizations_exact:\n        - [libcrux_sha3, generic_keccak, KeccakState_55]\n        - [Eurydice, arr_05]\n        - [Eurydice, arr_c0]\n      monomorphizations_of:\n        - [libcrux_sha3, avx2, \"*\"]\n        - [libcrux_sha3, simd, avx2, \"*\"]\n        - [libcrux_sha3, generic_keccak, simd256, \"*\"]\n      monomorphizations_using:\n        - [libcrux_sha3, avx2, \"*\"]\n        - [libcrux_sha3, simd, avx2, \"*\"]\n        - [libcrux_sha3, generic_keccak, simd256, \"*\"]\n    include_in_h:\n      - '\"intrinsics/libcrux_intrinsics_avx2.h\"'\n\n  # Public API header for SHA3\n  - name: libcrux_sha3\n    inline_static: true\n    api:\n      exact:\n        - [libcrux_sha3, hash]\n        - [libcrux_sha3, sha224]\n        - [libcrux_sha3, sha256]\n        - [libcrux_sha3, sha384]\n        - [libcrux_sha3, sha44]\n        - [libcrux_sha3, keccakx1]\n        - [libcrux_sha3, shake128]\n        - [libcrux_sha3, shake256]\n        - [libcrux_sha3, shake128_ema]\n        - [libcrux_sha3, shake256_ema]\n        - [libcrux_sha3, sha224_ema]\n        - [libcrux_sha3, sha256_ema]\n        - [libcrux_sha3, sha384_ema]\n        - [libcrux_sha3, sha44_ema]\n        - [libcrux_sha3, portable, sha224]\n        - [libcrux_sha3, portable, sha256]\n        - [libcrux_sha3, portable, sha384]\n        - [libcrux_sha3, portable, sha44]\n        - [libcrux_sha3, portable, keccakx1]\n        - [libcrux_sha3, portable, shake128]\n        - [libcrux_sha3, portable, shake256]\n\n  # Common parts of SHA3 (this catches stuff that hasn't matched above). Must\n  # come after the (more precise) patterns above concerning platform-specific hash_functions\n  - name: libcrux_sha3_internal\n    internal:\n      patterns:\n        - [libcrux_sha3, \"*\"]\n      monomorphizations_of:\n        - [libcrux_sha3, \"*\"]\n      monomorphizations_using:\n        - [libcrux_sha3, \"*\"]\n    inline_static: true\n\n  # Here, we apply the same strategy that works for bundling:\n  # - start with the most specific stuff: MLDSA-XX-AVX2\n  # - move on to less specific stuff: MLDSA-AVX2 (the \"leftovers\", or common\n  #   parts for AVX2) -- it's easy to debug from there because if something ends\n  #   up in MLDSA-AVX2 then it can be identified and moved to one of the\n  #   individual variants\n  # - then on to portable, same deal\n  # - finish with a catch-all where everything is marked as private\n\n  # MLDSA-44\n  - name: libcrux_mldsa44_avx2\n    target: \"avx2\"\n    include_in_h:\n      - '\"intrinsics/libcrux_intrinsics_avx2.h\"'\n    api:\n      patterns:\n        - [libcrux_ml_dsa, ml_dsa_44, avx2, \"*\"]\n      monomorphizations_of:\n        - [libcrux_ml_dsa, ml_dsa_44, avx2, \"*\"]\n\n  # MLDSA-65\n  - name: libcrux_mldsa65_avx2\n    target: \"avx2\"\n    include_in_h:\n      - '\"intrinsics/libcrux_intrinsics_avx2.h\"'\n    api:\n      patterns:\n        - [libcrux_ml_dsa, ml_dsa_65, avx2, \"*\"]\n      monomorphizations_of:\n        - [libcrux_ml_dsa, ml_dsa_65, avx2, \"*\"]\n\n  # MLDSA-87\n  - name: libcrux_mldsa87_avx2\n    target: \"avx2\"\n    include_in_h:\n      - '\"intrinsics/libcrux_intrinsics_avx2.h\"'\n    api:\n      patterns:\n        - [libcrux_ml_dsa, ml_dsa_87, avx2, \"*\"]\n      monomorphizations_of:\n        - [libcrux_ml_dsa, ml_dsa_87, avx2, \"*\"]\n\n  # MLDSA: AVX2 stuff shared across variants\n  - name: libcrux_mldsa_avx2\n    target: \"avx2\"\n    include_in_h:\n      - '\"intrinsics/libcrux_intrinsics_avx2.h\"'\n    api:\n      patterns:\n        - [libcrux_ml_dsa, samplex4, avx2, \"*\"]\n        - [libcrux_ml_dsa, simd, avx2, \"*\"]\n        - [libcrux_ml_dsa, hash_functions, simd256, \"*\"]\n        - [libcrux_ml_dsa, ml_dsa_generic, instantiations, avx2, \"*\"]\n      monomorphizations_of:\n        - [libcrux_ml_dsa, samplex4, avx2, \"*\"]\n        - [libcrux_ml_dsa, simd, avx2, \"*\"]\n        - [libcrux_ml_dsa, hash_functions, simd256, \"*\"]\n        - [libcrux_ml_dsa, ml_dsa_generic, instantiations, avx2, \"*\"]\n      monomorphizations_using:\n        - [core, arch, x86, \"__m256i\"]\n        - [libcrux_ml_dsa, samplex4, avx2, \"*\"]\n        - [libcrux_ml_dsa, simd, avx2, \"*\"]\n        - [libcrux_ml_dsa, hash_functions, simd256, \"*\"]\n        - [libcrux_ml_dsa, ml_dsa_generic, instantiations, avx2, \"*\"]\n      monomorphizations_exact:\n        - [core_core_arch_x86___m256i_x2]\n\n  - name: libcrux_mldsa44_portable\n    api:\n      patterns:\n        - [libcrux_ml_dsa, ml_dsa_44, portable, \"*\"]\n      monomorphizations_of:\n        - [libcrux_ml_dsa, ml_dsa_44, portable]\n\n  - name: libcrux_mldsa65_portable\n    api:\n      patterns:\n        - [libcrux_ml_dsa, ml_dsa_65, portable, \"*\"]\n      monomorphizations_of:\n        - [libcrux_ml_dsa, ml_dsa_65, portable]\n\n  - name: libcrux_mldsa87_portable\n    api:\n      patterns:\n        - [libcrux_ml_dsa, ml_dsa_87, portable, \"*\"]\n      monomorphizations_of:\n        - [libcrux_ml_dsa, ml_dsa_87, portable]\n\n  - name: libcrux_mldsa_portable\n    api:\n      patterns:\n        - [libcrux_ml_dsa, samplex4, portable, \"*\"]\n        - [libcrux_ml_dsa, hash_functions, portable, \"*\"]\n        - [libcrux_ml_dsa, ml_dsa_generic, instantiations, portable, \"*\"]\n      monomorphizations_of:\n        - [libcrux_ml_dsa, samplex4, portable, \"*\"]\n        - [libcrux_ml_dsa, hash_functions, portable, \"*\"]\n        - [libcrux_ml_dsa, ml_dsa_generic, instantiations, portable, \"*\"]\n      monomorphizations_using:\n        - [libcrux_ml_dsa, samplex4, portable, \"*\"]\n        - [libcrux_ml_dsa, hash_functions, portable, \"*\"]\n        - [libcrux_ml_dsa, ml_dsa_generic, instantiations, portable, \"*\"]\n\n  # MLDSA: catch-all for things that have not matched earlier\n  - name: libcrux_mldsa_core\n    private:\n      monomorphizations_of:\n        - [ \"*\" ]\n      patterns:\n        - [ \"*\" ]\n\nnaming:\n  skip_prefix:\n    - [ core, core_arch, arm_shared, neon ]\n    - [ core, core_arch, x86 ]\n    - [libcrux_intrinsics, arm64]\n    - [libcrux_intrinsics, avx2]\n"
  },
  {
    "path": "test/libcrux-ml-dsa/tests/mldsa65.cc",
    "content": "/*\n *    Copyright 2023 Cryspen Sarl\n *\n *    Licensed under the Apache License, Version 2.0 or MIT.\n *    - http://www.apache.org/licenses/LICENSE-2.0\n *    - http://opensource.org/licenses/MIT\n */\n\n#include <gtest/gtest.h>\n\n#include <fstream>\n#include <nlohmann/json.hpp>\n#include <vector>\n\n#include \"libcrux_mldsa65_portable.h\"\n#include \"libcrux_sha3.h\"\n\nusing namespace std;\n\ntypedef vector<uint8_t> bytes;\n\nEurydice_borrow_slice_u8 mk_borrow_slice_u8(const uint8_t *x, size_t len) {\n  Eurydice_borrow_slice_u8 s = {0};\n  s.ptr = x;\n  s.meta = len;\n  return s;\n}\n\nTEST(MlDsa65TestPortable, ConsistencyTest) {\n  // Generate key pair\n  Eurydice_arr_60 keygen_rand = {0};\n  memset(keygen_rand.data, 0x13, 32);\n\n  Eurydice_arr_d1 signing_key = {0};\n  Eurydice_arr_4a verification_key = {0};\n  libcrux_ml_dsa_ml_dsa_65_portable_generate_key_pair_mut(\n      keygen_rand, &signing_key, &verification_key);\n\n  // Sign\n  uint8_t msg[79] = {0};\n  Eurydice_arr_60 sign_rand = {0};\n  memset(sign_rand.data, 0x13, 32);\n  uint8_t context[3] = {0};\n\n  auto msg_slice = mk_borrow_slice_u8((uint8_t *)msg, 79);\n  auto context_slice = mk_borrow_slice_u8((uint8_t *)context, 3);\n  Eurydice_arr_96 signature = {0};\n  auto signature_result = libcrux_ml_dsa_ml_dsa_65_portable_sign_mut(\n      &signing_key, msg_slice, context_slice, sign_rand, &signature);\n  EXPECT_EQ(signature_result.tag, core_result_Ok);\n\n  // Verify\n  auto result = libcrux_ml_dsa_ml_dsa_65_portable_verify(\n      &verification_key, msg_slice, context_slice, &signature);\n\n  EXPECT_EQ(result.tag, core_result_Ok);\n}\n\n#ifdef LIBCRUX_X64\n#include \"libcrux_mldsa65_avx2.h\"\n\nTEST(MlDsa65TestAvx2, ConsistencyTest) {\n  Eurydice_arr_60 keygen_rand = {0};\n  memset(keygen_rand.data, 0x13, 32);\n  auto key_pair = libcrux_ml_dsa_ml_dsa_65_avx2_generate_key_pair(keygen_rand);\n\n  // Sign\n  uint8_t msg[79] = {0};\n  Eurydice_arr_60 sign_rand = {0};\n  memset(sign_rand.data, 0x13, 32);\n  uint8_t context[3] = {0};\n\n  auto msg_slice = mk_borrow_slice_u8((uint8_t *)msg, 79);\n  auto context_slice = mk_borrow_slice_u8((uint8_t *)context, 3);\n  auto signature_result = libcrux_ml_dsa_ml_dsa_65_avx2_sign(\n      &key_pair.signing_key, msg_slice, context_slice, sign_rand);\n  EXPECT_EQ(signature_result.tag, Ok);\n  auto signature = signature_result.val.case_Ok;\n\n  // Verify\n  auto result = libcrux_ml_dsa_ml_dsa_65_avx2_verify(\n      &key_pair.verification_key, msg_slice, context_slice, &signature);\n\n  EXPECT_EQ(result.tag, Ok);\n}\n#endif  // LIBCRUX_X64\n\nclass KAT {\n public:\n  bytes key_generation_seed;\n  bytes sha3_256_hash_of_verification_key;\n  bytes sha3_256_hash_of_signing_key;\n  bytes message;\n  bytes signing_randomness;\n  bytes sha3_256_hash_of_signature;\n};\n\nvector<uint8_t> from_hex(const string &hex) {\n  if (hex.length() % 2 == 1) {\n    throw invalid_argument(\"Odd-length hex string\");\n  }\n\n  int len = static_cast<int>(hex.length()) / 2;\n  vector<uint8_t> out(len);\n  for (int i = 0; i < len; i += 1) {\n    string byte = hex.substr(2 * i, 2);\n    out[i] = static_cast<uint8_t>(strtol(byte.c_str(), nullptr, 16));\n  }\n\n  return out;\n}\n\nstring bytes_to_hex(const vector<uint8_t> &data) {\n  stringstream hex(ios_base::out);\n  hex.flags(ios::hex);\n  for (const auto &byte : data) {\n    hex << setw(2) << setfill('0') << int(byte);\n  }\n  return hex.str();\n}\n\nstring bytes_to_hex(const uint8_t *data, size_t len) {\n  stringstream hex(ios_base::out);\n  hex.flags(ios::hex);\n  for (size_t i = 0; i < len; ++i) {\n    hex << setw(2) << setfill('0') << int(data[i]);\n  }\n  return hex.str();\n}\n\nvector<KAT> read_kats(string path) {\n  ifstream kat_file(path);\n  nlohmann::json kats_raw;\n  kat_file >> kats_raw;\n\n  vector<KAT> kats;\n\n  // Read test group\n  for (auto &kat_raw : kats_raw.items()) {\n    auto kat_raw_value = kat_raw.value();\n\n    kats.push_back(KAT{\n        from_hex(kat_raw_value[\"key_generation_seed\"]),\n        from_hex(kat_raw_value[\"sha3_256_hash_of_verification_key\"]),\n        from_hex(kat_raw_value[\"sha3_256_hash_of_signing_key\"]),\n        from_hex(kat_raw_value[\"message\"]),\n        from_hex(kat_raw_value[\"signing_randomness\"]),\n        from_hex(kat_raw_value[\"sha3_256_hash_of_signature\"]),\n    });\n  }\n\n  return kats;\n}\n\nTEST(MlDsa65TestPortable, NISTKnownAnswerTest) {\n  // XXX: This should be done in a portable way.\n  auto kats = read_kats(\"tests/nistkats-65.json\");\n\n  Eurydice_arr_60 keygen_rand = {0};\n  Eurydice_arr_60 sign_rand = {0};\n\n  for (auto kat : kats) {\n    // Generate key pair\n    memcpy(keygen_rand.data, kat.key_generation_seed.data(), 32);\n\n    Eurydice_arr_d1 signing_key = {0};\n    Eurydice_arr_4a verification_key = {0};\n    libcrux_ml_dsa_ml_dsa_65_portable_generate_key_pair_mut(\n        keygen_rand, &signing_key, &verification_key);\n\n    auto vk_hash =\n        libcrux_sha3_sha256(mk_borrow_slice_u8(verification_key.data, 1952U));\n    EXPECT_EQ(0, memcmp(vk_hash.data,\n                        kat.sha3_256_hash_of_verification_key.data(), 32));\n\n    auto sk_hash =\n        libcrux_sha3_sha256(mk_borrow_slice_u8(signing_key.data, 4032U));\n    EXPECT_EQ(\n        0, memcmp(sk_hash.data, kat.sha3_256_hash_of_signing_key.data(), 32));\n\n    // Sign\n    memcpy(sign_rand.data, kat.signing_randomness.data(), 32);\n    Eurydice_borrow_slice_u8 context = {0};\n\n    auto msg_slice = mk_borrow_slice_u8(kat.message.data(), kat.message.size());\n    Eurydice_arr_96 signature = {0};\n    auto signature_result = libcrux_ml_dsa_ml_dsa_65_portable_sign_mut(\n        &signing_key, msg_slice, context, sign_rand, &signature);\n    EXPECT_EQ(signature_result.tag, core_result_Ok);\n\n    auto sig_hash =\n        libcrux_sha3_sha256(mk_borrow_slice_u8(signature.data, 3309U));\n    EXPECT_EQ(0,\n              memcmp(sig_hash.data, kat.sha3_256_hash_of_signature.data(), 32));\n\n    // Verify\n    auto result = libcrux_ml_dsa_ml_dsa_65_portable_verify(\n        &verification_key, msg_slice, context, &signature);\n    EXPECT_EQ(result.tag, core_result_Ok);\n  }\n}\n\n#ifdef LIBCRUX_X64\nTEST(MlDsa65TestAvx2, NISTKnownAnswerTest) {\n  // XXX: This should be done in a portable way.\n  auto kats = read_kats(\"tests/nistkats-65.json\");\n\n  Eurydice_arr_60 keygen_rand = {0};\n  Eurydice_arr_60 sign_rand = {0};\n\n  for (auto kat : kats) {\n    // Generate key pair\n    memcpy(keygen_rand.data, kat.key_generation_seed.data(), 32);\n\n    Eurydice_arr_d10 signing_key = {0};\n    Eurydice_arr_4a verification_key = {0};\n    libcrux_ml_dsa_ml_dsa_65_avx2_generate_key_pair_mut(\n        keygen_rand, &signing_key, &verification_key);\n\n    auto vk_hash =\n        libcrux_sha3_sha256(mk_borrow_slice_u8(verification_key.data, 1952U));\n    EXPECT_EQ(0, memcmp(vk_hash.data,\n                        kat.sha3_256_hash_of_verification_key.data(), 32));\n\n    auto sk_hash =\n        libcrux_sha3_sha256(mk_borrow_slice_u8(signing_key.data, 4032U));\n    EXPECT_EQ(\n        0, memcmp(sk_hash.data, kat.sha3_256_hash_of_signing_key.data(), 32));\n\n    // Sign\n    memcpy(sign_rand.data, kat.signing_randomness.data(), 32);\n    Eurydice_borrow_slice_u8 context = {0};\n\n    auto msg_slice = mk_borrow_slice_u8(kat.message.data(), kat.message.size());\n    Eurydice_arr_96 signature = {0};\n    auto signature_result = libcrux_ml_dsa_ml_dsa_65_avx2_sign_mut(\n        &signing_key, msg_slice, context, sign_rand, &signature);\n    EXPECT_EQ(signature_result.tag, Ok);\n\n    auto sig_hash =\n        libcrux_sha3_sha256(mk_borrow_slice_u8(signature.data, 3309U));\n    EXPECT_EQ(0,\n              memcmp(sig_hash.data, kat.sha3_256_hash_of_signature.data(), 32));\n\n    // Verify\n    auto result = libcrux_ml_dsa_ml_dsa_65_avx2_verify(\n        &verification_key, msg_slice, context, &signature);\n    EXPECT_EQ(result.tag, Ok);\n  }\n}\n#endif  // #ifdef LIBCRUX_X64\n"
  },
  {
    "path": "test/libcrux-ml-dsa/tests/nistkats-65.json",
    "content": "[\n    {\n        \"key_generation_seed\": \"7c9935a0b07694aa0c6d10e4db6b1add2fd81a25ccb148032dcd739936737f2d\",\n        \"sha3_256_hash_of_verification_key\": \"67099a6aed1ca9dd645a73261cead798ba29e4a15ede3a469ad4cb620b0296be\",\n        \"sha3_256_hash_of_signing_key\": \"bf3a87a7854f5734d73f9130d76ab6d25f9677c30e2398a1268507997d0bd1dc\",\n        \"message\": \"d81c4d8d734fcbfbeade3d3f8a039faa2a2c9957e835ad55b22e75bf57bb556ac8\",\n        \"signing_randomness\": \"8626ed79d451140800e03b59b956f8210e556067407d13dc90fa9e8b872bfb8f\",\n        \"sha3_256_hash_of_signature\": \"190a7e1432955924b6fede77eddf4d6cd9eab49a7d254cd8bca8b7d6fd8d7ac6\"\n    },\n    {\n        \"key_generation_seed\": \"4b622de1350119c45a9f2e2ef3dc5df50a759d138cdfbd64c81cc7cc2f513345\",\n        \"sha3_256_hash_of_verification_key\": \"114dbfea406d98227a7e962050ed302be8b3be65e246416cc15465e07bcc39cf\",\n        \"sha3_256_hash_of_signing_key\": \"d64d4b4d0e55508a5520ad2ad9453da553dd2c31652574fd1981790df01e9547\",\n        \"message\": \"225d5ce2ceac61930a07503fb59f7c2f936a3e075481da3ca299a80f8c5df9223a073e7b90e02ebf98ca2227eba38c1ab2568209e46dba961869c6f83983b17dcd49\",\n        \"signing_randomness\": \"e82fcc97ca60ccb27bf6938c975658aeb8b4d37cffbde25d97e561f36c219ade\",\n        \"sha3_256_hash_of_signature\": \"e1fa1f379451b6acae60c25c5e0a56254ee8e3ed3e6040b0d1f782fb0a547d34\"\n    },\n    {\n        \"key_generation_seed\": \"1d836e889e46259bcd1ccd2b369583c5b47cfbb919ec2b72c280247cb15a5569\",\n        \"sha3_256_hash_of_verification_key\": \"dcad3c37aa5fa8c3b7d2ff78d98c7bcdbd9c7a44091f28a5e85bda9831279856\",\n        \"sha3_256_hash_of_signing_key\": \"dc0800502b0fb99a53414637e7c64b5b87413a7e2abaaf4dfaf8998cee95a68b\",\n        \"message\": \"2b8c4b0f29363eaee469a7e33524538aa066ae98980eaa19d1f10593203da2143b9e9e1973f7ff0e6c6aaa3c0b900e50d003412efe96deece3046d8c46bc7709228789775abdf56aed6416c90033780cb7a4984815da1b14660dcf34aa34bf82cebbcf\",\n        \"signing_randomness\": \"f333d36590910e7a5a6cbe567bcdd154137eef62b92bf8dc1fdc900e7c194e5f\",\n        \"sha3_256_hash_of_signature\": \"a78eb70c8cd092f86fc98d7ffb80fdfd2ecacf2f80aa17c8da452173d5d29cce\"\n    },\n    {\n        \"key_generation_seed\": \"539577cb7f2088fbedff1b53f235d607321857db32bba645f8df3a89dd426552\",\n        \"sha3_256_hash_of_verification_key\": \"2737f34481756da4e5ac813117a68d8d3cc705600df3d8e1cecab3554ec5bee8\",\n        \"sha3_256_hash_of_signing_key\": \"a90a7c5420121a3ea1012d9535ddb2499bb718530d77963bca350e6a438fd64d\",\n        \"message\": \"2f7af5b52a046471efcd720c9384919be05a61cde8e8b01251c5ab885e820fd36ed9ff6fdf45783ec81a86728cbb74b426adff96123c08fac2bc6c58a9c0dd71761292262c65f20df47751f0831770a6bb7b3760bb7f5efffb6e11ac35f353a6f24400b80b287834e92c9cf0d3c949d6dca31b0b94e0e3312e8bd02174b170c2ca9355fe\",\n        \"signing_randomness\": \"f52a43f5358999ddbe311866dedcf629fbd5ae94919abde9fdebdaf93bb0c847\",\n        \"sha3_256_hash_of_signature\": \"f644f588237fce0d20aacf7147eb4d6e36eee0da44b79ad279e1e67265e07fa0\"\n    },\n    {\n        \"key_generation_seed\": \"2ca59c6cf33c53803749f69ef5abfa9482fcee7efd87fbf17135ecc3ff3fd7f7\",\n        \"sha3_256_hash_of_verification_key\": \"02c5c3af108fefbe00d706bef947cc8550e6af31de2f38b7c30d11d0c468ff3f\",\n        \"sha3_256_hash_of_signing_key\": \"1dfdd366de63ad9b4dccbbe5df4c8826c3e47abee46fe08b2ecd87dda60d65b7\",\n        \"message\": \"1cdf0ae1124780a8ff00318f779a3b86b3504d059ca7ab3fe4d6eae9fd46428d1dabb704c0735a8fe8708f409741017b723d9a304e54fdc5789a7b0748c2464b7308ac9665115644c569ae253d5205751342574c03346dddc1950a6273546616b96d0c5ece0a044af0edefbe445f9ae37da5afb8d22a56d9fd1801425a0a276f48431d7af039521e549551481391fe5f4ebfb7644d9f9782d83a95137e84ea3aeb3c2f8099\",\n        \"signing_randomness\": \"a685acf5e2640f2d085efd1c9cebe815e042482a79694c32e28e97fad3bef590\",\n        \"sha3_256_hash_of_signature\": \"841ad87bff6ab73ddd2460bd453d60a809054cbf3a0764f1fccdb2991c0b13ee\"\n    },\n    {\n        \"key_generation_seed\": \"e17e72290e49a44c9c534f211195257cf13b0d45405782ceda2d7f982a551721\",\n        \"sha3_256_hash_of_verification_key\": \"1b3a0546b954f30564f22a7cef7e0ab4aa3b3431afa6126be936b7ce26a43348\",\n        \"sha3_256_hash_of_signing_key\": \"6e12929b831884e079a3dfccd68893385339bac3412647d229a3ac2c5138ca4e\",\n        \"message\": \"dbe5b6c299b44f8d60fa972a336df789ef4534ec9ba90df92ad401d1907951eb6285eda8f134277ab0a1145001c34e392187122506aa2dbb8617d7943a129eb5c07df133d7ccde94a7cb7f1795c62493ed375353d1f044257da799f7d112c174fbc35687e2f87fefbe2d83d29d7314b30a749fe41b1b81095638f112bc4563420af235280e466ffbe7050c4937c60fc18d1a6025bcbd489f0c538e088e906abe8597e2c8ebb64f01d225c847aae4b77bae6eba9269962c4b94a9732ceaa2cb4093d442ffbcdd\",\n        \"signing_randomness\": \"bf7fe774845dd2519943a685217bbb9e641acf9570468e47fc0b6b908271cd3c\",\n        \"sha3_256_hash_of_signature\": \"46b78160fed9cc2cce9951f2649f1a46d623bbc5f74f652fe5696e1ee0dc568c\"\n    },\n    {\n        \"key_generation_seed\": \"3b7388e675de5c59a78af095481c7dd999c6eea898595b1e7dcda7edc3a2c25c\",\n        \"sha3_256_hash_of_verification_key\": \"e2e718981a185c4717207288ce80e5976e7fc21749aeee25171d49e73d691abe\",\n        \"sha3_256_hash_of_signing_key\": \"3ba60520156c6d8b72de92264d05534f3436948a7b5514efa1e9e99cba742bb2\",\n        \"message\": \"0073bee97fc97c0fbc750d474aeb93189f061e1a5cf6600c04fb0464338ec7e85252f94fcbc7b2bd00e438480d9af3add92a92e3e2e8acb55077c3278fc7503988a76e9b6062996b20889aa55b343d5a003c8a8852d738f955799fa3426be5ccd3aa6b6eda04d4884941ffc0b69c5acf12b347a74d0580cc3335ba816200f87674a4c1d98097c70f2f27c74e94a661850610ecf4847ab5b58344f958c5719e06ba396225bbe21acb0fdc512b885d391e11b0c0ed5ce6b5dd8faff91f50025c69d43072f7706d80d9fd786e1104125d79a5f4b5fd838815d44fc8b1ab678078cc174dde970d448b\",\n        \"signing_randomness\": \"83963a577ad1ff81ef4afe4945fea5b2fcbdeb6ac3dd714c3d9422cc5039066f\",\n        \"sha3_256_hash_of_signature\": \"7b897f468c83531fd8443d3a6b516571b3e90f31aae15a55b488e36f382cf7c4\"\n    },\n    {\n        \"key_generation_seed\": \"dc9f40cabe2e8e4f3d1538fbc1ada27b61b99081455ab0c4c41b5b3da8101000\",\n        \"sha3_256_hash_of_verification_key\": \"76c003fc56cd54337937068f126cf361911dc0a4776245bf64c0f52668b7be4b\",\n        \"sha3_256_hash_of_signing_key\": \"6a3cc7065430325595c623f71d497594f6df905a520d51c3205d000c79271d8c\",\n        \"message\": \"a1586245d81f96bd8ee81aa30f10c0adb343d74cf72c4dff71550c12873af89fa1874d4731c996243c3749af3f6188ffe9fa45430549045134eb29ef3cec37e72904aa082b1c6161e6b52361e49af4933a8d8c0734f21cafd7467b0c02876f43211d6122e3e735fe36064df7a0c91449237c2bc7c3a78ac7bb0f9567f2576f05802c872adf183a87aa3b8217188f2f3535f877724f35b29e545de4bcf258f13bbc7edd8c6587f733c9691f74b4151cf8c060c3ae9e8d49fe7c77bf477dc9f23fd0f0b67320275529034b84f94176730923c03aa50f9584d9c2d60b8dccf85a13f243f30a51abefbbf2cda602bf3d75e849eb92422b808416c7e56b046ce38e4677ad24d23d7237a9\",\n        \"signing_randomness\": \"d18cbd60c7a706d7ce6206aaea7ff817ddcb25d36fd0f800f0c3b38ce5853c76\",\n        \"sha3_256_hash_of_signature\": \"423624f744e03724b7d8709c118d43e0973d93e67cfa3bee39e21704e4bc9bd7\"\n    },\n    {\n        \"key_generation_seed\": \"1dade637ae98c393260f5bbbe288373100dd7af37eba913c528d2b7b998767cb\",\n        \"sha3_256_hash_of_verification_key\": \"e72f681049c6c7f28c7bd96d98fe147dc8d388661ea2af15696bcd5973359f9b\",\n        \"sha3_256_hash_of_signing_key\": \"daddc36619a69d5088f7f8f97d73b7043a62886a0f2d6e538ec0abb70a8403d4\",\n        \"message\": \"9366ed7b3b623c411448b634446f1a3faabdd163a6cc1e2bcae4a98703cd8cee441405892fba051be2a586a6950a5ef73a255e5f86b0d7212e0c51c3bc79be4b88e76ed6f043fef3204faf044bfb1ed722d61eb5d0b74c66a257e8ac3a2206273c80d2ec2123a4dbb715d60118d99ed7322e38f1562f82379138da3ddb8baa7ce61ab729afc3748c0134633cf45a9973c05c75d04e82f631845427626b5799dc07ddf830ba01e8bc6236bb6d03b37d949dbb29eec7dfe60fbc17ea590956d251539792016e2a8b01e70476961bc9ada43cda682d0caa4fcc58810bba1a673ef8f6bc90baee701e8e4f7c04a346ca56c7b2862ff57756ce6cd1ee22d677bcdaa896eae96f87870e032c18b6c6a0c1a191fae2ed487ce55296cc4b6339eac9e8a742bd0a44c3525cc750\",\n        \"signing_randomness\": \"f4ea973b229c69b772e8fd400091204dd9c4c453ef412830e0b9e3560f058b52\",\n        \"sha3_256_hash_of_signature\": \"565aabe7a4bcaeed31502e48f44b340bb6c8fd384b931b4d118904dfe845d878\"\n    },\n    {\n        \"key_generation_seed\": \"8866693cee12b909e32a0c64381796633666417e1246b51a2643564b464b4113\",\n        \"sha3_256_hash_of_verification_key\": \"a12e36541fa21aa9fc1fd0e2e4d3e1575a7c62b6d4ff94d4e2e71096958e7677\",\n        \"sha3_256_hash_of_signing_key\": \"bdc2e761829eec38d4b7701125ec21a6f555ec86ec0041355755924111a196d9\",\n        \"message\": \"0998114c84f84080e7eebb47d248980fac9d28f1abb6dbab3dd59a5cfd2c7cff7f308372874dd5447c7b02e30165501c0c673128e4c543a414222bdf47e7f4e8dca757b0f4a3281c0d10c4f02ab52aaf5b9a715e012607ba310947a60a5f62d6b8cfa96386d27cfa709189202421c078934aa2d955468e550ad4d0d4acdd98b168a9568e232192e92789830317fbc959087fffe353b6c168f3efbe7164444f1d6cba5246e31658c65440a841dba78257e78502843ec1a6e9710229c8eeb85d6cddc7d543285624aa1f756a5dd4f1a5d4fa52db8c5c34880ed448fbb6d254509fbeea0fa022f276b6a66bef7abfea6049ff74291babe781f718683397077b29fa9e2b46bc6b09251e587cc5b182195dd4060cc4a319bfbe251a5b660a739dfe5d0e5b93f3cb7e440194f1c8bda922cb1a3ee3d27edfd61c1d31a7f4534e84889ec83b51f1641892766434\",\n        \"signing_randomness\": \"b640be365c75e15331d37fbe6188f4136af1fde332edb2394f8c4b35718c34f1\",\n        \"sha3_256_hash_of_signature\": \"71266363d9419acf1f935952cdd12ec721aa7a7e903f9cceb2994fdfe2a2820e\"\n    },\n    {\n        \"key_generation_seed\": \"d6dad5b2746422f4487b72536d70df88af4b2f9040aa45999f8d7784ef696da0\",\n        \"sha3_256_hash_of_verification_key\": \"b660c462d8c6ad75b3a084a5cc191d9b64bfa29c98e85f9afdd8fe670a1e066f\",\n        \"sha3_256_hash_of_signing_key\": \"fa653dad8f22dde8b327edbaf37a5e7f6ed0df227273dd37e7664861b8a2d112\",\n        \"message\": \"4cca95cb9f254c2eaa7dcffef662ee03320d5fc626a6484304bf62fc20f341fbe26e1537d7bd20e95440f7cc95ee84e1297c807a0bc9006dfcd5c22a5c1fc0865f5d70e5d63ad677fffdea52bf85d1a4f159f7ed16a745b4d971b620048b5f518eb2dc672ca35022578059e1adad7c07fe910a5d566b8321d9a12f34c250be35ce964dddea23c90ea77c9c1bbe3532feefda3637157786ec7d37775ae5cb0bb92eab45a0fb1e833e8a6f3d06b85946e31a79b64a02b31fa640ed514a85882c89f693a06354dfddb0b5e23e7792134c69c1d3908882df3a7694a05b241b87fb2dbd1a4d9f26943b69f3cdf730301663089d1ebfc23299da21300f735cedf7b109f3e0bbe273776e6aafa7054a6cd9682b967eb7903de549e9558e62dcf3ac444dd7042fea362efb555bb97fb464ad7faeaba3197c14a6740477db50ce3fb8b762f48f880381d510fcc836e5880b48f08bd6333202e838ab73f2e106cfbfb218aab802da8a00f13f78ffb70c\",\n        \"signing_randomness\": \"3e747db13e9a2e367e467c1ac4b72a39854a56a11f040088fb007ec7e1f2ecf1\",\n        \"sha3_256_hash_of_signature\": \"5c2d2d3c9e1f5bc1ccdcc563bee9882e9f53d42614ebab1f41c42c128c7e3e03\"\n    },\n    {\n        \"key_generation_seed\": \"68e7818f33b97ba6166768c395bd010cef7bce9995891d164303b53c1123a991\",\n        \"sha3_256_hash_of_verification_key\": \"adefc9577e16184b4042b13d38d067fdfe513e999b0e5672a64024e900e4c7fe\",\n        \"sha3_256_hash_of_signing_key\": \"607a2aaa722b33a4f4cfffc877a980e80b9ec0d3470a7cab00d275d8f26395f7\",\n        \"message\": \"5c4b2e1a344da1418b0f4be3fd99505fc30f2a1e5b696e943bee2451d7b268f722e04f8e00fdd9e1a470f8c977a6d45a5f621b8815e352fa14f64977d1fa08082a48af495719ea6ac1c0b3d898603b4cf7ec88e68dd7190884382896d953d612cc21abecfb01a04a1bb1bbe8986d34625756396ccd84bd1a6b5454dda98824cd4844d98f356ab485eeb19f9196abb1c3088c0c3c5846c88760b696d91a232d6f4cffc85bff33de1a3433a27a209a461fcf37f2289f98bea7ccf183db1fc42a7edf958e7913f8711dc375e43f09be7c7a2c2b1318ae2a9cf5988fbc2ce0735a2cd9fb6c8496c34406c538c01bd494193240bff947fed47b7cce99a1747973f1faa5223ac564bba0ca8973d1310b5bfa1452cace9110bc22a8d4080a8baaa8adfa3cfb6685679b648484e3a43f9b1b2531949bbb8fae1846f6d45d9272fc2caa2913b5d9f8d322e9b18a685122d74634c60730c101578bef2480711feffe02123e76d6c846559e2ea99a98923ef095630102a5573ef027e0ab6e52555a9ede0d15a73c8b2fef87ca6fd9f903f0\",\n        \"signing_randomness\": \"4e180cb95a825f6dbb010d597cfb10eaa4c03e51001d9de7bb75e87e4d7f36e2\",\n        \"sha3_256_hash_of_signature\": \"f33a5f0638e46d077b6c1f40da510892f87aa4c4c1ee71a382180979fd3bc078\"\n    },\n    {\n        \"key_generation_seed\": \"35b153a7706109d4a13d7c4b26aa5b56d9e3fac53b47e91b0c10bd4e0eaafc19\",\n        \"sha3_256_hash_of_verification_key\": \"844534674148299f520dfec9efcd41149b2d193315f09a92d1aa5a72c59f911a\",\n        \"sha3_256_hash_of_signing_key\": \"e4ac716b58e7e3d66ff1c1081b40f25690172665f78ae26678633ce316da3f0b\",\n        \"message\": \"49755a7b1a7cdc5c9bdf5149968061d3c95ee67bfbaf02750c45094303a9d9cd23a08f19b9c768adc63ffd1527186d09ca4e0356bb882e263bf015cbe3716c05b31a69dddb790ba82c341ac9b6be68a81b8bef8d882304baf0020d761a0db04412033dc369961a5213b04e81736a580f1162780599cc029e262d67f31b2773afb457a1adaaa292163144f17de384234f3303111fcd89bcb30333c6c6486f775ed099043c34e6c86450b650f1a02d03781b1d20691b767d166dadf1dcc4d8604d976efdc9168373a7316dda9b9fb02a4a321218d9f54e287b7167a08bc0153843bd6355aea1310824dd5d5ec458be694af176119d9e588a29c650ff5500293659ea478b39a62149f819cdb7e7cb32e1d7b1284f159e2ab1b1ea41af4d0ac94ff3111fc1ccd818f9b2cc7a259701405fdf6a51d2d3ef62789297bd16a659f14968ef902c4a23da409bf13a4913467b5c991854b2ca6cc006d3f4197a6aa58bd5dd95c36928da9583332c3fb134fa3890fe7e299f1c17205366c4f4230724c43e4803912e72b816658bbb1b63780865a1f66a2a49b96e93711b1be97b827d12173402828b1a065b94310d5bd6098d\",\n        \"signing_randomness\": \"de9dbae947be3b65b9a827c65b99260c6a17d9cd8c2bef48ce0573f555de0f33\",\n        \"sha3_256_hash_of_signature\": \"64f242ed08c3fc6f93766a1579bd2240a3665e1cc7add401581ea2a76b4fecdd\"\n    },\n    {\n        \"key_generation_seed\": \"0e1a1634fb2396e187cd8980ef29663c42dc3ef963ccd491f817a84283a11fa0\",\n        \"sha3_256_hash_of_verification_key\": \"f0090876cced062d8e1285ac11eb97dbb58e2396cea8d8e7d57c1eedb1280807\",\n        \"sha3_256_hash_of_signing_key\": \"95564aefad8c50fd343a16cd355aa97bcf75d0bf523d971f2c9f21fb27c6ba2d\",\n        \"message\": \"439529df1864297e33956afee00a60099b658a67830a6a6abddc329e87831d9f9b647917fedf1ae182a40402143285516fcab83f447354c72fae81ac26e7005c2aa561763c152e66bd80f14565f47defa440dbb491e7994ab9fe35995d5fbb3800ca030b43df611141637a5246ab9d9cac02efe14af60736b6bdb2babb97cf21e831e5d04d41c00f090b154977900efadd3a9313389a3f84cb3ac38e8b57b70a43dd08a8243f8154013fd5cf29de5a8df0b197c12b17e0610fcfe3625cc94067e01e23d23a243ad1c1f805cc50e1447d1df93c25b8d76396bb7199e64129522462c5fc8b30c132d4ee9e0bf6f52961fce7ecf650647e7064aa5a6574649a323e144d7c5491de4c0a1a76d08f93f87a2fc7f6955fef86991e62e2cb42908e83b0c0a8bc180b7453ced293f1e20f300431ec1d395e8a537f0bc36a673d491f14381dea90d8f176d06031b0a7afb40ea8f76d37fa82e2572b9799a5fc7cf4c49bc20ad78efa8cd989a84d72ed680ac3c0f64155c56acbfd7c7d628b418a489f961357f77bd62204adb079dd3106485a37fee535c9cf82e832d8aadcbf686976b806b02ae733db46db0bf162e973931c3e338cc86db38c66262d1b2ebc7691b8281e0b20bf36305fba996d20ecfdc695\",\n        \"signing_randomness\": \"95a169a6821bc4b7a221c54caf7c9411ae44cbe89ade05cf95fa6d20ccf2d086\",\n        \"sha3_256_hash_of_signature\": \"7846cb8fdb10654f9c835cad3978dd31468eb66498cd5a80faa889adea336271\"\n    },\n    {\n        \"key_generation_seed\": \"b0bfa060f1c1a70f1ac55e321e6186a6613605dd732574b5fe6e14f0ff6f7a82\",\n        \"sha3_256_hash_of_verification_key\": \"c4fd0ec2e4535ffa4e381d3bb5e92470e8213997abf39e42e40946127a296ccc\",\n        \"sha3_256_hash_of_signing_key\": \"a8f1ea0eb2a9a33b5febce9cbceddfbf51b872e9ae05a5a5c8c2bc608bfb75f5\",\n        \"message\": \"8cb18850e27d8416b88a9a71f4a66bdf447814db6c82098c371b53f61600ef5dfd88e4fb34200207c3f6f55166af4878d38fca7e2dc18fe662e3ea491b58a86246cae16090fb7ada53b9a67b3d0e3787d3323ea921274c60cffb19a889bcf0300fe10e242aae025f374dd83fbe9d007c8b9d9d75574c74146331ddec6f0e49c10dbaf15654897e33e2b4780dba484224aa6fac79015d5792faa2d532bb7d239b11d91420b98690b1fbde9632223927e0804bfb284368a426c414c3db8ea82f0d246413861475ed2dca9e80fb4f3c34fef7528069ae1975afc52ac5ad2cdbca1459e140f655556093210d7905a1a1e6ceeaef0194a0b2eab2c1ee853484e715d2a1db551fdc620d5331164c74ca4848b61d408d2f2a943fa09efeb63d524691c99dcc0b22cc61b98e6fb8039e5e0b2d7de2caaa900a44184bd56c9f02141a3ae8afc661e3e898ecd3004fdb0704272ba780cd5de35153b6fe223843024273642dcf8e4b58be2ab1f61668680084aa0b75a32e766c8ae5eb30d4e02a12e6798dea40f80d8ddfad2041a52922701c689f46f49f84cfc05eca6d7d4c356d50b6a0ba61966245d45134d6a1f5197540a1c39c36bb0b78831af3f5156e669fd9213b64e0cf1c5a31e88ae79ad61757ec67b551b9f0a760f646bf81f6b92403a62840cc29fa4f3949b3a9f0a9a4286ee7808a\",\n        \"signing_randomness\": \"9cddf8ceb8c94c72c136072d09d7adc8ed40affe4eb1a5fb3fd7877571975ef1\",\n        \"sha3_256_hash_of_signature\": \"eef0d06468651e6fbbd8e6520aef8241fa2f2b33d6ab8ce183530355a8ec1ede\"\n    },\n    {\n        \"key_generation_seed\": \"a33bc0a7a08c13c0d4c1174ddd886aac4c5666e1f4831f006c9519d36b2ce882\",\n        \"sha3_256_hash_of_verification_key\": \"cb702d5ed44ff15708ebe80918e6eb2caf426cb751bd9a0ddad41d293c3913bf\",\n        \"sha3_256_hash_of_signing_key\": \"d08111b7e32f36632af98f411be7927eeb44f935298713230d2a99da1af15577\",\n        \"message\": \"9b64813c058f07a09a796fd764604eaf58ce144363702896df0ab5ff26d5de000d14bb8fd358ff5532d3b909ab62c18ac30f1900f84ebd3f4f18bd532d16c7b3470f0f8bdf72938c916db18bcf1429dc1635b1c152c5f89a9edb17116c11815a6c06273a889132923da908ff39f4940a840d3cb575dc4d637aafd37968ec61fc4ea04b4c320491a73ecfbdd8e10f1dfe902fccef93dd287ed872f67146bb8ca5a6adcf0350e8bba7f2f9762c4aa748fce19748eb17334146c152fd63fae3dfbb1a2c2b3c78960369551fdac5d54643beeaa59c1feb0c21dbbb19977d848cd82a7ae0005f45956e0fe4700f14fbaa0c12fb8c65a6aec95c5a5c8e79a6da9c4e446872575c06ae49a31b82245e1757c7ce84d6d5df3f642d3434b7e1a15a8b8a9db460826b6cdca69022dbf87595b582ddbb90a81e09a13c2ab1c125e4435ff30abc9c56a00edfa979f79d9c895e800d2dd6372fae5faacd83adf8a6d55279d52df547e9bab39d99076ad7d297371344d35bd584e0fb5932f92fd5183b9250cd180fc645bef6028c405b0ef35daf783428173f1f2482aa1363640f66af0fe8ecacc0dab84abd2a1fb53af44445698cf1ddf4c2ea214dd339be004e75bf76e95ca5c16981aba5540689c1c1f1daf4d0f89d62ccb3496340d61e7d5f5156fd3edd02edfec8fcdd0b231697b0e66f4a3aaf46117532f5ee2cb4d2b3b82b0beae0a45a482ce9a976cc99aa82beb0fe08cb68c4\",\n        \"signing_randomness\": \"86978657e78a20a881689d75650d01083209a9c6a41092aad3eee15e4846260e\",\n        \"sha3_256_hash_of_signature\": \"05c02567565505c1c0c18b8189d3794f7093a06ef0cdedf2b461db7a4d26d4fa\"\n    },\n    {\n        \"key_generation_seed\": \"c7e33fa5329142b668ccdde1057eb7a8619397537f2b4c6d6755b3b9ff936441\",\n        \"sha3_256_hash_of_verification_key\": \"c7127ed8d40411230ffa8aaec15331d5d01f3e36b366f4fc1663c3a82e93b7ea\",\n        \"sha3_256_hash_of_signing_key\": \"6afdd99930d8a3d9ff5ed280c9ff3b64cbc0f82c69db6b20b3b854b6b9ad2fa7\",\n        \"message\": \"922320f7439e492f13c272a5738ff7122dd7a6b2832632e1f7a653fef3b8639bcb9e84f482f22a948ea17dde6958489593d2cb268bb52df8ed612f2317bd6847d1622cf0532cb499adc432233b93b6f7b1866b38975ac87859ac49f91e8d235846775f9e6e6d052339c741ef6178016edb3d0b1e3f3536667b3ea2d489f88d254b8582421a31461374f465d7ad62e896be0857134707a70477fabc09fe0a5cc3b3f32911f5ff3806b878205525af69007f50535df05c33af3b0d00e297ac7eaa012e1d863dd5dd5fa47fb09467dbad8bc42edbab42a9625bfdb9fe578343297506a3b71cdc8d5919955af4605fcb0c7164d96a187aff65d0f6210fef2d11ba08d90c4458542be72e084577be9e451b8b6f4909884bcc5d25316adccd0925664d4d91c2e56433c1b68c632b0ca56d856df1edd5e113d1f026b30dac4fd648a504f8f6809c701c97bcac2b99286cef5c1c923200b1bf6141ee1cfc51c5e14554bc02d7e058970254d2c02948360abc4dfb439e66946a8ad615147bd8a6cb0886211e8b15dff3c72b6f8908ce56bbc1b40e838103202e9f188d98e07555db61778f895f76fbd838b6d14209d28eb393668924ac0e61072cbd9f93b864904ff4302dcea131b2ca16bb04959acee096b1963ce07f59ab505fcc8d89fe08fc58751965f2f5ca753d76d58705652d3b1505e0f720ede3142de9776ffe4aa0c8a25e76c7a04843377c59f1002844e89189e22f621467b813a98bf07540a1649264f14a6844d65692617f7a4d93fa9a23829e256626\",\n        \"signing_randomness\": \"d969c4147e8353c80d83ce2b665934ea1f9ff040946cd3f16533143b129b5804\",\n        \"sha3_256_hash_of_signature\": \"315ff4cecce4baf97b8bb5a27dbb594809763b528e5e7375e6a72791a173e581\"\n    },\n    {\n        \"key_generation_seed\": \"7611b5b7d4195d5f8b97244b6811748efea929ea272e66435a36d0bd16e3bf21\",\n        \"sha3_256_hash_of_verification_key\": \"6cf377e18ffba98f78dcf853696ae6b124919f5ca693d472cd9e64744c404ea5\",\n        \"sha3_256_hash_of_signing_key\": \"84edb0a99c81e5de9c113a9ffa846fb1f0e369467a5418f317195a2aaed4c93d\",\n        \"message\": \"576289d10ab03d5699eac322d349f55c547101e4424bfa43bbba3747b79f075ae1153a7a0ac8bb51d24fc46b7604e42efe4343fa34aa4eb16d918f25e8a4d67c860cca3f7480e1221ed3ae13a138f079fc252c6d7bebc55cb81b86e74f339614bebcf7e8f4440df8678b01a4a41b3afb1d112fe1c4c8d8c6bfe9d3ee2a335d477c60fbf43b2e5fffe1546f5172ef51cffb2a772e1575eac79b24d49fd77f0be351233e57ee6dcc7e2e29994873abd434d34ace83400c026e27e27888ea0bdd1bde5a3e55aa8b5f2feb57b8b0a96cd831906297c8169d04f15843a3249c50523cf56a4e19492ea16927dba8759b88a99e0d20820e51fc9b6a6863115cf05c5bc3f4c869eb5a87124df5db102d737f3899cfaa5fea4dd62dc4fedb1aaff67906adaf8968020efa5b10190f70e5f2c0f0457e4341bd449201d3a80aeb791254ec1c46ddcebc3896c6df702509ba62cd446d275806438eb4c03132b2e6bd01bd2f832d1d3c053c48c5a9db1c4a22b130c4c9e96a2bf4c2a8f7de0217a52d9aa5aeee5e6a49708237eab60b4019a51390c3ef10572a73d436875bb8d7d78543f96376e4bf3bcaabb92f89215e8d1093f3b287945708b5514bd7e62654d3bdf34b29009c64829a0cbf33c54d7ab0e81b81bdda93028b341ab1dff3d752dc4a1e5f9636a5c46e137ea35919d99e6571c5370c6e804bd2e2abf566f035d65cf8f97e3e8f2ecafa153bc6d8ec2831667a37fc96d1c2da40ba84d0fb041def32aadaef3f98cafa957f6552f79d28a36b8ba20a9452671de1be8af5d66714232507edb9ff657f3d7e5fa7320fc0359a5f99280d446283bc\",\n        \"signing_randomness\": \"a54ac9b7a0a8c85861a188726990e518d287f7c53c8b96ddf7d01c4fc4a6b9c9\",\n        \"sha3_256_hash_of_signature\": \"e8ce9a6694c6e3c307e8d00651f8bd0ecbbde604f2f8a5552115439bdc6abffe\"\n    },\n    {\n        \"key_generation_seed\": \"5a1e3e05c72cef1a73ef98840da035e4fd2552912db8dae28a79011de4bbc1a4\",\n        \"sha3_256_hash_of_verification_key\": \"5f5e5934711b33adc020eaec3f1c886a6f4ecac70bd75a1cad4fe4b82596f199\",\n        \"sha3_256_hash_of_signing_key\": \"173ff16fdf05fe924955c39142b06c2ea0750ba9889afc94548769106bd9d3d6\",\n        \"message\": \"021e9c06a2e4ef63d1a61958620c40016783879080d44311e04f2a446bcaee5a486d17ff0f356ba70ff1c2b55bf957a59202903ae349878cb822e04275e0afaabc0803bb6cde3741e0bf9fce0c5d5c814977474533dc63f9ed4f32ac3477a3ec9893ef55186728c85b03f4c2e61ca7733e1706766aeb8fea80e233e8761b57fd5a3cef700196674b34a3a55f68b3368b688fb1ddc976ff48ba6a98e2d66023f291a3c617a56ccbdb8732b8c34369ed11f4ccea8fc8f673ad9fa0fd8990bef70af44c617fdfa096695d0c94ea8e17554f4461dc776db2f416448b17680fe4d29b09e57603d8ebf55771af84d8d4b9097302901c25cb6d73932e67c323d12c8acb0e74cb89755f7eb3999d4eab5e1b775e6b5c29d9733697030a26f3b93b3f286db0f2dbda71e1f103878063e77919d8892eb6a34f821b603ed4a898a9f30d00feef20985fef1a7b7af70dd29c269e88687f005d551ef05eb0603fd38745aed4f5bf4c2fc09f0604c98ae3a89e46bbfe907b87a1672de547d651f035f392a8d4db5e7260f43953028e312b95b9f25fff2c0c579218390411d13d9a25f22de4c7aa05fd11781db08977160d48e02372c7d826f5cac37d1a9b4230be99a2d13cc2e9b2b17f0a1044eb9e0a2fba376d35cdd2bc05f57dce4bbc3bf07a09bcde369929e6250efdc61689466b040aea376b09453a2c16813bbb685b54a225c49008ba6811e8bb5b3627f8c281244fdf5533216d126ed0e64fdabec533424bff77fe722cc438ca7587c19d965f0bf085d8692c27c5c84a9dee53256d978948d89abdf9842e0b765be6a507d8630cbc5ca7fa0fbca1cecc78d2e536aa7b2b902c4379777ac0920d69c57cc4e6032252bde99e1a555e80d4\",\n        \"signing_randomness\": \"4ba7fa7a5623bb71d33a6bfdd38828ce60d91e75de165367e31007a10e0b8352\",\n        \"sha3_256_hash_of_signature\": \"5c16e1b7faa25b12b8947bb45c56bab08e4196f4c4d2baceb9f597c2c2a198b2\"\n    },\n    {\n        \"key_generation_seed\": \"8f3920a235eec3659cfcfe62931474204eae264959702f901d461b66d9bb563d\",\n        \"sha3_256_hash_of_verification_key\": \"ea206ccbe881abb34306ffe034a26345cf15a78d2a7fea92879f1ac73455a9a7\",\n        \"sha3_256_hash_of_signing_key\": \"902c25f9cca4a9aecbd77c77689b63e315e860b4ccc82fa0f8c6885ec89d74a9\",\n        \"message\": \"7bedafebabbbfb863ce496475f54e69a905afa45899c3d7c16cfc73e31597d2404ae7014612e4cbfa238efaf5b396b0b7435ada5de817e013188c280423c68924e1fa2a33ca56e6b85b7cca7f00d3a6151f0629c1b92a13573320e0025863bba7f3eeb987ee1b1a6230b10765dfc1feea498ae4b83521188e7503b506259103cefb370e3651b06dd4f08013ff3ab9e2430626b0bd584232948462d85c0f82da07b96fc65f62a43cd2f132d1a1d691c085980dad8796cce2fa0b268395eac3da2cc400f30f75be87316216980ce213b48651ddb9e294f8cdb2ca05d3f2a507e4a03e2849aa8062918afb5bce9e4c3abf2ffd4751dddcf08ab09e36a29b830f3bac6feebea084575472e6f4b239af89965a72954769a83e391de467934237b07d8884a6b14cad034fbf9bd7531d50d742e234e227e1a2daf77a2ffacc579525134b15186d81ae6e5538871024bd2897475d6ee5b11bc51edbb928d98475073785a75b331bf3d2297165ae6cf95c3a05f06df747498462054f58a5ac736f96014b1a8cdb319d030d06dad9cab2b913f35fc392e1fc4b027cdbe775d64b04f1076a7c8f44c360745f98e87b84c18ab76f84f373f635af4c8a87df08dd4507899bad892ff8cc1ee534d3277b5b82095628b84a7d5582149cf46c50aa963b56b4b91966b106b4b2eaa45d83a10993e8f933370ab29c6606b7ccfc41b21c6b99f2b9ac643e24300b350fa199ec10e64e4af19181f78e8c43b2fa796241dc42cc8992bdfcdc39e7bc41be68cdce4fbc47c996db42e8249eedc146c216b514430c705fc939b9eef677ad87f9cee3398551fa0daf774302324a410f4a4f4fc035cfbe960b38c390441e92d9e5624a8745976bc88fa538e398712361b77ad4ca5ff038d9f6ce157eb8a6137420d4e57018275dceebc4e480a5d\",\n        \"signing_randomness\": \"943c364002f410be37f11bcfb79ec1700133d441c7c1e37359bc9559d256d56e\",\n        \"sha3_256_hash_of_signature\": \"b76f5533b2240276e7e2ba38b2f8bb63af80536e20981f15a5069623d359ebd5\"\n    },\n    {\n        \"key_generation_seed\": \"0b2b3eb50681403a0b9a99b25041a489c6d45d2a49de0ec83e1fd10922abe2d5\",\n        \"sha3_256_hash_of_verification_key\": \"644fb01a30bec6c77beda961eb71e11e9c45ee083f560f8d7ea2d670694b3e86\",\n        \"sha3_256_hash_of_signing_key\": \"80936c4c6314a19a23e6ccd203b154014c5844d6e557d7dd8e11293e3549bf06\",\n        \"message\": \"a86ee95388df139f9c5a84108d1e63f7a7842909b818e9a0425c257649abf125386fb5286031e7e6d0eeb85c452e254da39bbda51f0d2167ec0a51992753ddfa76874aa80804e705cf8bbadf3b82b6d7fba3d1cad130abcc0b44d6d893356f3e94bf8e82ac532ef8c5e5f4200207bcf6b754f14e57a889ffb753f516ef8de2a647fad8e449264f0bbb4cf48bd01501736da49509c3426a3d4108b98e6a4aa6c4430e8ee76540051fbd1dfbfc01750e26547f8718ef7d897a0342bb000fb99aa63b781c9a4b831da798c014e58725e03d2f8b1a029c3337f4099239244aa320965b2cb5075052d901b6077a18c1ecfa5f272850a475b5f6bbc83f3c09a27072f80743b23ec6a9870913ee2805b4d296b2f81a9d733e5c8d5c0b477e51f9328af3af8abed960408afecd27fbdd08fef50f4b07959646e0a02104a69674294a79de0b25b65f4dbfa797e5fa56d66e8bc07d5e2e7c7d2e845699acea3bfac60b2c0b988cbab949a5b598d8e2f1aec66196e115ad7f237a1c7fcfb95a1bbd6939a250e7bb0f4a02c23cb1bd81090cb770e3a70cb081d121bd0bd5ed1dc06d61282b98bf2dd7b13d2c6cf833891c67951d7d0f429ebde3f1da943adb8ad285e6f13f798d6cd9a0a06bcd6125ebaa48f8f3bd5100a122f617817e3c42ebc3c3b154258fa26b9fd886ebfad42dedc6a2c4f9986bad88a2a79d7ee603554e9cfc5fe33a3a171cf7ba94fd43228019b2f6ff96a8abbc58d2098ad95a95442f6858eb69e131d7bcadad81b9bb69d7682a978279b631e22927decffbefbe8fb2e51d46a3fca66225d30451cef9953ef94f30b99f2b26ea75b84935ea4fb257dbe5734454b8087b3a4e115c6d31e72709303e9f0bb8c86fc6b11b93b53f9781bb92851a5cb5dc00d0b4e15683dbe4edbe986966fe1f711f24de9a0e1beaea8e835c70cddc589773d31191b74af780eb69867829abed6d3ffa94d577\",\n        \"signing_randomness\": \"8b7b9628988a0842ed6f7fbb4289a23a746df20188f74fd55ced9eae99889c61\",\n        \"sha3_256_hash_of_signature\": \"5775e9189d7026715f332d7119a12f58b9321877e1ba199e49bf99ee23886375\"\n    },\n    {\n        \"key_generation_seed\": \"8217d32cd15658d39cdca92c41b59f5780869a68838a3579dea48b5e3ea768aa\",\n        \"sha3_256_hash_of_verification_key\": \"68f0014415da245f2f357c46bc9cc2e01b3abfb8c1c02df1d3859735cb6fbfc9\",\n        \"sha3_256_hash_of_signing_key\": \"9be823f802b6a1fcb30e062c11fa5c7fd193c60cf3a6b791dfafc47c615a2dd9\",\n        \"message\": \"f5abe373ce1f6fb14f2014f5bc0071b17ab2c84e8845fcbf4b15c79fbf2e5e06cffe6cad9a283014a975f81c9216b261cbc79edcd58d0e20c586d7c641e0ee97221befe54dbcc56a594df103ec24b52ddbb6052d1644972640f39deb98997fee7a252a65070798b7e46707fa440375b1ba705b3ecc7eac56d9c45297e585299c7d747b430f0d01e82081c70b4a87846f90267d5163181ded63e089a00afd33b0e2b3ace91182d8cc899223ce65a5d84b86bb3e8b34b13949bc800f2145468ba5411eacd6a6c331c340d4442d28efa0da959a2797c7181bd4bbe6e6dffd134cef373ecb0ec08590f06be0ce292d3718e2c0efc7cb40f1db26f5f38fdc82a72f81afbbc16591ee02dc818d63cae69ff0a28f942f7e07f6b0a741f3f0ebe3d0ea5859024aa408462d3d268c23f95d717c0a685a4ca73ad90ee923db57cd6cdd828b7ab0d4afa6a9ad7e32d407a44d7515c0a6af52a66ad72119ba1daec6514de3f8b462ec473072226aad61135b0f5ec646ba9a127c9894e51fdd1b2d38011a2a6d7497a55283133695d0af9b3ff7c5a8fd667231f9e511e3b8c4c3adc44d02de08c47b2382de67b32826754c6be5231ce0fc657341e20247cc6ce574f3d1a9376ac8237b49e5030e877a4e33cde25d838ead659eb1678706c759707fc66ce84cc968a8334c18f1632348824a6985a0331a93b59497b70c1a03a6848f18f5992972bc79f07f4222d2612797f495463836ae6cd3858d5b9bdf744a1cf361b5d454d41ac899a4fa61081b937cbabbf0ffec1b31c162224ea36ca2cd7fce54ec1a504932acc5bd0b17a156da7488f7017e4916a687fde7fcebb2901813b07964084ab0447a94dac3a0d3fda05b9f497cc1555a8c74838e29cb8ce89d304debe419d26ba7f3dc6e9526bd895495a5ff1d7ec83f70d045e306e7c2487a52cd7553f062d31888ef7fd27f667fcffa984afe0b9a4c4e85ca943812cdc157c5486b0b5ea6da05e4bb8697113190321a976d1806da129101e60a28b7\",\n        \"signing_randomness\": \"022e7bdfb6918b065c56e2abafdeabe6de1c76919b7f004ec141cf7a2813ffea\",\n        \"sha3_256_hash_of_signature\": \"c011f439517c40497f21b181482df14461c0335d58013de69c18f912cdd887c3\"\n    },\n    {\n        \"key_generation_seed\": \"cc625322c9d52898e7f60ae47bc2847e20f3722794de41e30fdb20ca1a093208\",\n        \"sha3_256_hash_of_verification_key\": \"66cffce17898249532dcd7cd4a63f2e56604f124316fe7ec24cc1e3e8a47bd0d\",\n        \"sha3_256_hash_of_signing_key\": \"4319d254ac9da147c453563a4e6ee630fd58be563af183e4df1e5d9e00b9c0cc\",\n        \"message\": \"4c4697a7d8195bc7d4b8f2fcf3a7e9419e8fc9ac6bafc5d658260511c697286bfe44e2ce98c21c98be42e5af0fceef8aa54c5770af287a81c7481fe3391a6111ae6243d545b2a651599b45931d7640579f8659a8bd6f77260f235f71476ed64714fddb70c549cbe089322130f7b0a21f530508970d55cba55baeacbedf684c7979078102ecffc2c3f182f710280cabc2decd3d3b5d3ce908cb2307b00fcc0c5412a12aecd041b5f70cc0149390312b9c81592bb0e2ece83d4495944e29aa798de67fd69e2bd0695dc573f78d8bb48e6b8679e1c50d1e6e58e218b77ee51597eb43ecf7301d86f457353d60e98cedc95b4a76844e889bf7e9d03503757569e40d55ab43d63293eddbb579fe981ffd4dab056f85006ffb5e759b9c16f5f6b235d7dd78458a73ef37118edf599aa504e9db9ab5dbc90b8e478f3dc1f35a7c4604a383bbbb410cfb2c5f746f83ef94bdb2f244d421818c26827d5b7d665b8a802181eb7a9ce95b6633e24d914feca7e969f64038acc3009b15168426edb67af2ccf4e859f5c616891d355f7910acfa599c396bbb2d2782cbf1432e6259faa77730b6b86fe0d67730152cd2ae0f9b0314048ccd25772c01fc9773ebf06618a8ce1e940f48663427775990cdc41c4dd3e9ac6eda1ea50e04f1d329e64c8532a7ae32238c131753d60a25810a5ffbeaa9007a6984ef69eed92b777e079ce0ff48c2aee9c18d1db9f49b5419ec6c0e2212ddd2e2fdeaf0fe9f2b84d9c50dde86a70fc28bbf8918a973cc67a36e97ce3027d73891e7aeb24baf4b12a9dc8aab5d6afa380bfac3703d2d32f1e40fbb532fd6d7d710dc0741dfc7eabfe55ba5c311a00e3be55c2ee74155e3a06685071a962d7532ac76d59fc187eff01f8d339f74323732168fa5d14f4b2a72c9164a04a6ef14bf5deb1833e4baa19a55ae590f542d4448e0eaff0e0afd2fb30fd671631b9325f4a0bac9a43dcd2840185a2f601117a625b0dad5503578537be2a535d2f556f371536bcf68c0e01c96301f08e1567dbf9d8504096a8fd89c086db695da191099fd1e8ea94035276d1d\",\n        \"signing_randomness\": \"230612372c450898499f3e23372b3454a7785f330a70700ee4546fcd99619d78\",\n        \"sha3_256_hash_of_signature\": \"16ca46734cd9f302cb3ad771674ca0af0891589513037ca2111f85a8e3be542f\"\n    },\n    {\n        \"key_generation_seed\": \"950226d6ab0b774c5f439afcfd0113b5dbf5905960c445f5e6e03e5d5c687a9a\",\n        \"sha3_256_hash_of_verification_key\": \"24b5cd03fef11197e71b4d8786558d206095ef7d070c2b6897e5d8759e735b5d\",\n        \"sha3_256_hash_of_signing_key\": \"1dd9bb1b40e9f34ac69d1c2e7f54fa2ca5d08c655e91129a9842fa4e6a5b9282\",\n        \"message\": \"72713ea55f1e5ccd5787f172657c6f6c74081de2d70816e8531497965df02dac04d91c4d09dcf8904cb152e2138f829386f4351015da253a5b5eb92d96e537dae3ce809443ea90332d9c754eb11f4de586a83b5dee7b1b9bd547ee7107530249b14279baa04683d74b69d7bfc8bbcd447fe7706593c01188fe6ad8d0e2572d49f83e93986b380d4169bdd94e3311941dd2b041dfabc5aea1297c65bb5c8352c99ff838d46b93b3e5f79e3cc5be5408fe5e59a10d488dd65a997b086fdd96cefb0247b2baf7b490317e34330a879d04e374c92ada33ee243d84da015fddec243b00bd7488aefe373e8ab1890273a7a2285988e9daf9c4e7c5a17f54ad6195ede2c79657e1bcced0641e20f7ee26eaf53dd8c82827f2d2783d44fb030c95791f41653e628062267a5cf534df00116c1ed1de9f360b97555c65cdd80724104fb1bd4da5785b5d9c24438557e48aee58d57a03e06d553b05b67e1c8d10085c2f153647f174f7922fb8d2210454f7014bddbc627756eb7cdef99b6e3a2779f82088e3f2da14c2dcb5b185aeb5d6acbfad43e286aae8f84a58e8df6abc64e4a8efd69fea18dbfa6808f25fd418de8ba923500b74e34dda3ca6ad8dc208102dc4a876d8b8cd2926aea4b3ae11a546f6235abea152dbdf43e0bcdfcdc83299207f294a707c8b4d1f56aa64a205c718aca69b862afe7489f11b324e7af6be68380d2ca6e0af0e2e20f890f2cf98907a9d43135c03e85e86c9ee417140efee9054b46c110a84f1841ae3cfafe5b4a95d6b2b606d8d0a70baea85c9412bc2d54146e9f866800e8e8615a0d64d1d595677e8c88699e3ca6097d47e9fe64050fb55033fad4d5f226da8eb5ddf99369acc7552927ed3ac7368b9efea2443926df26d1c172858fd8a5d4e1d7d39e7f7df047385d39131184087cdc45b299bd1f7048e918223da3f960608e853ee49ea667465dbbd889cbda20ffbb540c9ebba5c2cd16a22a57b561e01331d6ea6bdadbd6a5d2bd1441ef4e1d9dd11cc62a0fa5bbffcbed0d27b6acaf0889eaa5863dd9bb35920707b71a0805630d1769fea320516e71cb2b125ac274f16f7a6876f4b922c7c006f38ae1f7183ca768715d2af\",\n        \"signing_randomness\": \"3e4e79432e2a2762b04cb428062cfb41a4c410ae490701f19ebc0455924aeaf3\",\n        \"sha3_256_hash_of_signature\": \"14f4ab5739415d2bed4f58c585fc5b5297d4dbf3a590f8cdc9a9e636927f92d8\"\n    },\n    {\n        \"key_generation_seed\": \"a6b534767a6d839fd19075ae0ba10147c46862bf7bbcbe83f2b72f72f1368a1f\",\n        \"sha3_256_hash_of_verification_key\": \"d9657baac22d76424b30a25ef772a142ace73413feb23cc39feddb6d23e8b25d\",\n        \"sha3_256_hash_of_signing_key\": \"d1093f8c5f1359c21d4a02af42793e01e3ada05251a07fdd6092cec3f72a28e4\",\n        \"message\": \"209658cd1d801079ffe8e950bafd70a028cfcc35b9fb00d232c5603a1d51ba13e5de59e0277962c4474e9f3f60fcd99c9b79665b3839d5c037b921a4de8e144fa1d38182fbdeecda6934e814d9186591f01c5e23349b34f4439b4d402c4072cb4d702966ab473d2c39443f41fbdd0c48e566d33e076422ee72fb47b2ffd661f367e9efddc988bca02382ef93590d4fe3ece8b1d9d8b3a653219c7d131b43e2fde2851541f467c31129e6f9b9d124221cd52610b9f138eac1d01f193148fa0415b29f5c86d15067eb1e26c9d51f05655e8545f734f8f244854ad76c6b04c230898bea33efdceef100d79f8e3b894ba583466749b82007067806e3a7b3ba954f6fc5abff0e099a24d14d865f6f4538736124acc5ead4169ddf2144ad558da3c74cdabec147d2afa113edfd1e2280766b18792310fb6b4fe5d0d9f65906b1cc43655bb3d6178ef9093ac9c8f1a91bf49008179394eee79e1d8e3228f567770c1ba1e30ba4bce2465ab68f53ce21c0d8ab2f6e535828f211d4db957dc3af8b7e00dabd8f1f74c959b2aff45121c5b5abd3136c6f55d5f5ffdbcebc3cd7a430ff3813d23bcdc1254fe6949da4e7694028b7fcb876099e91b92c65d85c39d4be9325afe81703e5b18cbd7bd9eb59a9bb9408abd966ade9a60303807ad1b2c14c04cdf8fae6950a55b21c9ebb5e94713bf8c2890215c5da94b59cb31edc671093b15ff5014db4cd3ea8060260dc1612e9fd6e5ab40f0656121f689c8e94212269a7b24305c83bf0583418755ce690913cb081f2893fb42bc4750f2c053c48c1552430793cdde1a49ac9e21913210d727c4beb5640ab9b7505ea4e59af417a085394181784bf1bb0bc32bd71cc57ce77541581f14b8ba4b758500694796262b561a38c72893c77b548d779a3833eeb064cddba5471cbffbc769e139946155bf376a56415ab743de568cd21895ed6951b5bfe1b1629dd6510dcd4483f206954964e0517546dd96900a2540a51835818d1730b0c9123e7fd8b28e6843bffb659945a273cea944ff6e83c234b3e43db4630614e0b67778ea760ee341fe68c525e90475a1560821ae6b2a85015292c36eaa2e041ac04fb55922c48204525187c7e0476a9fed04efbba96f369d8ae709506620127fd399613a9796c4ff96d7e\",\n        \"signing_randomness\": \"6e3210335aef4b760e5a4cc0eb4763a8d8e6a6172d4221fe966222d64152cf4a\",\n        \"sha3_256_hash_of_signature\": \"64cc3cf7b941a053e4e656b49c81931a6284b68c39d917c8bda6cebd7b124153\"\n    },\n    {\n        \"key_generation_seed\": \"103164ed522df0db131c15e139c0f83d9b1b7a1b6ecf7f89a5248cad7e68de8c\",\n        \"sha3_256_hash_of_verification_key\": \"2edc6dd2c7b4dabd02535a8ed974269a8e87672d74d6935f27c94dc6ea0c6b97\",\n        \"sha3_256_hash_of_signing_key\": \"1d636ff98ce3dd2588901ca941b91c0b3d4a9bc4ac8167b5e033b6c3f9510f26\",\n        \"message\": \"8f37a065dd696ad437ec82909261b842ec0a3e66f8ac574105a3c82ec8b4926f2466fa550f8ea1b6a9a142c00afa44be6512a85350930dffc99b95aa21012057051b68c48581ae439b9290a163aa4b6afcf80ffb91a3321c7b9abad56d5dc1be4e67e5576c9f3a7db96071859b94eb22a73dd96c66ae67ab11d1ab62a86d826c682dfb8cca3259dcb5b34be635421cd4206e7d92147f14c36424eaa407b441f58e5c187e58a26b2ae144888a3cc1387ac7d0a681eeddc3b7781ab282e8185ccf33fb27500cfd119e0415db1e45237520a868c8457c88a1d3ee97ec9451da35d7e74924f8902949e7eb14ba87c8ac672d7e4f3bec1b2814dfa67a8dd2e2d4ff4661d64bc4c6d6a78d4e489689b6063cdff5a3f1554501b424284a9f4b8fe777fe4e6afb83a85e36200a9ab40b9c18678454b2a3f50a4862ba1e36f0c57ad004ff90192b5619614e37dbb38a1b8a65ac613f7796c70772128377065b84f122540106d1b4f9123c4e009b4c0a85d59b35f72debddd154abec7f3fb25fd1fa04367386098de610b26fa3ecb031a6072d14607e92ffbe195abff71e586a984131af24e18ae94dbab0544fd2ad217960f337111bfbd4046809ea03c7c47b7177757a4a43e1fd0134859ba735a8fc17597e593bb58322136602954d3a21096b0d1dee5cf0ad17a5fcf561ffa21caa70d33998840e4cfa18ba481704a8b82d2cc1c110fc9a6704751365ae9f338afe4cf9c811697dddfa8635a2f3cd02dd1845251014bf2f2d6c02a907bd783207c4773a937048a07c500d7c424b5f65a2c376523740df9a0b60437cb8ae17d64dd51dd4e433af83b20c4b6b890b97976df09e3a86ac19006c229d59fc7a2923245b7b1f0acf7c42e486d41ca1ac1d7051aeef6003ce94182f97d099c74317f61eb47ae18c2bed6a3cb253c21ec835e435123e0a657ed926f880ce8e5de3155272328a467278f52ac50a1121ae818a3ea3a2e1f7401ce23aaf66a4ac289748a7e98a5124c586d8957bb4edd3f091492bb1a64d75efcd45ad51ca420f15da848b20dc6bb765e7b71359b3a9e95e121266ae4a40dc2e9a3d81ea1b1a643594b3d4e6abb7d1202201de92bdf0cc1ed977e2d5851822a01f48a6f23180822888ce345ac9be0cc69bc448d41ca20b79c35b1dad73e6c683e70c4439b404cbf07fcc39b0e5a1d33f3717a6bad28a6da4f091bc7a\",\n        \"signing_randomness\": \"9af4e56c2162c6f7e78be0487f6e2d9a08e228641ce3b1b84ddb00d7e17ba098\",\n        \"sha3_256_hash_of_signature\": \"5bafb97b676fd6d5b8f5978e908897b70c2631c861fd3ecf8b0dd8076201d446\"\n    },\n    {\n        \"key_generation_seed\": \"bc962d978f38881085c1b813bc90eee44ad9e7651681c20ba46402f557c454de\",\n        \"sha3_256_hash_of_verification_key\": \"c58eb8f3f44b6e63fa552091cf2f0c2c92a9fecb25a2fafdff3e641c41934b69\",\n        \"sha3_256_hash_of_signing_key\": \"75c75569a3c90d52fa90fe52b7d5b04a040ba5d6df12ccc9748d8238b2fc6fd2\",\n        \"message\": \"30d61c6fbd64113fced8c5205026ebac0d9f3522182617cb00b6e70c8da62ecc1bbc8e1fdaf17cc61dd01ce85a9072cc1d9d34fdadba5b93e0aab4c9c4c9e26d3f7f145fcb23673b6e0b373c0fd1a58f52486b72624ef91a539519ee5305772a006e49521744912bcf3cdbad424f00428aa96ccc21d000efb09da5ce652e361a6fb649a060835e3b9dc9cbec660c7531620115ec905dca6ee2a1ce36554c0fc1d6dd6863b8f3843508ed5c214b6923e7f5c0304e9b0d5e5e433bd029116a33a60cb980737ac950577d0594bfe0ad2225cb8d3fa42f192b0ec05a49391632a32fa931c0fbd83a7b6ea24301ad0906e7911f9d900d19ae1247ababb1c0e9b9bd165185d9d7413ea068fe8824cce5b3ad51fe8e2bb2c4022c61b002c1df4852e4910f38613787ca12371038b6364d920e07b4b417401253451ddc25624b5d038b2dfe29b8494ec960f87803caa256a95c9868af819747e4bf26faaba6ddbaed93a7815c795ad5eb7fb4592df678ac1375388cc7ed3a6230cbe80abbb113c80b70c789cf0c66b943e67ce814f12d3d83f3b90a4320feb7fb81dc93b05d7fe2d36584399214d3d7c71aef322a5d04b5470703b3660bf86b0b17ba9ff23e45f7befec3758786d2111c81ba4d81b83feea35a0668e5eb3694963bb4db3acce4fcba6f3f6fed9627580dd2d2dc103ef7e52bb9745bd42a7fbdb459b5c8aaeba67686eb899e3177faf0897c61b008ace3304c41b4c79e2ef9c865e9958d8716bddb69154fb33187d927b5296c1589fb1ae3d553f116ff6cae56910ce6717c446b9947ab2a981a8f5999c1c6e517eb3fe584f5d10059910e22f40fbddb709c9f686f51abf7d7206a8bab4a346b51523c362d749238d7ef6671a89cd86a8540604f134d760267e91eb92fc0fc275cab69c776ef81dbad35027e5307f1d34ebf5d6e4df424d709666a1e649c044c4930098b2e6e3782a93976b55073c504563c7e052b6816c07f0fd54a759d2bc189fac3ff54549fc4de192efb58a9e301863a77380967735910f63d35ef5fdbd8751de4bc6bf2e3095628dc7f67c1f5571d17aa342593b2c7f953c3f0f22da1862122031bbeaf0d00a029c043304e3e2609c4fed8a7404fa10e2ec846a70eb0e37c5be61e698cf2296ec1fbe6fed75f6fe3113c23b29afb5a6d7e3a9e46e2d89d8c06450cea11492c1a97f7d6be8ff6c014930043022b264fd32593952bc606f779598631e48eed86ec2a013d8eb866f311a400\",\n        \"signing_randomness\": \"1f00e4c1b7706d8f575d69cd0a0520a2be98d897bc8249e95d08efeb68bae7e8\",\n        \"sha3_256_hash_of_signature\": \"0a7517532e7f81658094ece5a3de33ad5c5f420c6811b7fd0a14a48428501826\"\n    },\n    {\n        \"key_generation_seed\": \"c3de54854a4060ea09ed92a363f71c7863eba64195e9ac79e7ad7eb6a183cfac\",\n        \"sha3_256_hash_of_verification_key\": \"b677c73bca228361ec07a46260c6374668b8eec6f7e2ce23240562a1cf590cad\",\n        \"sha3_256_hash_of_signing_key\": \"e8d4e71530178bd6a96cbec09e3fb1fe6cef16cb59665c2441bc33b077a200d7\",\n        \"message\": \"c83441b16b39bd7993766e7260d07751af2f19a41e70689b0eeed0c118d9ef109866aaef31b2d2962a25a3d1ca999214cdf0eb54598382eead64435b7122d275ea8879bd47b41eb64ea908867fd78ecfbe8e992a2636aa7477de5058179565d3a2ceb8ace5c0302018043c411d89975a64927b48cb622a13f1ed85cc1113897a68488161afa1e636ec786a0aa37b928ba88a50164a9ec372523aa9ec8885aa9c95b29f7ca1bbf0652bac195ba94e976d336b69a9f5346b4c7c81457f802dc9757c7a2435a617317340f764c1a2ae131a716318f00af0efa89d3b57d8f31e155598b3944d950d6a1d6485b509358efb3745b95edc30dcff02574f54dfb2d31b259d132d18897df868115679f06d41102cd4eed4ea290f711148b99b647b8555a4c0dca1d2d0871c59ab1382a2d6417e6236d71e2bfa1a75cda54f93e6c087d611878ac7670a04fd7d8cb0993f456e3bc1c3b5898076e22d2d9e0eebc7d7bb8d142bd2b5f6fa42b40bf676fb69c532d7520a4a105ef0c1337f53d6e9b4ba17f1e76af4cfdf08f794752d2bf71e8777e2a209f8891b1a53d7bf2a5786b00b9a0cd0fce79408f26befa2535be188a68201b1514074cd70660971f86e8d3e92790ae7ac591aa7a996149bcdf060c615209ffab82e6000f41b2a5606fdaf4cd08cab0c2f1103b2436b1fd7dec477c6233fbca3b07a0ca01bf3476bfe5334e32aaa2ed35d5747d673e7bb622e1aa7901c77f28a3ab2197c8b8253a1d28c969eee73d17ad71c7919e7f217ba2badbd1ebf986cfe981024fc347028c1109cd4204c7d53535a9b677e39a43193e054d0fd68104d88934dc7ba6cb3e942aec744b935cdcfeef4221784f96798e650ffb0febf2715d75339d0cb6c2e57c1e9d10f13e6786b7f041ab307b8cfa51a2f10b622995230fba54b70d94ae278ec224d9d0950ba97beba7eeb0e2fbc4093e548d9ec09ca1a08e5f0483024d7c1927ff8dc270900d42d31b81b13a29839bd746cbb3591bc33817741a31dea308f549a74f3a4e5478844183b8d7363ac1f4d4a5e907d9ed98afd08fb8baa84c324563495387a4f12c239fb63f0810447131311b2d2ca302c7da2da57c94c3b5e844f537886fb766ec0e977254dbca8fc84ad77430428f0692e55d8e2cab294b857ab51a2ce4a725433df28d9caba86c770743ad987bba58c0565bd18590931e283292889294b607a5f19d9e905aa3940836e2a74a2e94ff3062e85a5c6c978b5eb2b254bbcde128280e6cf02c11a0c2066f349e3c6c083965d5b8a9c000e15ff36c5bf3a6d42\",\n        \"signing_randomness\": \"b1120b7ab8fcb266fad775c13d6bd5e9ec64da2309bdb637f5decb141b377743\",\n        \"sha3_256_hash_of_signature\": \"15a3401d0483d83245f08da9a03248c309aa1523b6108840e12280c4d2fe5fdd\"\n    },\n    {\n        \"key_generation_seed\": \"828b9804524bdd17d0eb387368b01b0e95b4960057ed63fc2289d858201e207e\",\n        \"sha3_256_hash_of_verification_key\": \"d2e927d9d861d3982a36b36eb57c45b0df4e624230f2cfbdadb4a7eb2904fff5\",\n        \"sha3_256_hash_of_signing_key\": \"810837b8557431e04095d1e0d5ad6b284c2d04a533239b730acd1620ac6fd5c7\",\n        \"message\": \"86d27c1fcdb8164f8909073f590d0a280e5ef193b0c42863ba518bc8a51e625658dbe2184c3353faeb674c991eed3f1b0fe3bbe50a21ec70e9f57b97c38d6e436d3dd577d7056b07a401ff0ebbbefaf8212b993a39281190e309ed0c50b269e4852dea85432a5941269fdf63766b21d25d8816de5e87ffa051009d232d6b258c5f43f45f2d48be09b2ccd8fc963fad81fb368502057afa7c865d62d932f652802a299295b29411439dcf832e8367a749b4d7adf7e8abde3ebfb844a9b1d32f77b2bf96b5d29fc15dae83ea80a990aef6590776ce1cb81587ada80b9a7b45aca3bbc54dbe67df090104fa196701280b97607a333a9b56a728710cc1cbb7569b79ff034572495181a92d2380a7ee5e9cd1b0f758c2bfbcc4e11464f1cc7d91f117319c30ccbf4c11e60b5dec724225b8d77b71aa58f5fbd498a3f49115687d58393be648805ba1737bb921a08d738243920c3834f8782a8256b7dd22ccd5f4ece86b8a0860bff21c5c8f0be987f2d510ed4df9cf94bf698680b7cfa22a575a3d1b5b431734b59a4b31913019c1f42dcb76a9ff32bfbc6e16d2fade26e3c17bae49cc415e4b370d1fb43ff652be62d18b0affdf286765f4f30fc8d6f2c4a58cd17b3bdfa013bb2daa075be5f522ef9bfc2e1506cc1c4d381b3342edc19c955a5fe48a712af5ace66a028d03fc859711c9d33231e48d41e58a2c2ad81da77529ad5e6b73e1ac96f0c8e53f153faea7903f917492a1d2b1203174a08551ff0f9f91e32bd0f31d606c80a505d5eb55265542db3653c2621e7eb3fd677f49534f261205f834eef1645af419ef6be5cfc16d54c7eeea12d2eb9458831f77fa558e4d5c7fe446ddaac3e1d502c941c95f572ad545ecc7cad21f0dd50845cbdedf589505fd34cd8c00d57243c3aa3615d84c39b0a72c28f40ac72da25ebc6987df5a7e390399463786e75d524ffb6c961bbc9301264bfe3c699101d18ada4a72d193971d54089e6fffa684cd3d77570ce0bb9179a156d3e2dcf266358499bfc158ac9a6913f622ca861c968ebba0a59a12674bfe39389a2125a02563b082259483e80c89a3763c0a9c3db485aebf22c844539edaa28a3fbc0053eec475679b741d9afc16b5fa109399fdd1fc3574df8a1292b8d7401aac1be452d38f97d531813369ee4c50f36736b95ae9c3e4f91ae85e2d664337daa40f75cced2f4a4d210bb4ee25a56dc217dd176db5aca43c002afd63ed8712d89e266674d9736fe4a9f202a81d177970411dccd289b25798272d2647ce6451906a4f7d46e87a46cf6cd048b6bdb62488a24f48d1ebd61ffa474321b929e0a7b6f9d0f6d777acc14815f343e1\",\n        \"signing_randomness\": \"34f2a1e37ff2d2d8bdaa7a828b98fa44211d5c16b783abc86dcd399011ef2864\",\n        \"sha3_256_hash_of_signature\": \"9a23ca671e70ebaeaf47685c03ac211249f889970bc946b1a111a64c40f28d42\"\n    },\n    {\n        \"key_generation_seed\": \"4a84ca5c3954faafa11ae87fcbe701ebb5afbcc5f8ecae7786d10821e01ada5a\",\n        \"sha3_256_hash_of_verification_key\": \"2a72987b1a02c08bf97ba241540c4ad96457ef6859d045163e7b59524592149c\",\n        \"sha3_256_hash_of_signing_key\": \"65776e127e19fa9f28b38b0c96323d8fc9a75d59e2000f930d47a5ab62a11fee\",\n        \"message\": \"56ed7708f98432fbc623424c2a3634780470a01784becff01bea5ba192d02c33675084263c4315420a009579ef80dd15eccbb812652421872a9577ef7d07896a727a64141bae7173426dd5a3925159bfa927ff1039e70f729847b48365b4d3551476206aa049ba5ae8f605847aa03965f058fcfd478961ebeed06530abe900042321059c297dacfe76cc12d52311b2ff8ee1231c77049e232d9fdb751fb27eb7eb6a373b4b1c06bd0ff46b1b208072c873e6f938e689839079e48c6d18f678769f5f28a903467f2ff2a8b02cb19df675a8fc7560a7d38a918ab8be083ec4e0ea148517ab90f38394833304f245bffc47f9eca771fb80b9c71ccd05fc3b0d66eb06d24b914b63d9f16ad2f2bc454b591d01ecfc527277ae71e3dc683161a53f129743f3428fb82a89dbd5d42f3eed237cd2f8d76de2e56a2143ac6b2ba811f745cc72132028eecd4412b76fdd87a2e396adce72dc69b8fe053042e798b220974587af96ba419da6888b13ffe217c9d01434347f4162fd554b760883e8eb1aee46c4c26b990c6ba10d2d939f513bf0eecade8b5deb8de2bc8c8894aca51e65aa696e390c11689f1c2cfbb70bc5f72c1872d99babe8de8fe2dbb446a8129af0ab8d9613f0cbf3cfa6ea3cc409f4a97581d5012707756994b6c8d4fe7f64e0f0b85a85d0a5fe23224dfd7abeba8e3fb2e97ad87fa8dd477adf48f64faf486d0df11ae9c3bd3a04abc962c5b02cda02d48f0b52d84d4920c116c22455df291a96e6adff91e3cd35cb8b5b4e70e3da8b87cdc969643a32b1f97131c5e0bae7f6dfbfac32218eaa596d444574ee85ef7c9998dc1088e5813d50a4377d29506817e4234f68b32ad68e00adbf6462f8d4e215f15a19dfde452f0a65360f7c1f20e11c42eec55565ccb23ce248bd62e9dbe8a7d6639028a92b422ab444c5688b5d191a4ba8956f358d131e2ff6dfc607accc5d31af9678f1a226530078ff9a73d681deb697670ddc3e9096ab0fedab664473dcffedf9be62a5c7c54fa2eb5059e9a1d38413b1a4fe6d531b799453bc7185abaf78cabcf65f365b00827cec5f29c4737047e3b2932a78757e9626a958486d1740ecf1ec17a01aae6adec5104eb934f432207ce31d7096acb3a0fe2f5dd7890c021892fe7d3f34596cf20b6b12fd55911acb46d7386f99a9e9ee067a45c6a1fbb463e63d69cb582da6ebd6330f4f80a1fa72f2ed24ce9bbcd967118cfc7e21f6bfb68a905f532bcf8b8befa03295d362b41d25cdccfc9b41767858f651bc56ab2bb4a8675513c5d6f1c943a20a27dd29f941ad141debaad219e056510bc984063fa0f389090d434157438bb1759690c453a2f55f72c033797a4b0c534ea2ea084b3b6f8966ac56b106fcc11ef08902f2ed\",\n        \"signing_randomness\": \"ad050b9fc35d0851c155c9caa3428967c1268e0a3d19319314a91df98c56cfde\",\n        \"sha3_256_hash_of_signature\": \"1957eea82c1889c4deb8e11f9b6ddc2f61c8c22a9f8c463c54e9784037d32d81\"\n    },\n    {\n        \"key_generation_seed\": \"3e74ae2b1d49ee6f149076f0bae2d26a5cadfd5de7bef66dfcae6b588a1f4067\",\n        \"sha3_256_hash_of_verification_key\": \"feb91ab9ef56bc634037d52803cfd16e04f70662a7af2496c95d4b48b35572f9\",\n        \"sha3_256_hash_of_signing_key\": \"0fc73a2694af0bd4657ff2fc3750d54ca907e6a203716763436b374497293fe4\",\n        \"message\": \"e42c006f144b0b4e188febc82d63d3d37096deec9d3dfc3b421635dddb73c76f6260ff1c53222a50d30b26e2de3d16e3aa64c78604e1191bbc0e2553117a441159b2a35fc8889499a2efbdd2f30b8b4c6cea38eb5b2575926e6f22ab96ddb4b0c5c6d78c3754a1b6deba49ffbcfa7477be9a0f74ec379d1c9aa59247c091611573af765ae698d78152187b291717a9f03fe767bcbb12f52311215579352e7ceaa8654b5403f18ce82e0a73bfd5fec1063b506f44eb1c9c5a03697d03dcb2ae15c5095f292b4bcb130b55c19ab728b3232ef77d1594611573cc6bdaa254f05934a329dc27cfa6cd8c02cb51c3c295c964c40502fe2b1a81a51c866f7c7380bfbe339b39c8f51f73722a05b5d1e9cb6313557b3656863803c9dc99bb1905d7f729b2db8da23d88200032f36ffd04da11ffdf6277acc69c5407289d00fdc3c56b32d54877f4a8dc70abd37ec532b8617d9f3c535b8e962fb389e976b4d1aa12de5c1c2ffacd50acfff65201104648e0c04cf7c1f880e8bda1d68404ba67c4bf64c9d2aceef81b35fabce58645e0f2f61eb4ccfefde7239be408710d349987d849d40b3ad294b9d815a91848f9ed53b69f78d9e955f6d1fd7e38ec291664d54c2bc359fba241ba6abcbf5fc2502d93760d9f6b1f7fb766040e98bdc23a6047134a35327fe128ae24b4c7d0cdcf1801947a1821ddd7424892df50e2dd5c1e2e6c5bfb4467524fb45c7d977604e7e0f1f98eb8c03eee1d9a5796c8a801f082678940f076bf44d3496730c9a640fefce385865899fc33b5dd34d036f2fd5d07fdc0a40fb725e84ce403b46de712b4b44ca8801a1ccf58233c5da06719769823b5945849ddabca56b0b4ef9327c8b5e5a445e6853e5b66b8d590759d6b2db722c22f8c741cf3c6325a76d93f4fde5872d5732fb19aaadeb7c18094727ed43b305b87ae2dbaad67f90feb86498cf65cc57ea635340f27ae5c5cd60ad3c763223af877e65a005c488aa4af9309e1aa02002b01df8865fd481ea254015796985969997a53b06df0355a6ab3c8219b652b09e1f86a6ca12d27c4bcb9e8d35e6889198c8fed71ad5642f5f9f7ce1df270d68aa05467ef9acd9a51347af1ee9ca7c4a5d78189042900c6d561f68d410a77e79726dc123b196c78829f02cae7d0623bfe9e7b0d8bf84033086295992b77acf027489d51bc7ff006a8d4ab8079d494413a565e7f687af40dd18b86aa4274edb8845df114c0146de3199cb55f773a87ffb126b3a4d00d38835cfd2d6652c07f572f39d0397fcd62acf6ed9f3e8951348ae7e52a669fa4e2bfcda548abb1989a1d74a27b73103770290e6ecac87029359354ee4c87a77bcb5ceb10162dd54499905ac8ed442c173cacde068bc546720d1284015acb90ca19147694b53899395dc663d6683908f3cba29ad37f15cd3903c4c7f4bd73\",\n        \"signing_randomness\": \"fe7b70da3b78360a10c14cae7eef4db2906329d5ed4bd1ec418b43bdec7b3eec\",\n        \"sha3_256_hash_of_signature\": \"d240750aa9f96e65fabdc44191826d75bfb8d52157bb5501fa508a9b925278a9\"\n    },\n    {\n        \"key_generation_seed\": \"39550bd2782d66fa95380f5f101d827377b11410f8bf3bccfbe0e504fc09ae38\",\n        \"sha3_256_hash_of_verification_key\": \"0fdf813f240bd5ac91d79f9b84c4486001902d58ea621a9f07762ae9285c140c\",\n        \"sha3_256_hash_of_signing_key\": \"e40d1ed860844aa850dc85d119cca282d7237a6da8e95b5ca9464f673cec7e24\",\n        \"message\": \"9c311ff20f574cd9b7bce1df705ae7dce6e7a621c935a6e57a59eb31fc443ab1e014ad332fa784583260aa6153c464565c4568108d60cc126f6e8ec3bc9120e5659c86cda8a31a7131936de7b3db39a4692808dc3d2bee8a99880ff9d1d5eff1e825a0f043d908d62a99779e013845ac0c21abe8e4df0ee901e4c6beb8bb36b30228b7756d617a8f30c16351d8ff91786f7406f75d9fb648830f88ea4537f42ead62e8790e9cf11f72c31d718221049c9aa35376ad8fb065f4809f4383a23c2b29425836c2dbce4680450896eeadee6b83539adfdf59aa4fce709d601640eb9a22dc3b41108a8ee1fccde9945ebb1d3f676ec8395255e125e62a32149c73451f597e1c32ad979e5be914ffc7c548d6ae92ed08501831e9007770a0233e5778f22adf7f1aaadf9c9a7c82d2f42989bf21627d3ef8bd0377a5be5c9f5a585a246a73de4340e6b43b36db775b34033962646c16f26a2b7179c40a721fea54805b9ec42177b42160b1a67341235b5af9f30b2703bff8cdeee5bd7ce506b0707a69f84225b6e5a92e80edfa235803dbe2cec47cfef0d9fac95c3379816a39f4550bdbfb45609c76d0351ddf8d61724bd5e8be94673b3013eebe172cace247d79925b12b5dba2f6fb72e797b2da849b79dee3db76775f5f1dd4595678671c7b18bb3749fbb0c6a7135d639f16b3864b5a251114de7e9f8cb02b4cc69902ec8d7d544d98e24a05f8accb182e2eb44bde868b077b1fac4726e8b01cdd0d024405665f7adb60a23fdbacf421246354e824cb74dfb35e57902794e459493905400d0a0bad51d8eb94efad55c67cd0c7cefe7a1b055f06371aec7f490fa685c611d553d8430992ee7b1855a9cb305b5ce53154345d7def6110ddbdb5cb59559eb664c6439e057dc022f8686f2aa0ca81552428437b0ceb5fbb5df254036bd2bae7290d947c963046771a39d2656312236569e775e7d2a041b7eeccec99c1b9d2757c7370e474012ae707ae00ac37b73ed9c8e1a2774e54baceb42e8b31bea734463cc15576bd4f7a33430b1987d62e47473391938312f2481838f286c4dfaf701ecbc6eab1a9f074c1f8d8963457dfaac9a9a8eea70c50ce70d1ba1006760ad3887605ec38861dc1a777d21e46ea169537057cdfe256cc08699d73b1ac4fbc62f863353581cad358b9c573d77585df6544e5d55048d66a352828cd1adf5f42310ffac022a25824430f741371027b2dc14717dc87342a74f0038674187e478d8eceffc16474a4aa8bda0c8d41962ef2a4b64a036c888ccf4ea628e1cb9ee0f9a918fb1b22b9367feeee0218c83cc7e27c5cb2ac64dc7e111e3c85ca0e6bd4f685e5ddd428e028d192142ccee3f0c8337bdf43ce4b62704aa53c703ec334fb56ffdfb81d7d4419535d17e5fcc0e6f558ad82149c591fe0357da15660f61544b4041128218b6de2b75d3801510669a3977e2983bcaf957ee2942e504c29890a81542ea208e1cec\",\n        \"signing_randomness\": \"7fdd2cf4e1e5d5ad2a80c4075ed07b30eb59a4b4d96477f25716ad9549346da5\",\n        \"sha3_256_hash_of_signature\": \"24eacfac896a731396ab934997103be1e2f82a2ff49ff111f190e652f022818e\"\n    },\n    {\n        \"key_generation_seed\": \"b18f0fdf9dc4f514107f88cc43fb29190608ebc5a2cd00b49fe20631761038df\",\n        \"sha3_256_hash_of_verification_key\": \"a3c23888edd8f70945d9cbf57642db66efe319c1b3861e40f8f8ca8e57a4b645\",\n        \"sha3_256_hash_of_signing_key\": \"3b545b1e820ca9e16c5a0df1ac282746c7d4625dcc590121d4ec96f6545c5bfd\",\n        \"message\": \"7ff38725f35312d75e58845fbc33e112dd95d5c1cf78119cb413ac839377c7051bf5f17add1484f5ee12f42b0587ab41df487ba5e4d8836777b614a9931a5fefdc4ac451662b342d675c940061c4ff01f747b69cff585fc5317636e2a830140c0007f73c76fcab96195c86db98e5e65c733825db0325407e5bb059490f2e9133f9b4aa328976256eaaed2fbc59d00288d4830d99731a3aef36e5bf5239f2899c500f942b80b00c3b33307450ff0c105bedb7df84231c5d24c3c3475ae2f46336582de93aadbfd385c824f21362c19b1c6a75f56b69297fb3084b6164204e2348cb1d7cd3ab494bfa7ec8fe346251c874085f803bd7f4dde1995f0d3d17033c461d06b49ecceee0d5312c3a435af5bec9808acc524599668aacd95ecea7ef07c4ca3fab1cf964fdba987c345046e6507ac3d372bf07d72cab816ba627c2bd452ab8dc3044a7f0a01d8c0ea47904a5dd66c6b7ef9130d628a4f2cea5a0d05aeab7daf2729c1041fbdb3c2d17bd66ae293c03e77a0837419471c29691edfb20cf69bc6260975089aa437628f140a44fa2e2967357ac1bf1345e4208c33cffede6cd634b371e7745143ff848f77e5130d1e0f51868585509f9cd3b906ee0a5072ca2e908d6765c74d9b5c35b6ba784a3ea59d808acbb1c24d6c088ca6c9e17bceb18337a4da0c1daeb5d51efb35712a475d6c5a2ea51e93fd79f7deb127f3418f354df06489e10b42bc1f20651660caea17f67f306f48e15db7e67a1b56578ba7be6c229fed9567e128d48551e6eefa17af5b95a716555571f44fbc41ab29208db7c1846e130866d5c9be6f73e601c55610dfd0f67d98933d252059daa1dec20ae0e5bed6568a6322322d8a40e6835fa66e317733e1b465434532eea8fa76886b600e06efc1da41f8dcec0a5e8ba8419f0b7879cc0a93bd14d99608b5bea931d8971da8d2d89053e1de40209e257e741bef48c17fa15467f1312a368d4a061bfc76c2b7bbd900b4a34da51b7cb5bd6e2fb08806a53c0d60273167d822fb6982785f2c3b0ec7d893b615724d0193928d0ea8ea2a1dec5abdcaa904c754cb7747449e87221b3d86bd5df26e11da753e768a8b481c306e485ec91074377dfc68be74a444906e420c2d8bccd84be13aa5ccd11115b669c89e9c0ce374bc4059c696e5f8344fee467ac8c8ade37daf614992914c763d971327b60946943847fb6b82672cc376b780953b6f4433df69ac61e110fbf1a35f6272561193d8652ebce3291333fdd4d84b9cfbc60a57e1f8b817e84ea15d440d4a4b4f7e19c08ddfc5949fe8cbddcd0296a62f12f53d48b1288b80e24c756fc38e2fae9c7a3315d1c6da42ae838afbbf5569f633a68289eb7073babcb210f4e08856fa65057bfabc70ad3b58c2c870dfb5e1b0d11b6fa6d5bbb68285d8f9c21bd89669781c9f4dc32eb1ef58b80b1d371334d36fa66a2b3dd4b3e4dedba7aa9fb7e0245f5fdbb66cda653c5232a131ec1f0c21db1c47b990a64a24dc8c4da951f419f57c03ff506e0147c22e99461\",\n        \"signing_randomness\": \"c1ff0e9e3f024036d0b0c1b7db341485685def89b0cbfe051fd31d50401ce1bf\",\n        \"sha3_256_hash_of_signature\": \"a6287b0cbe9a4088ca418e2e8831c1424f525ba83e51e0446c7168ce5e437f93\"\n    },\n    {\n        \"key_generation_seed\": \"d4fa14da39548392300a41be413ebd53bd7bcbd045b4d3c8ca44abc9599e269d\",\n        \"sha3_256_hash_of_verification_key\": \"2c629d61e1d533559d3e2c5e02209630179097a507599b7ca1d2005a9b4cf425\",\n        \"sha3_256_hash_of_signing_key\": \"e009752e08f73ab02fde63de72b910f1b94af7564fe96e1e0cae0d8882b36b8c\",\n        \"message\": \"789518ee21dc99cac94dd5298b2f3eb8f6ab8d0705d24d9aa3012f217464e7f203e08e5cea9e44f54a6f73e88d81592826e243b7f0b2a1b3a06e5afde23a2985183a0e430e01c3fa90e9f1db7e69dd8e7dc6fb802933e04a18834c091ecd46f0dd423f532668cee8a12a06bbc7e5ff3b9488b8f4a87a92bb8d6f313269ad95c574245e06563bb58bff6169b8f4c333033bc128b91cb81dd41b831df5103b295f744ede95fc3a0c72f1134a9321836afcfd563192c343040b943f69c0e98e8d740c06ccf840cbfc6bf777c9561065916f13d116d758a151e8ff4c355363aae8e4f49d2a2e062a2bb213aff25662d95549b4b025e70aa3363b50d25af84a3e5b0ffa598ce074733ad191c86c351592299c26c0a4933573ef436b73dfd0c4eacf93d361afe5f824b91bc178ee8381b9efd52302ab8cad6c08c7e090393b9b8abc78af374fac6e60bd104baaba524e68d75a759b94176105a9cff2e5b9c3984ff61c5afbf22b8e1b9e4f9bdffec0b19c2a5c8db3b8b2c02115d101805c1bd6652f738f02600e38998ca41ba8955094fad5bdc34133d4b523ede66cf483f1cd5acd9efaa69703807410939974d6dc033bc696541357da9881a4fd1385671b6e4bb889c68b544175c1e2ec1395dff4cc87e037087c615caf40804d5f44a2de301961a59818173730a45cf4c2df172614aff7199a40c9ffb9957242a89ff86b36a4f4d60f15db569c2fefaf677b35fe5f12ad5a323397714286e338ff6b9080fca50b657db477a52a93b243bf28ce2743794c361f443ad81ebaaeab2b237ebbc572d8586c3eab1f42baec1c985d28bc58b296a11d96a04b0e1f7f6790b92e450248804f3f62b5865941bfd444a910f31e1d6b79d8906e7e9828618f960ec14124fbeed28e1f58a8bc9d31773442fedc5a220f3912d0b41267d427c0c15bb76f9200c54b5f050307e13f1eb3de92b864c994a3df4cebd1bca634710fa342e23d7c8a5bac1b58aa321e215e4418428206f05232e2bcd1b5ee1bb7e34e7d4c93088991ee9dd643fd08b0185a2f0aeffb0ef0eea3acb4ce234bd5479a4f4296001305826f23083cc9dc99011864f250e77e42a0de26ab09ff6e3f32552f6f913256729b357cbf5dfc825e91bb5d3fac1f729803d431d339955960ead69b1e54536cfd774341cdfde1d1f527da4e738b2e292bdc884687d1016dc193edf34a37d284d026d33698295e864196e0bf16fa83a35f65ff2b38b7030e9e63eaaf594f272e07941313d538546bc84671739af822391ca4dbe6a579a81f45ff51fa5b7ef49beee7beba4ae07452c13366668f02752923ea3653043b26c883799fe6352f95144283d946ca87143b74c8a009c024d073baab9bc4da6c87d35fffd753e1eec7f01944639e566fe17a6f715f4197d1cba58d3d153bda37d7d2d5e19620ff0842527d109333fa2ba8bfc491689f4551bee6c9d13bb9e69ee4f44b782bb05d1e48d293bc15b9fc706d52b021c7159ff7df80e55627dd7555795f1fc616830a4ba2c02fe1a19dabe088e460bf3c5a88313c443179c593458467faa468791ca74e9b1e759847b6939f\",\n        \"signing_randomness\": \"35c3848bb8ed68520a67de0a06f41c58d38104eefba7204a7cffcf76891c46c5\",\n        \"sha3_256_hash_of_signature\": \"9211e651f580bcde471cc06464ae894515e417718dd8ee745228ffe9416c5d59\"\n    },\n    {\n        \"key_generation_seed\": \"c796fd12d1feb1df46b162c38292684c09059e4463cb95dbdbf498a4dd4f7f00\",\n        \"sha3_256_hash_of_verification_key\": \"16ebc42e34e232b0b152ad7d4548c0d4428dc39bb90a97f41aa0fd6497bec783\",\n        \"sha3_256_hash_of_signing_key\": \"796c03cfc5982f7219fd60691672f378a8a6d5cba34befcfd4c7b51870bddec0\",\n        \"message\": \"a4117808d9d05b702483924e99623e778e7a3b7623739ab7ac488ed93e711ebddec383bfb7e06086fd0c374f4668ab744ad99b8af1c75309b60f55dc03ff7be6f23187ffd5cb224068568ce2d06abe441557b04a5a0c2858c416f6f7aa89a96adfc2afc54e0f31416ceed005b7b140b342652dac7bf401fed4d94d475784936fceb4b4f334bb14ba55b1ea9a36e2b0591287eaf4aced997162691a96e7f59853e609eca9a225f615a49a12763d80b5dfe6f8638923c39bd652936b19b944d5116f790e866a61947eb60cd1f3a1f319710d0f40e487efbef51fb4d00f5dbb94810128215f72b1aedd74a1b1d237088de3098417714eeb67d6a3e6bb647b6b0ac6d0ba3089d4cf6252b69c414e2bd6614429b6fceabeba50a4b53c7394652acf7dd9403ae14436ed5fd4d1c9e238a8399a763806fef5c3742c55b7159ebf5a13b271428f91229c191d617808a26af9190f9d445bfd3b273702bc3e7f610854c8e86066be7757960a880cb6727cef19dc7b464c464a7dac9ae85b799747b8488a4123b6bc7f0f7c2a8e53fd4f8687075b4e25660f5107acf22ca688057dae0496ff15a3eb9379a9f6e22fa43c932f137e389478c05db86060686afeafbcb9ed79ae194c4146a48ce5e07eaf585279313851cb864a50075ae46c1aab3b3cb920dee2652f5afa0138051c7c980946e8d5e18c16789cd184dc5598f65875ef43418dd56e11defb5a4a6afbce041bb292e0e2ec563296ba4ea6cbfdcca32a18c8aa395515a83d0fb7819413e5ae056ff0ec2f63f1d52a8be0b334a628d00995bec7e46a34bcd2dca0e9c5a88e0fc8c43843d6ae074c699276293fd8db2be48885155688428c2f5a6c6c91bd4a03cde2126205f9ebafe319d1b4f80277fe99211a09628ad840046eb9aa568ec71252ce9f69827b677d9c0d99546df5a48a8d253ac0036ddaf4d045a70f94ec54bf5f06296b2c2617f2b0ec0b8374dd28de269faf739b1e55ae1846f548fb6c0403c5ecee3cf9d1927e317f0d07e11aeba01c240fe17c6660f7cb32305af1eb6de4312fdea6990da4e9135dbc0b88ad0ae0847e1576f3c2711b785b846c7a4b823688e4218596caed583a90dc46bb9b27e00e4c1110b65f77e602f043a8441563667691c07162e52a53cd76e2d74dcaaa2983bf2e8f02cc30b05bd4f9ac731931c59f9ebc038fafb09fbc886f4c4191352206bb49adaef9d74bd08a5b780ff0fa301343f5ea81d36912eccb0ff24bbf0be6a8283ebdeca79cfb22639da38c9c639c4bd66fe5a75f0414fcc1455702856e6fc58344bf02998e17e967183ae920b7e04f58aa09145d6da79b65efcd18ec55bb9cfd53914f80d73c2b08bb754ac63e4c82d44b72376a544d97394b7c99678758b15cb94e71f9fccf674b29ed5afdce452959be5af510d57f9e5395a576eaa1fa7ba9aa4122a779727071fa485c005b447760410dee20b7c2299b4a0d5d9e5e4e038a19c87806c3fb875ea5bd7f47d034d7d5fec4bf132b04e47574172d392ea7b371516190ab81c67b45fef6332848a51b6c7dba90c410a44e9a88ac082fe296a7435e7d2ddfc645d5aebbc29620525757dad1b0222159d658c7225d02374ee6af479fcf1aa28cd91b\",\n        \"signing_randomness\": \"e23d6768de6e3ab32855028cfb7ae2d7598584cedaa314c70759b608c86edaed\",\n        \"sha3_256_hash_of_signature\": \"f2ae81b75d8f6195ed3f3fffe9c6c8aa14f5048a2a37ff83c4ef634b2b67ad23\"\n    },\n    {\n        \"key_generation_seed\": \"a18a366a5ecacae4732dc9e954333ead153203013bac4e3c50bee15269f983fb\",\n        \"sha3_256_hash_of_verification_key\": \"f569d8852b2a784c23794f87d44cfeb04f0621dbc1b7f7def75ef58e33caf93f\",\n        \"sha3_256_hash_of_signing_key\": \"e832c2c06a5d4e28d2b78556f2015daf920f995248b7d65a8046dcaaebdf3d54\",\n        \"message\": \"e82f5acc7c1a326d430475357629d568ea3d0dbe131114781d5bf8daa32fde9f3cecd288acd14445678c5ea6d3afafce48ea3957a6af8d8f23f78d84130fb6419f706eadd430cc85aff48283f15602265059abb075e011e3941834ebe70787cdd55f1e604c6b86f761d94c4f5e525791333df6d43869d6f36b212a8f35583d38a21d0947cbe26fbe6a36e189c73137f2f2d89f48566d04d2dd9125d2ea4e0b2a7e5c1e9d2ea036cfadcf7bb28f6df3b7d6395230c9d39d1e7558ea25340252708be23ec6c0c9a0946c5c5af0fe037c254d1a5b2b70b8f916cf37945bef76bdfdfb19a0daac5a83a6357e986b3155cff31024121634c3700ca99e5ecef1f2e411c6621fed6092c1ab59860271ac7f431e568075d59f71aa18096195f30bbeb1a6bac20e034f83c72be0536315879f1d1b7f31d38c12dd8e97819b4803d02becd436b61d1296ceb78ebf857e34087ec8ae8395269b5b0770b3423b39638910d2a3ddfec8502389fd8b5b09ffd10caad1a5c86e7e39629ab09a4abcdd00fbb9821f92e7dd24dda83d1d9762f52a89bed6c20648ea04fbad4233e5920ae83ffec28fdb5e432929a41db782b2cea8feb40cad0b27903050b650477e5d9443a536ecdfdac673952810596f1985427359d9e4797cabccd2fa0c0a2394d853b4e6f8e150b3e3ab5136cf476605ff5ffa9067c0fe58a143b50b18b09256657cf091132d449a6e7ee79aa870e9dbe46bf840edcb983f585ec2856c059808e72b8c901a25d6afd5372f168d533052a6d26418e035d87d0bf818adea19915047c8d824a425a8c7915756673e0f5fccb1b4fe7c1fdfce505f7e18f023fdd32a605906ec48e0fa755b6d87e47711e158d672c5fb4cd3b8d1d13fe9eece58453987cfcdd87b621b870f3aa27e73b6fb7fc0a6757893b978c63b7723c49d1005a1e5b1a4d60c4a2fef392df7ef97f149b499164455633fa485bdf92f804a47c8703d124522d73887a2b032f10f45343993ffb009d69e80fb54b6999a5bdb2760f8bcca648f3c52bfa1d887ae49862db4cbccc7213acbfdc48a57c3da1f1ebbea828182432aa1c593c3e5591c825e5706a5f9503311e91ec3d8f4a9554c3df915b5fbe0516a7a5597ecf8862a8df286ada96c90c9f2783f7f947a18ebbc64c1baf24b29f77521a9ebe09becffdb902efcd024046fd3e6182bf0c84bd3a0a5410eedbabfc60114e5db28b0943d79f58f766e2edb16759850d4cc3a9a57ae073cf6f3b24d36a4365e2bc64674259170b6d11dff63d0deed085b6321c45f218e09351aa0d4155189cc98de5627a03396a067ab3fea2c133062e3823fb1cafa5d592070c8e82abe812979dbdcb6d2e595f33830ad0e8e2f9e6cdc4d9c74b8026ead1815de36772769c4e00806f79950a40c979c14a4bdbfdb79df1de01fdfcaaebc93ddbad62ba166843a121d2b144559064e9de9e310dfc93d624c1061bad3195d6c9f46db64c65a31e90371f9b644e2a15e01c262395269a9ae83f50776f852903f86e5518bd008cf1b35e78f910d48c0b7bbaaad5dff2375c55d56b8f65b922229d5f494edccd2d676361619fedfe6bf0bfd7e4c77fc459f181120c4430c409ba89d2e5a8c36cc6200497611d9d705da6ae1aca4e16b389d632a982e017e1dad95dffbc7a7d7191e7b8fa1c0ed\",\n        \"signing_randomness\": \"77389d1b21d40a49d3c39ada885422bfd31059e24ed26c549293171568c7cc21\",\n        \"sha3_256_hash_of_signature\": \"13e0b9be0962f2a54e8988f310f24ade30964c5f701f441125a847ba6df8a243\"\n    },\n    {\n        \"key_generation_seed\": \"585e714d565aa66078bc2b12699f1e86c6ff30a1abc8cbd19563bcddd2f1f6d2\",\n        \"sha3_256_hash_of_verification_key\": \"d15c24493722f5df0756c5c3c2a9018022a92d9ff6d4136ac44fce995435d328\",\n        \"sha3_256_hash_of_signing_key\": \"49f4a1a292d2da63e895a43961e7df05f290862e1efe508e7fb149029937cab3\",\n        \"message\": \"743e5d96b9b4c1469e7ad2b3703f711faf60ca335358ff3efc8fcff02cd020a443243b4169f9123351b6c36762b85be5e5eddf8d4b43d82caa615788406a31cdf4f7087d42db21ae48a069aa23a8f6d20a1c0762f973e526f011dec737e986cc324724bc5336d0362525757410e21046a12ac54f2237e68da036a5c1389e46a53ed8c21774906948d4c9e14f40519c54dbd02b7a4acaabd24ffd7f6ca4d6d582ef48940296d2893415e811fe7ef0801b35f1c594e6fea2c293869bbd45618b6f04fc26b55d55a0ae99445aea12f851b7e58a49cc6a0044f28e3eb838cfa6bac5df53b0db78be2ca2bea1bf2deffebd673a783c91a6c9ee710b12042ec2863a9b52eada5b0d32101bba8338f7c75cdae7b7fd6797b25f96abd53a24a7647a1c91610306ffc72a8da4d46b1778146a98bd59cea3173d41d5a53f9a7f9e282b5fda1afb062d8afb63cb19b0e76df782feb9f7fd50902133529cfdd7c51af297895ef6e1871afd4c3de93defa8fcf1fe67bd27b7eeb0cf37a6a8e09af1203922bd9b62672d4756519cd09dd9271ecd0285f92030a9fc81c09bf2fae86f5f50596c628e0be673571cbc2fd76c563e113004529b234fb50e9e3d6d1f814cb8e5b5cc3ea365d0bc7602b146cc0361397d9bee9246fba3a724c462e177d27836093ec009741abfa28379aebcf5ef09bbce00ce449fec3a3302fb9ad0f010ca338363539da545f159fbcd3d6a0482454023587a324f5132fb6f4ca602fab2cf6cd59104427264cc9ede8d10cd9dd7fa6133e65693dbf744443ae920994226e21d98634bc7f0710dbc37c18203efa5adb467b523322e21e4e686b6b85b00cb501ed84153baecd4d6cac9d1183e38b510f7b1dbbe5995bcb717529b83fbbe969dfd8de21183762fcded692b16502834fe8e7a7c46f84acdcd2c9975098cf0cde8ac0efafa449dc26840180dcd9353a2f1b06962677c808b07345e8abe95b8d24f21d751a4edcfa0e02ff077de64e6b992e8c8822682dcc7f03ca7582fe7c74e0a9822a02d888fdde1fc9e73c2ededdf32001e918771e5f511ef8f88ac19b76fac0c812f56938f814d712d99269d7802e47634e541b54e00f9eaf78a421506a88b4bf7332dfc7d79e8c41835031fb449507d19d5a8a512a5c527c95b6f21ee3e41fa43591dd9bd2e4293701bdafb624e0ea290da4b7a173003867c4cc3fd814e117b4eee283c58f5fb33d653e410f68c8962155b8c4fbc13bb750a0343737d1fab36ebc618a6a7c8e6f93855cb24937b01c438fa713d334df335d0745582f680627d8b94cbc25f0d12e3b1c27a3ed72e2558b800c19dc6b719b961e0fee43bfc34e999027ca1969aba4c45fdab9af01b955e948de951f5a1088beda43ac930fe99d8cbb3473475c444f43e928e1a44966265b38fadf9b1183700a95a81f85ea43e5c61dd9b2d67701c95583e8e3f15083717e1722d764b6e624505347c30e5e70163ed9a046c504ff534956e911294d2b9097bbeef8740377ef0d6c4cc8086422902bf63556ce6da8e33e68fcfb42707c00693a995d17680b76293194db217eb5a928303dcf1814e4a881b057baf2553ac4faac8e4bf23fd4074154cd4ae189ff7e204eedb8edd594cdc21b5b7d73a712b511d068f4d217c0f91f9d84c524d973d67aa741eb13fe922afabf79cd2396181143783030fd2d0cfefc877934d8037a4c32ae8e15b50a6fa4269\",\n        \"signing_randomness\": \"151110d1cb8e5e42a3917527ba7a5cec33036cac5d0a84bf0f1b7b0e860bd0a0\",\n        \"sha3_256_hash_of_signature\": \"528acce5bfa732fec115c07ea661c28d4278426a0c8dbe642aef6163ce4cbebd\"\n    },\n    {\n        \"key_generation_seed\": \"662cf70d3d5e95a9c6a33bd7c6abf0e8cd23ab2d2d9420878c4835de14a6c606\",\n        \"sha3_256_hash_of_verification_key\": \"66ad53809e8d7d9134d17247cfda51164786a9bbd7e2d9036d4e715ffba0ce38\",\n        \"sha3_256_hash_of_signing_key\": \"608ad25a785bed98280bf8e4f1e5dd95f25f1f92a3d5c04d878b3f7a6aa4294b\",\n        \"message\": \"3382e87ba70ea986a044b0cba2eafc3316c1ac95a5f16f6368c210dbeadfae6cf2382ddf5078ad594cde3bd1a837c517b1a20a2099d938df6aa02b6c0e62fe6147c904bcf3ede51ddda60de7887dfeb2866db402d23e5934a74c9ce4852d4b2f53cc9bcdda312964a548f6f7c8320af1d1bdba7fd32ec6c86bc3fcb4205ed3db092fdcad9ac4d2b8575883e13f69d8c16cb18d1b9284b31823ece917c905c5c8b9d180c1bd87975871014f773fb57d402b8fe16ee312692665824cf0bce4509326a31957319364cd421e9b21bbc1dff663ed850858a2450c2ffe64b65e009a3999ce4504ba5313ba0ee4a8843349c30fa6e59fd3aceca130a37c04f9b64722608768973996112684b64d0c87bf95e5dd60661935831a6a1a9575ebcb2f64a15296be788c775d80523d6bb4267d91b0c71ba5f90ddf1933de898e79fc7e39d0a3d146f185214468da50aeb47402ab542e52ceb768a70cb1f749e4164cf20e549b674ce965ffbb98d874d34b5b7851e575e6c1e4de9c170a10dab84940af055a951260b0119f5acba320b55cdce4f16346905a2073cd9fefba95734e4f4dfdb7a33f292d45698831f1d3e9fbf56d9692c14a8f9887265cbb4441ab331d977e3a68a1bc9f406ae0fb1c6e91205670641b9868e2a987baceee2364fdb089a63b53976d600bd7a8ae88a02872e46927269d281cefa385c98ccdfa6609394943fac32237368c6203aafabde072054ab5a14a91391d5a943f4ed4a4407f275ccfd15fd28f1ae0eb6edcc6612e3436572919e4dfb57c049bd77b344d8e04152863efd4fae8fe3a7230aeaaaf82870820085f4b3eb5215111b6b8952cf2ff468b3d10f3af849f16e190e9560f40b05e6e2204591b58a850e2710f7043aee2a44a6d4a108ceedeb2d216e51102dd08751925de6a7f67bca1980f0789b34e2f86729621f2285c5d3a036cd87c76102e9d607c37ccdac8062ceb961053f3195b5abd88bc64fc65f8be34166841683f1eed291938f75dfdb3af4fd2aa98ce95382acfb5d5dfe6ef243c8a0b19b80584fc0cd533e38bd485d1c52e0eb5bff90c0a947d9b9095ac1c0ce9754eabfc860990206b981235c7b612db61c9fdefc0f14dbf68a8a0ea4986cdc4aabad6c218559e11cceecd804eb98446fb33eae47c0388bd8972ddac02ce807b707d6d188cb31a1d76d44323e93dac4f8ecf77e7896c052ef16009ce4d1147df84fd5785d95d77310783f9aeff1dda693f4bed26457ed82a1cea19d9c4919257e3050b25a7d1ce7561740ddac3fd93a607c79875e050e40498bfbcca95bdb3d0fe639dc7cea80e3dab3ad73a4265f012451c1bcc2fda1e1aebb7fb18407f31e7496e2a18d2c686b47120688240a2fb134a3c314d4cb422811e850524684ec485e061f7365494a6403af170da461a3bc32ffaf9143d5e9b17b2285c56977aecaf880cdd34f26120dac4c950198233a50654efaca6ea97333d2bbc024a5e668821d20333df0b712510100aecab6b484ccb7814178f851a3e6ba0b76f16c4685d5ac8ba48558d382abecbdcf0b919c1acae46ebeb5011dd0b3c22b539810720cfbe4cbadb111e100c09c811e724a67c66a1b89eed1e7218861f55a4dc55e236c6e3521dcb374437a14e8000dbebf0f7f9bf409af952888675c11326d9e3e8a8828bf50caecff96075cf29446cada373529d310660cbd60c042c143e1736fe7afaf6fbe42791a8db01ec0475145257fe2df766d4ea972b14ae5110b8f8f42d659383e9bd76\",\n        \"signing_randomness\": \"7ad0ab708452cee65cd6b0d46ae27bc92b52753064161b4069ad82a50e65da4b\",\n        \"sha3_256_hash_of_signature\": \"96c99e01cfab2ed735d016f8e96cdb188e45ee4b2939f270264a214887054b77\"\n    },\n    {\n        \"key_generation_seed\": \"1924a71628292aa3d2d34ea72e2bfc2520864205f54ec6f19f7714733aa34cc9\",\n        \"sha3_256_hash_of_verification_key\": \"dc9e717682b6e9d864f9ba5776386c481f80634963b8404f5c7696e533832960\",\n        \"sha3_256_hash_of_signing_key\": \"dea9d5553e22e88893af1e3ff1ea12987271b7c0bd42c88b5cbcc2d692b5125c\",\n        \"message\": \"67109894c579974373ca0054ed5f7c373b7aeb810721c3d9cefa02eb244ef6b17507300370adb24ae0173c6d114c51e05f822a770318033c082b6502f70012283eda2a9dc0a1381f145470e5d3729d201773d2aa63c18885a92c962bcd3628835391d70dc36273dfaa4966f65ad40eb51fb4b416a8d0b1ddf39cb932ec4503bea23e3d9d3b4501db426c6ad99c28d415fb565f62eb5c22bb043c8cafc42ebd1c7190dd32a5b14b571644471453740c081f3e3305f9ae70a5bd505874382ec0f6e2188563e763bb8d1bb8b16587ae25a6252f51e4ad02d0483c4a6e8aa2849c44629cf4b7c6dd6a5fecdab0f9b2f0b35e306c7532b64bd5a3ce67a0247d97024aafe5cbc13e375aa69b8287bba9ddc9aaac2bcf41a71e373ee36b13df9f829bbee8f48802dd9e03be42a5e290251bb130e0e2abcc4e096dd0f264e5d29f8c2388a0c3010e78f2a03f5ba1be13aa5e50f2ba67a031ce3f787754b8276ea1af62bc5fb4dd9a9b9bb84217a37eb9fc7aafb517337b30454200d6aae491e50d5007eac2150f60f640a5c4624ce6d8112119413731322bad9762bcf72349ee38e2a41102bc5461d72033072a90e82d105e6fcdaed9c223a4142cd55920196d7b1b9278c84b67a2e35bde3c9ceebb8e9007ba8758bd35c875dd5fa0a8fdaaaa9a09629b9df69afaab456e105dabf2ac5834b8d223b0a406e0d1295c876c447e8e09c93fb09ed1b3ef6e1f3b7fcb029f576a45a12620567e05f218bc3753109dd29ae0ade1370c0f871ab5ad8a9dbaa277fb869ee552e8733e73886d6dfeace6b35e481f37a516ebe191daa6f83e4ff453cf9cc9ddea8ee507af0e62ef3cb8c22949cb828e21c6aaf3fa9ac301e2257b0a054ff0a237f527d53eb757820af637ffc9f983a2b5aff0b4cc493e610314432c9c2f0ff73c4240d520d1d73721b429ce41807b7424b14f5eb1cd23d5562263fe1d58cb1d52e5175414800cb090242e240c3a7acad4c84dbd8abc2731fa2b1d9820da60fdb6baa7ea849b6a146e07af7fc201b3a98e5194bb5826945faca3690209e5726f070a71ee07ae76adb7e6199fccc81c8af7a463633a58873b4f7e65f522fda409979de41cf54f659e66cd5950a3a3e01570526c46417a00ec2e8821dc380abfa21384d141d259cbb9722f267e46272adc5cc4bce382b554226996f4a6a1605287276c18a48c8ff1a92ecd2815ca5452fd6157fc27532680022993535549bf9ab064052e6db4e9f83b5d0d885b94a90f59e67b9df0c321eb0f95ac07007e4ee33ba89aabeeeea01fd1172eca4e31fb02c507ffe43cd0d6c8570769a180e68a70bd344b4c992e7d3a6bfb96ac4d69c2d4f5efaca1d348dc1988de44b30da76babc307a88124f96f26737a85fe6047e7e485c7e4b6b99b575faedc9baca3e080e2b074cffce1f716c6a1d08234c45706d2883c6e5a001d02596cfe5b260de6134c75df3ac8bcf1919759e15576ca147cebe041d04e369bde70cc64157aeda311c8da520eae907c33e30dd89013e24b7b02e66c9f285bf7d5c3fd65bae24ab20d40addb451ab4bc4b9772d0b9039461bca8d3d2a4d71a2e6bfbe7f02325fd571fcae1fb47f855612f382188a5fa3d61c3e8e59ef016db0149c52e1c7dc84030e6c93c4f32da6ce5f3b8196affde834d2adc26cfa05940055401891519386bcd33d85584d74b2f16d8e19556c272aee8397a1741effc283dbad317740c1b67f8f4b7d2d1edd68d6615eac3f8e3cd26ac4f8058667fb388b19c654711b5b2eda75a9ab55174157cbe08c186a3d0963bb3011a9567bd499ad2a8\",\n        \"signing_randomness\": \"c873b18e32e373e33b6299c960eb6db2fe8d9274aac0d9252bcb5394a8242a68\",\n        \"sha3_256_hash_of_signature\": \"38de1fcfe1aee3785c00b110037fd4e50048f4d38920ed96c5427964d27437e2\"\n    },\n    {\n        \"key_generation_seed\": \"ef7ba21809ae7e0bc3230b6061c5fee206d805572cf1345198e1ef22a8fe7322\",\n        \"sha3_256_hash_of_verification_key\": \"14c9e5a62a81c176b86a885b7d1ad045d63872ef581be780b14dc2ebc66c8f45\",\n        \"sha3_256_hash_of_signing_key\": \"7e571cd7209468176d33815dd31c7af0d5d006f9ec13c4aa93b5a2a2b580f1fa\",\n        \"message\": \"061934748c6758ecdeddf3a2df78574a470621496ce3f12e5e4555febccc1a46a772fcbadeba8b2eb5231b5b15deda5a38076c737e5d091a8ca8482f84ec4a20a51ddda391088f2c3926f8e1d8b77dd0abd606e9ac25a17a86a5c75adc215c5030355c4a1b307c1cc80a3bc4a7d4b4044fd35d173a2c7c081318f707828a3438dabe0836c2d6c14e1643f05ef8405531d5594411ae4dac6f3992279cae379d7c1762b122037301d3ffe8efd1beb4e027e055527d485d0871f2013e7b25cc26531c2ca6ddb98b31f0ac2c3bdf400a0bae942c9d4c4003f9952b67af67e85f572edc3345a84b6dc3cebbaadb7e3c876ab2da16ed0eacf4858033bf5a4f739f9e083a345c2bb5d8611dae90d25ac45d8b3d39b4de584cbeaccc6f5b6e61524349b50e818bb6b03c7e5b86795d49324ce6b1603791f20b3500a1b8ade82359263470d777b35dba38276096445842ba5d5e960fb2ab58730f970a15aa42d9737c33be700127a7ce7cade024d3abca59ca49f9a7edf44db62ccc07a595016868aa97a140178dc92530eff864c24954464ba886db7d74be7b540baaf807f1aebd014680ff4a51e16e1391e32069ee823f3d23db72244d657233578cb7d29a33e6ec31df1fdd43b51742cc30efc54be83149177e7bcde4450dcd142eb2cb745f8865dfd99dc84ab92750f1cfb0f3944e4e4eaa41261a1e8c58d9b230add792dce20d2612823c0ff9f82e04b61e48dbb83f1a6dd5cc7f92bcd0a37ab3053803d1188029aa1fed9ba04f4c961588c9ad2ba7ef1cfbc50fa69b799898eb0dfe9668260ca5680f91a10d2bef8f108ab28fcab693ecdb942070d2b9b8bbb22609c8395c23d7482c31b69b0f555b7c079d3defaa5fb302ed92619c058adf334e845eb1c6edd903c0de2aedd3d9830943f8bcc5954b65df37c901a17ef13fa75b0f2c8c1d2e38681874aebfe90b463f2cc7831958fdc0de0446991eb3c3612cc00188dfc1078fe458d2e5b80efa7bfce800c6b4ca0e570fa5858859633551da28f36f1ff418a9b7ad18aa89b4612f9d676d5fd98bce6f144cd7458ca9f2bc732a36a4d186ea290a009a870da3c1f60617d56ea7554062367121f3e5e569503aa573b172c6278dde5aa4ccda79d9d8faf41c6c9040c1d1d3cb78b41ffa8a0180395439f0d1b72e42471a9100973ab3bc7aec559d94d2d6402374ba5a584de168395a156324e1e4149abd35c72ae0f79863cb59ee6ba22145e36e0d85d3caf8a427d38c96ce489cd0aea20d7960608c074ce3cd0494b6d6d5ec8895f0f03ce78982ad8fd6784bcf16825286c51325662f34726ba66d3a91eeb598124d6755da090ef863fa31ccd5b08909a3279a35cfdce24d2ba16f42ad280b029a0e27137a671c862b0e6f73ff4a1de320c4daffb5cd4ac3522ef1c10e8a918005535f355ce6366b43a757938594366831dbf7ee72f311be4953edd1ea1c598960745d3dbb7f1e2d882cc063bc0791d18c6376a8497f2f91389a13aa96dab78feca081d761479848a5b4cc2e3d015f343b9000583e95e785a45a06842d7c6c0fe9ac4d70f085503d7ac954516953c497635ac8b7698bb784f73fe6e7f9d0ab9473e828168df4ec142cc1fe18fa067525915adf0764e44292a0316ef3c0a443683c92c4661409589eabd7b4dbd43f54317ae0e3d1c69c35a7868991fa0bc2f83430d89821b91a08ddc2d314a717f5bc6f3d89daf163af73e10c61630139e3feda723feb2edffe6c7f364fba22e6aab75e267065b5e7575946c56265743816b2cf12a106ae21921e3e92bfb7ff80e105468f8409d6698e8660b5b05f3f4bb19a0bd4be3569d24f51795752be74c429aeca5be737de8c01\",\n        \"signing_randomness\": \"12d9e81275b7aaa3ac53c5bb1b67de272495ba5b24285814595bd050cc6bdbb4\",\n        \"sha3_256_hash_of_signature\": \"ee77f89cc87c42db2de634f3b71db23d18922d409ba6f07d3b3d3f42ee964767\"\n    },\n    {\n        \"key_generation_seed\": \"cb0b305fb54e1cb23b63ec1f6f4689137e5048d095fb3eadc854c852ca86be93\",\n        \"sha3_256_hash_of_verification_key\": \"0afd54c118bf9ac9f641e5bf2747415f54b544cc1cbaf61068b181080bbdef2c\",\n        \"sha3_256_hash_of_signing_key\": \"f482dd551460346e5a4549ceeed540a525c79da2b3551618c89d8b1d105fcfd3\",\n        \"message\": \"ae2638d944822298959f47b2173de7d1e58aaa622296ad4a4cb67ec7ead8220ac2f171605ba2d08af3d6ff5849566eaf96209e9e00cc28eb9a517cf5061545aad24cce143a2ee1ab7cfa259ad9c01860b33b0036f2cb3a5086861212f408c5f055d226ccc77cc884452b2670d89548ec1c6e98fb311df03979cabf725e78956af185447287bca2517f554e9f25e19d93790318efc5d2602fabf262e5c7fc307e5a991e0122e332a803ac4a91b318b30d79394248521190d2be326037a89fe918d139f763dc8daa2c3bbce53f04809f0d97303f2f1b88b572b3086acaf38eef36b4c0791b4918204b0e1e923bce9e3bb1e7baa07135b176e266af174d5df26c44842ceac4ae4c1cff05557da3db8651261be78d766699b1891cb825fa9a418c45bb9f7f2d347f3f92f9529ca6db94e2ffcc69337fb3690f556c5a44cbbd9d79f60aff063de68b14bd2f4b7e8cdf94f6c2f40219d27f71e8ab3d4d6872a5d4b82eaf8e3943a6d425ed04fbc5c7596ae929ad680b245e3d6a7c5ccd7fdfa1d14ef0f72b9baaef05b7b84adc02913ddbc76d5fe80de30527ffad1825ccba34f8587c5b0291471d6957ad99c5fbcf3669b4ae5930c8af68305c2d3e84e714cb9049a9560a3c94aeb95a252f69b68f755dc0e0aab52dd054b670a275bd2bad7ff8ec0cde6224e9a0eb537e95dab992c382d6b03fa045da402ce7c5b55138fb400d9e86afe30923afee82c4528d1b38ce16d33beb47a96c18428d919ba98c9782806d6f4a40b52f7f0989337c724be24e9a5430cfea470d02ea36ca479faead94a74049898d1f1be53d5ab8cc0cdd5438a7c55827131de264aecd18e5f5f2f9fd60e8d2d6f55beb27eb77aeeac2a15432a5f1467483be6073243d0165a6c242fe1bd7b7aa701a0827f286ecb51e4c2626dcbe95466bc94a7e2a09ab334fee3959ca31974b6286e2a2051653341623cf3aca65637df657280b6025db0c0377ec09e6e32010f0f59711a30496695d23728319dfd0ab5f3aa69025276e68808130659d912a53693584188e310b1cacc41af4b19fad8da95d4b35e2569053f553a9dfcbb8fdee1455dfa0e4f5e94324c86a24288ae27f3576ae15fbc8bed49bfd8521d77a61fb523badf0e3cee53799016c6ee4e1e5defc19c7717a5c41ed8fa6bf0e5811baea76676de03767a607735c2a48bede511012eaf1f79e4d2c3566042ff2c63bb82fbb399ce20e1f268d3844bb473ad7366ef86d064c5ba080fc0c01bdd2ad343c5367d80d2a058cf40725268cd34123c219d9109780335611b008ee3f8848ea9d174d7b96bd2fd9a04fa2b550dcf0b301d64c0764299d317dcd0ca05718a1ac008d86fea330095e81567e83bde31a0d635098d7b86176ce6cc4025e8628c73b394d9a45b09b64bfd3a424162b16e1adaa1ab60006847c6d5ca5733237a330147cfe6b9170d7b88834bb79f1fddefcc0ebb1d4fef326e28c41c919607bf12ad112807bf8582933ddb096f1f3e2bcd6bcbd844da317cea2a7688a5fbba14d84c537814ec2b171ade28acf83ea481631b968c26f8d2bf2c5af7d61a93378e1e23fc756e2f0ee79199475ab4ba1fbc55d9adc2b05888b2910049bca98defefe96cdcb67ca9d4aa5bbfc6ca0ecbb78bf29035d158de2a1708d98beb85c70ad1c64b39b387516073e2fe85bd9efa25cb048c224e0ef76547dca67fd66485a97eb5e56c06c78ffa08ec1c9c6f2380912a2585cbcba2cd702cd2b51022f63ec920412989bd743a8a8beb07241e3e8eb38ca14cd400c83dbfa6fc8e04f58529007a1477e9613291af877692e4ca9ae118a1902ae7b4ae7dc2e992a6495cd19df32ce64131a8d8c41969a8bae1d870dd5f1360ba9278d5b76e746faf99d526199e87a4b1d3a5c48a33989f103cfb2\",\n        \"signing_randomness\": \"b2f1c85588d0220312b9c2050408076301ef1442e150d199a6634e34d5bd2c42\",\n        \"sha3_256_hash_of_signature\": \"5aaadff9669c7c96b1acb45e4d809f2b37d018ce2d9445458f075027658da3c3\"\n    },\n    {\n        \"key_generation_seed\": \"f92ffa3a36f43f9177763ad320fd651d9357c6d99f09549fe6af12943b58be90\",\n        \"sha3_256_hash_of_verification_key\": \"8a2e8826aab0ce83e08fff5b0ff5151b662aa157ba65ee53b95c9bec1d75aece\",\n        \"sha3_256_hash_of_signing_key\": \"0ef196133df2cd33dbb8d23820d835dac6daae9e5837215161977654e295999c\",\n        \"message\": \"9d84e1dd28c513987d5587a4427853762b7d7af668ff9ec2e90211d6cf5c0de6c7e54b298c1a6c67ea9a693cedc4fca1a6adc2c6dd0e5bbcee7266b9c6ac8fa8af5e50078a6151f938161f1feacde4d8079b5a9d563423258cf3ae9e47d8e75740314f2ffa63865a8b30743f773a53e1aedeac45caae01993b75c8116fb0b431631ac001aa8bd02e5b83de627af0ccb3a3d86f66a7e5fb658f9226df31095780a6e8262a247d70f4e7c971d108567ffbd7fed0e16b7ffddd93f5764c3e02a61998c32146564d46589538b2e071af86a26321a3523354f4f0c396b863fc8e9e2e3a173901d0d178a9d2828d0e0974b72cedfb17937d6054f185a81d4f853787e6c3681a74fe25faa6c256a9f9e9a9253f98b9ae4b8fa0068dc28bc7e8d5785cfad20f7ddd643dae6a2ddb02713c9cafc2eb2fd18efdeced05cc24913061bdc38e932db5e8181fc0d3de26a94e2138800b3c01e07e83b3b0be187edc75da576af1cc7b7122367effd6ebf05f4c2eeb0ab6e9f91201a4237910a87de9fef777981d48fba28ab8d64d76380911f2a6621335dfa96b331ae8b3242ea1f2a260260244196b0b9596c411218a17d0a58d3b5735b9ad7b6259655cf6e2d0fe5b37d0a0b02e67951f5d3fb277b6e1ec87528b08229ab0ebd895cba2d075a47cc8100e9dd17de7d951bf0a68d710aac21c8226d8ca95ac49fcbe9d493a8d3c7f93fa61685be57ff422fad036304f317a3dbcfee7a4610c8c1ddaa79e37c19d6414f47230e01ef1cd5c7c2ffc319a29ae6a9c95b06c603f2cfc1d1fc914b036cda6cf9a876946983b06123c2e5c7d09bc190647cdc0512f35db9e214c77d3d7d0234c3f2590941236a367700f9c04d3afb949dca2067571bf28e78ed35fc026bd801c4afee9bf31c97580953950d2e81ee6426e78d6f8134ed19707473f0874367c86c9be170be63405a9bf7c46a420724b6ccff9c21b015e21bb02c5a7aeabca873b46571530de56e47288c3424da398517abb6502a9a6a65d4983d97e479941c44cf0136d225991226f70837e2a7d1e9cb1226f40bf59d52c66549bf8e360096954f5875c466160a0c75a252e5fe6b8f1841fe210bf08520ce74d77b69692086ef50bb64732f19d1a49e5800f077700553290635d418168a6b9e3ae980112afb9d58a18b94f972845c309e86fec7e456191d8760a1c2106036e44c5c9a5f2cfbc67d741e8e937e99ed7820ab0787e39c385356ef0f05cd3e31c44115a8892224197b1d1f554d5098b72058fad49c665f716a266cb4db6204666e1dc07b6cfde0ea00345661e0f94a5025d2ec98483cf482058d2eddb018cec11d91eb46b63971ab29367db46137cd7690d5782e3a3ddc8cabd545fc1aad8a9a0a39542aec55cc3d58a5bb5e4a559db1fcd2932eff6e81c8b8e5ad5b4e0424a444bc55d96df63c8971a5890310fe19dff8acba72d96fd3f32d67d41a2f3d0b343489c7fdee7556012c2d88e2ba9d512b71e7d04f92e6be3a9386565271d755bed752c853e4539f95c3287a275004f76b9a93837c6efc6760be4a39b8aa92c7605ac369472fb29e11acad98fc91b1b9bb3505638d4d46a3ae3c10c8dc115c35725f06649bfb00ba1ef214b9f2fe98be2da99ab23e7b9f014f5c5d0248a9e0e088ac175c8048c6beb5108da59dc234e9edfbe603ba912bea22505c2a9eaae766ff55aac8392aea5c722df25bc6c9fcf9b0275df71206a4e5290fc5e71d79928e357400dcb04efd7cc9bd0b86e04bfed9bdbce5787e40fcd6041adda615b5ecf03c30ab9b2809e3514e9ac87226c55f259c5f157945b0073431715e1740dcb319edddd1b5f2763f0439cc0d6ed5867d9d98c227ca3008f30d1b2aea40dc73ff8289e4a21586eff519520f888e7e2f6d29a269c12607d13d398f437cd7f0a07c94ee1e1e3d8518d0c97be1e250d79c5ae1709ad8a638f55\",\n        \"signing_randomness\": \"048add9ddb845f46a4c1e3338dc78aac49fb30623f649fe4fabe6b9fe23f5b2c\",\n        \"sha3_256_hash_of_signature\": \"04cd4ee4ecc1e98b4cddd673ad8f03b45fecd1b508aa11922583438624edfef2\"\n    },\n    {\n        \"key_generation_seed\": \"5d3cce926a795abc5f6632cabff8bf66275dcc7e4a4ab3b8399d23e62a28bd16\",\n        \"sha3_256_hash_of_verification_key\": \"4842d8174cc2ad575292f8cf2fc1c124ba147e0f8a979acb6ea823a1f45b4f51\",\n        \"sha3_256_hash_of_signing_key\": \"073958458c2138626452a754747dae7b5d4124cf083cd6ea2c92592d17b35421\",\n        \"message\": \"af2860129c08a1a9c7a7bb3120b3e40afa1a4a09050c8483e7511fabf3285544d4ce3f41401dab8c17da547f6777a72519f6eeaac83016fa0e0fb0b33329dd02ab8eb1f291758074ebb5b7c4c102b75ba422821e6755b37b914d689d84808a89cf88f69a446f489a260ba03ca52a4aa14e8bcf4bfe5134dd2918a88d67329b9badc6ada4a3071fd21cfc45235fa0a1b82d91c5877f10ae087464251c8899732aa7fc8f6c0a5beaf4fa41e64ca97932925a06e218272500249577705804c6dd9f0f61dee6aae096be0ae5e67923137933fe4d61e9a88dfd5b3bd75aeeaf5018a5153985e2837ad1aad5eed91620d935eb9982dd2364b5413f490bf251fc783503fa146300e6adae0682e0597c3839c645dbe855919bb1cb80c3dc6e233909017bb31f5adaee05ce442eef594fc15fec3a2b4b81ecaad1340b0677f27009290ab3ab8788556389047f63c2ce9390658e151ca85baae45ed2fe12b6667967f6b772ee683ac2e7347c7b0efa332b3354b5043cb86200f8e4249f68030844d00a86faa7b79a4129ad676d1e9d58828a1af4c6bd68c29cc23002e0a0313500ba717b8756d4a18e41e381df8d7a999a153876db876ca4a508486a4f331cac9cb3e7c416c6329713cab76e1c8b63a8cad46f8eb1e65116f89a3b4eb8faa14a73097ca71aea3220be7fb7fe64919893930445d962c309e23332e4b3ed8ca768ef0ed46eaab199827ad628a1bc20ccd9f61bef67f7fcb017300ebc7493a7ccdaedbfca5f91e80b80decbfd9ead9bf22fe16b563512c7383d34801c504202d7a0e19821ec8495016362edac165904d2bbac484de1d4112c3a3e6ea56a78785b7caf2a44b5bc8becbc50bf4b521c1d086086feb009c06acb8fa0f53e7654fb02ad7898e35e5f3a7dcfc50124ba1f30178c707f4d36e4e7758c4cf82747753cc30a836311794a6a9017f53abd17a1c9647ab38ba56aac83c1812dee8a5a75c5cc958780a3e9c3c1f39729bd365948f7fcd8104cf09660060fbad2be9b8d8e5bdd22286eb0bfd4010681ae7928d0fc008e21c8f877d97b5b9c7a06c02530fbc6a9d6fcedfedf68a9682177757cdddffa6cb9086b8330e61851e2761d84da37635ea8441e3b23fd165ccea562b0a3616b30ee5fae00f76d6801b22f2215d80829e01db2c0743e3074cf26c96b0eddf97d79fb9c7ffe9b5cdb891f9e61fefe7e1cbd28fe25b7858921c8c99c45a84b50a8233037dacc20beeebb9b22089ddaf2ebf0698498da694f75ed2463d09ba2c757a986b8ca556cdf46cbcdf288c078041d497242f66411f47f35a21918855f105f24686076fa21bc1283f17245a7122a848b4bc10d996b2c5161fce0336b2ec747a4a07fa9851ac5423d1efc4b524e795b2e4bffd1c5cd21f5fec954824dcc53bc3883a7f571a9323dfdd2682c4a4c54e8862f347c9a8897779170b257ad26d90121dde722a3f214a44cf6c5a5ddb2452a2471ebe7fc8d0ef7f1edc7920cb42a71e4db49a0168d51843f47d17bade50dcb340e5f7b7e5b6a6c3afe0fb26b5ea172a4011eee838e5634e521483c6edbe9994b0658406ed8f4998c7b4e869845cd16cc4368da3bc1b025a6ffafbf540133c372d452dd831dcad39d61cced0a0ad193fa9886eac749001e3bead5a7962275fc62298a1bd054f4bd97acab2bbfdc355c73509d98b6de5b4cd774bdcaf1398532bb3db56524cc047abde6880c3b282fce0fb2ad7e4c5f7bc138b48d194e8c8036df4b9f3949e912afe5d2734662f27583193d0fba2b73c1a0d012db853bbbe4383f6c391f3220e1b5761c337a054fc9fdf09c01864b87324a90c776efbf5d34a68dee38ebaaccbb61b4c79a58cc848184f605d43cf9d40be90c1fbcf6735270132b59a636b16ed28111246270af32ea2cb7a42a084005aebb6161002e65b37217361bc269f5ed12f7d50613c82934a6d1d98d1308ac82827b7504f3fd351e0aca1c62843c9219023fd092692ba4b83be198ea\",\n        \"signing_randomness\": \"7d9a08d9689af9f8f89166e66d981740376a98d7d38c2ab0997050201319cd4d\",\n        \"sha3_256_hash_of_signature\": \"b799a379617a105496662997e6801c6c4c56b4fbb8d500e1c13a1ed430b1983d\"\n    },\n    {\n        \"key_generation_seed\": \"ba2386ba92aa89049c64ecfe60fddbe136815d3874527414b63ed32215f2e06f\",\n        \"sha3_256_hash_of_verification_key\": \"672987f7551fca5259850de0ab90e77f24bc894204ff5d85ae2a89d7cd87a085\",\n        \"sha3_256_hash_of_signing_key\": \"56c04d24ee6ae3ac225913e10fd067018619e07852fcd737f68ccb2003eab75c\",\n        \"message\": \"eca4505d43235f274d902464f4e763312bd11060f908621a063409eb42faa6bb5e20facd87b8ff41767c20f69b1f7e05d5f3a957f48dea57dcc91824fa48da6ddbde7e3327a0a8d46a47606eda01e67cea1f29bdc5fba446de60541dbed6f73d1fc5f49bd77d45285d3d8ca93f6df25aeef9324bedb40e800acb49794ab05e6d0aeb11a5994fba36dabb9559cd93cf522174061c116cf31874a18c46689fb8c075079dfaf73ea0ea7faadd47ad8ef68c06af9738b41be771020fedb79ca3d0165427b58e547105fcf82a12b67579d1d3aab29968817068732cdbc5a2e9e8d55d17468d03f38d564f5ac6efe1538e4a680e9e15e35ab54d07b6b58ec9ea7815ccf29f4f880cbf1946f39556bdc2bbc78a5134fa7a086ddc146ad9d503a4ca837e0823bf0728453f6b053788c69eff8d11acdf5f07282a75cbd17f2aed58e39d862ff056df17178625234ca7e03d22aaafc4c07e3fb08f4297b511b10579934d2761fbb600c9454ac05fff80cfb93de3b9e0ddd0ab1e494de477da2b5635e48d5bed5ce359e66a3ac845826be2b4bbfa6d825373bb2a4e93aa417648d1cea755aa4978784d6d9489f6738b4da03faedc659408d9395c934af774749a498b1406522351f86838865f53cb0157247484fd37ea59ba72ff3226aff1eee353abd34ddd63fcc89387b947027e04a6f4ecca1ee5f6bd1ca758aa4f796fe839338164b58d8e5d71e6d5cdeef6b279ef15a7bad873b12f7c5b3e2817c37bf00802d2534d425d52d0bd5935bf8658e5bd39b5268cc45d0f27cee5a57300f497e77af5268970782030e6928281379cb14bb56d2acd963d189c078c7a60e98a782f9483ece7b4871a061277186a01e878087381704bd72c63c32cbf2470a561c22a5dd3a1988b7ed0d274182e1b075af277920b362d612dc7ed82057ebfe51a3ca5a9a9a45de015c460be6a48cf67c820813048a1cea0fc3d7307f802b4fb7e523e7c8555fa56dcf66237f176d3d973c47f55af93fc4bc92b98b7de89829b1471dff53b649cb03b719db58daf824daa2de570df6314dcaf5b705557f9d783559277a754f3cd5b783d5a577ebe4a065d320284b01f71540f1986bcd443cf4fd480dbe06ef7710387cb5185deacb5c2a612bca275950b8988f247c4b773d8983d87f47d60f5bf80e6e7baedeb14b5ffbc46893a81c63f99f511d3e24fa8f7b1ba66a7db0c1d9acc6b5010ad725bdc2282d8a24018c975c8b12ed3326f48194d4ff93ebf051204cd224ea39f27d63fe07cfd0162358b412dbfd4715ad049ee5a31638d3111af2db7952f3a973646612712a607ea35826249d14cbde4380d8bc986067b1cc27503449fb128767986a406585c3d40daca75c27bd36117d2487bae82cf639ed1fa016add279d109b8cdae59eb31e1f006cb7af000a267e8582e55375cf6f06d1a47be9bfa21c8428045b9df96808ad74d054820a4d0873257eb318a3dc9b6d9585d973e26d435345b4d699a952c3092eeddd975fb59474212080d03ec489c695f19cba4d1cab1ae8d2e2c730b06e657d33722d24222ff7b613b6e8608e8a6003e11c80239ff431b5d8fa52b84b867a581798833590524c7b84eaf6cda9ca94c5ab8ef55a1262eec5c37467807c89ff7d075606a3902e7247e9c6646839c18493584d33db65d6dfc0f23e68c9d13fd57faf4836c28926693dc3ee372de27a9d3e4ab4229425ef48cc410f1792a51c9f6fa5316a1d9a7c99979884ef350b4882f6045921ca88d4e44b435c69c1aac11660971c2a3f6480c79e6e146c0b5cd2371bf5e7486ad7d0be88d62a2ae8f0d73c17cbac86ff6bda55a880b182a5237498e9cb343a9cd82d7784b72473d222e688d13cb81b2908bba854b9624a11dbe8cee9c3825c1bfba476b4d23d0b0c325f1c498a65a3589ea8e8df8dd9030b279ede30443cf80367ceea4a122dc8329e5ad42491cf57ef47ae2b15f9c54120966b95acd727a4a2b686b00626bc808f43d82d20deebca79b074a7bff38d2531ab2f726ac7087236eb3fb4bec8a2d4207dc84c\",\n        \"signing_randomness\": \"d4eb2f8d476734c94dc74d41d4bef21b3b2d9830db37d326b43de0843e1bd51e\",\n        \"sha3_256_hash_of_signature\": \"27292db35606a1dfc3000c6891ae4b3868a1afe139d92d22a8d1cc8caac6c82a\"\n    },\n    {\n        \"key_generation_seed\": \"b4e1af25e8dc6934ba391a89984a358702bdd36838babebd982638703f20eef8\",\n        \"sha3_256_hash_of_verification_key\": \"f21e3d18ee0b868777922ef63cb8d4a2d233d0c43f49f5d18cdf4b685bab76d2\",\n        \"sha3_256_hash_of_signing_key\": \"88a4e539efcc2c46fc4ea44d341a7b889b0fe17265b0555d701b239f64832ec8\",\n        \"message\": \"96e2865a0e602ea4e3c5657a7f761a6f771007989ff885261f5638c14c1bf80aade34cb956d2b5fa1ce38fde831423201d3692e8e6f40e68a68c085dbe3c4cd8e35394f74072f44de98a74e42c9176a86ac06bed8c0ca937db4c3bf92371106b7a68ea8fde1d1e082ccf522a397401ad0f8da6c82bf76eab8afe101c7ff023a0fcf015b40ada0073363e7cb25260c18662d651222a4ccf1b290ee6f7b111b9a963211d67d7674b499449f760352feeb9fb7265a5f2f7f20c0174802c7f48226d92620d3e009e85b104230c21ba2fb0012dac4bdf9fd184e09cb3e593eb1f3eeb418a8bf3173e6cb91fd8080c7e80dbe6730833a4a9f22c52716731c7cea4f70cde0f81d2d9aafb6b60820598a7f6aa1b963b7686528e6e7885ae085c3d26c4acbf9fc15080d972ca841175b343e59fed79ae3cb4dbb4f0d7d463bd3e0c4b2090139145b8d7db5db10abfa51dc909c5cf7809030d72a5090cdc765eecade2b365f719127548ca601ae0d21e402e18050acaed30ee13cddadacc9373a87a218787b585319a7e66fbb13851f7ad0d2bbc1efe6efe4f7ed248d844f58b6a5a21fa9295e0044982af6286de296550f72b5e416373f1dac006687ded1e7d40961e5177c207579f25e77be808a6ba33dce8a2a6f88e97ae98ecfbee5296d4a170e3574d9ba592a384cb0545bcfc32b3831c0b736ab77440722299f192dcad519523995f71f2983ba87aad2261e6e01c19dccae00f8d6914501d1ac3d4aff0c12fa125ecdca34dcdd8407f0045f8e8be0763e19eb007ed4dae36e30afb07f8daa7431b72f4a0a8017b3fde27123ac3e8ee575f8be310f68f81b696db1fe63ccb8d32b899b209b2205956d209bd6e48166bbb4372a607e83c47698db5ac8f9b40d05f38efc4a4a1309d999d5ce1e1a5828d56eda4666995897c8e6362d0b5054f04bccf79d03852d1003c80ccd55e9f4578d8bb2c8e220a4d7a4e2190024c85c718654ccf174ac96c1bc50ea49f961ee7697c88e6bb718679f1d1f1118376b31a4b8c0471f6d7aefc5ab426515d1b2cf0eae66246b3c4132a63c63d7e33eb9df8d8807215d58f46ee832ad3ec893d74e00c73510b9625f62d4eb5b500eecdbc7d088d3d318077a4a0f7d64adb13220232c08da75d23ca7b20cb109c972b7c159863991c32508339558b9383ddfe7e7dda740e5bed0ebd14ed300c634db01f359f81a7133669183eb187c17a2c8ab855bfce73e34a1f59adb0ec39ec0c7573ad3620a819333ee79d5e09cb8449f91923ef4c5e21549eb7f56075c014e1c3ad2805e682f07ba8aa265745cb600a460069678745fb9638f6709d62d2dad8defdd5a4d0c2ae7401292bd1da5f40d4cf5d59a403932ffb677237ad74691cae29fa31b955172efc5e83c225f2dc0430ab0c909a97bfb468ae182ecf91e9026de819f3440fbe69b9de26f812ff3f3ce8037f124ab368b1153c1cc127d140f754c525d4799e1a19d93b90460e6518f0b6936dc6310b7e9e6534b595e00225978214ee5aeb12a6f45b5c73fe86771818843ff7a6b88379c37165d9dad48affd6fbabd11b1fb90aa5a78918b317c5f9b2ced6b9647f130da9f91e1b1ceb84f6e1618248f06d654e159f71033072f1517064bd96a5c138402771abe7f39f53a798c2423b748eb7f310485d6376722e204fa33b9740e7fa68364289a677c5c78a19a7707d2549bf9329334478c64351fea1634388acd4be57e4abe9374a0e999b770cd81b1bf4a8ff300c297b116ceda1a4a1c1bd5a2275581a0589a46142139fc596a1406d16293076527cdf9aea2d0919f9678423b7d95b153dd1d9d62b72a12f6491a36604d19e7bb83c476d232769425557d3480623d40b7ac27c0f67d4ed5ca4d487be915a68352dcb03a3929a4bb795248ebe2fbe0612833d9305a0a31d195718bac193fc59b880042a7f61358104a919c7e7c210f02a856b8b1057dd8527fd4ae1ea81f9e1bf7c614ed8a312c95154873f86632cbd60c65176f13cac695bb4c23675331058397d6e96e4f9deeb859e3937553d94bede3c2b9a5ebf00964a49ab294bccee09e5a97381d2375941aa775a47f726e9\",\n        \"signing_randomness\": \"aadb9c7f9de8a127c541254c2b2b0108175d9b51c50b0547a980f235906bd895\",\n        \"sha3_256_hash_of_signature\": \"466d0eff5df60fe5668e2ec8252b7992747a43b41c19fa624d84047f7aa7468e\"\n    },\n    {\n        \"key_generation_seed\": \"a62875a3a6d305e120dc7975962552126cd844554857c2943872a4e524a6eeb5\",\n        \"sha3_256_hash_of_verification_key\": \"466f7b8bb0fac5f93d2a5e4a8464c047118920dd5a868d5fecd1a9263e031017\",\n        \"sha3_256_hash_of_signing_key\": \"cacf81f17d14deae5566f1a419e7d3ecb1acf18e85757a79ab2022d0dfe802ad\",\n        \"message\": \"047e2d484d798b3829ca6037d6c1588a2349de09c5ddfbec987652cfda01454ed791dbffa3d9da13a35230adbe1b39b042e3c70589658a03f75447c1cf3970dc10fe5a4a9e980f2a33b642b42e5e66e9ac4e7a56888fcd72913a79489b5b163bd37b8c3c8d242ffeb37d0c1ece21034be9e3685798c2ebc6b809defc02c6f0c2a3ad70ec0bad12d57add63ec3584ca98e680267fa514b34de4147c9d901b59914d49ce9e0f885855ed0ce7973f3307b675408f90b51c6a4d38a414d970eec989cc7900d7723e19acc4ef743f6d39eb1b563b8c13d42c0056b6c49732854925b606467f7bc662d17b924fc65e9c3cdc2ae73ff73040011a152b05ed7f96b2ff4cc39a22484af72812ef02b08ef4dcb64c8936e74549afdd5d876027fe2b431e61e52e8793888473f4c1e5c1bed2c4aef8e5e300a735b302474fc6f54869984f1a62dae29c7c9a0ccdecaa55fe137ba14b5c5c121e0c5eb33b035e01f3415529e0826b27498d7a71b0c086bacd140c02a5948aa54799d0dd0ffd384c7e68578247fa28d205b18adac94f7d3c8acb7daf71aee347b577d97ee8e7e865cf4fc1c16640ad1e9d0192aa13ae81a71118408e145b6121abb75b4bffd1d403057d4ad5cc730452475a7f067690bb81e81e17ba8dbc31059969b20d387ba59ca8ce499e59a65c8583f29cd539f4f75ddcc68c7bbbc43c849802d8347143e2fe78c1ab6d7ab6ba9917301c88386b294aac995c24ad680a8c3bdd7aebef21e84f5a1909a2d83a8dfe46a75f4b2b47614cd39bf3ca3460de9bb5c37eb7349a17ab32214d031ce927806fa394470f407673b0cdc3d9a7e3749f09ca895d464a4269682ce6ddcb8fa0ec2f05372c73dc3d06fa6f58090efbbc6d619a7a565d4efe441ad7e018a7f5e1384b88eb4506fc54e0ab0a8b9ee3641760ffc08f6bda78c12396473d1243baaf6ae10316213115441c0b65c7e475b4e1578d066a47d9c6e92fa32d0f2c365fd15f5a2e88a81691f039dc642ecedb6652d08acbe64625b46083ce758fa96c142eb34477e065aea04a45ff4fcc3e3d146acd7041f5f7e4c6b26c8205be7b66db46da55556ce02b48af55a4710bb28b8ce102cb15c1a4af59d9a17a2dda6e2d1e96987f6aa9f4216d8d5e5cbff7e2cb775e83a776063a4aaf937bf0ec84149ec1a7ee21f735d21625e85831b80dc11ebf04f30b13e3a7e4d4784c5f8c61c679e0b6863958f42ed31deaffb4c272a3731c1407445ca7673d225eb6509469dc6c1f0af43eb00f18b3a210aa57d51169f2a9fc251bb338ed4e9ddb19282dce871211d26482e13a8d533dee00d36ff5cea98dea72d9f0b32dc398a3d5537a3373058faaa3926c127a1ec739faf3d57cc1a05d578074a3a72c3f2b1692c2ba1f1ffed943e7bfcbf1e664c4f52f7bf8d86174ca8910c290c06804a7748db21008ac43e653d7fd7e0c982eda9356f68ddec26473956dff281f7b767010c57f4ad09a05063a6b3ce078dd32f3de1f40526c06a2d60e36e2c70502d5bebfd2f3bfcacf8720cde1657b9892406baa3df01e59313eb655b6a545331eba01bcdb9c99e4ad7fef7438ae8715fbe589a2f99cb9ca34b9610b3ce5be38fcf979240698174348417420aab069b8ad5f646f82958a136dc9f2f81e601056bb4ab5e10f4ebc4a00e18924c51d0fd104078471c6805c49d92c78c832ec3f10d8966e19add3d3b4516e12daf4f63fe6bbd228062db743d1f867800854f7bb7ffc2caa0d01a0bb683e368673a8e664bbaa17a8c0c04bcff05246f9c4f3020510a992ef26fd0933bbfde9d042862dffd33a6465f590a2287d8154777a89724fc3df9f2f1b1ed8765e7c7b761ca4781006822065703ade07a6e874e70928e1aba29ee490690d24f6e73d96b85fb53abfd1c1fde439279e08fa232043b2344b267cfe5901c60e7ca14b0c85edcfa2ab90f341821d2b4e25fe23129f2432db932f23b5957706a433b308fb918d1c8d81eeb399babe95e7229ad41f30460cf28671a4508b0bd1c61f48cdc23587bb9bdc6f565e76c86547cb71396661bec8c7fc2223751f765c91c45c674c36b49aedef3df2537f888904b507edcd89155d40cb81dda74376bc9cdcaff8a368f1086c99ede25526bc53f95f4017\",\n        \"signing_randomness\": \"84603efb642ef6f9acf327a4ce66eaecfe39dbfc124e3f73496c21f57996ebb7\",\n        \"sha3_256_hash_of_signature\": \"ccf04e8b41ab4183cb05c70629b5186034ca4b6a0a95761900b375e9e6dd3c74\"\n    },\n    {\n        \"key_generation_seed\": \"76ae71ded1f9e73af77a2feae4eef80f87414dfb7580fb4ae0325bff20d74a5d\",\n        \"sha3_256_hash_of_verification_key\": \"13f36b14d0e2b5224e23888fdbcd9e6c51f2130bb4523c9b8dcef555c0c3b387\",\n        \"sha3_256_hash_of_signing_key\": \"ccb1cb493bb9578340b90bf748939d91b67e7335d27a2c259f1da3186e8c9ba2\",\n        \"message\": \"6a58aa820275a2f43d0f05dd0ee484af42b665ffb8f21db322abd256a5c753bc8ff6a2c71467922e09726655f1a7218e736752065c871221c0b9dee6a9d56b78a1c3b7357774396f6980226dca1f91ba828e06bbf324d5cce8d584d9d298261c7149899fc9f74d501e920f22aa34706a79213e35914dbf57b9642a42ef0d8226e31adf89d18c5f3163adecc79172c95650d764e3729edaa08c207d930c26df8ee1291c1cf889283b70af00c0489175f799273c837b281a5d1284e4447ed72598efae23b523274644da19bc0359ba59e5be9e5828ff587c335e136c1d789257864d2648ef9c03d1c4b9809dd07ceabd865254d3d8d597587d71e374fc2dde89c22c2330e8904f6b53f637348434a21aceab9892d5df8ff84cc58229782bed739bfb13448896f7b1064b499087f7547cfc0a49272c2a670a9431b1b5a07284b6749ef834510a3ec0c61a43d5d0eb48c8f487947c4fccefcc49deccb6111d617407c76a1b4a849c9a190310711b102f142f9e9cbb29f46447265e2c8ddb9174b780eb4a51003fb68483a265f2475d5bf6ece18af0cf31bf24cdd56583e777c4340086917b78068dfd380466f43d020e285ceed97a467db96bfaec22d80b4a6ec0dbb98cfc44436a41cadc85a90b214f00990d7b7010bbe4ac94809a0450c9abee5aa4037a44b0b4debd264120e762086b8d6f17afd37086c93a8a368be97e0f7546af16d731c21878063e38df3dcf3ade6dd2daa43c198f49b5d9ff5362333f29ec2f13cbb90dbe4e703edae9a4f7334a1c5ac60d5972c4af2ba61b63c93bf719854e615d16ba4f704c55260a8838679815fa59be08c4243cacc1a584cc1b4e777fcdc6e5a167c4cc9093749ace4836ae058be89cca3221a3f63f07089006e4c44e40653bf262945a640d8c2a24e7cc3529e4be76286c86ca2089cb8d4684508d1fab81eae7d8c731b65a22700bf9009a3190f5ed837ec22f9112383422027aed838f16a7740cf79ec101865d320e380d4aba745acc8eed376dc5b3aabe58debc35f8e983c92906aa2e3d8fbbe237325302e2a23cb1312ea7f532d64e79b9815996d28e0183eb728a37e19cb219987576c142f4b2f66ac6c7c77028ed59a8df27f78acd3910ddfceb88888b4a604e5d07ae1b53ea6df6ec2163ddc4bab422d2438ffa543b22441e50e4087fde4bee6d79d90a2f72548ddc41c5ae07dcc87666ea3c4b89a0b14afe03b585e7ca507e5f29997f2368b0c68c6ab6e344c082bd06ae922cd8089634918d9132df9cbd665a4149c59bf76b0e94f66481766fd79054aa80c02e0ae04a6e2be090582171b2a9af455cd9fc302ca9d1ec837ee26e0e4d0ac8f0692cb9abac979b58ca92e5194ebe46b520125bd0b3ed1ac2bd817d3510e33cfd17058f865dbc64e9b99352b6caf10f0a5a47449bf927a8eba06d34c80d77a0b00b88b25a4c8747aadbb11ba15adf9c959b05c4371cd8439fe5028e004a2e1d2f21190466fc7fd56e9ba0599a0eedd98246aeb4b85994787b7604cb52f5515b42c2fbd4b5e9e372a36cc4e66483dd884dfe42aaa5ee7fab200d8ec6e3556dde0f9e9c7346f9967f8f3cebe1e4d1cd8e6046e5e94bbc74ad3d51db0dc704f4a4025383f0391b9da37bca8ec59e807593a4f040fbb186607280967e5048cab92215dc783d9045f7a0922008628c771778661e97e9f88ea84bdaa8ba61126f71d193a2a564e3acde7adf2c0b3d5b022eb6e0c629782b0025c9079d4545d88aa2ba27d10c5dcbcfb7cf648939155066518878cc54a4f611aac21bd3a1ec628d3352f049915fca55234b9146ece5f78fbe7cffb35695363202edb9ec3501a93b4b6fc81b3dfdb5245feec8aa54195262c2467e15506b7d42a7ff61d75998722d0208bbfea05ce7d2e66900a9b34f44c2a21257c220c03f9d6d7f0312a36f5c12da20fb5290d5cfbc1dec7d05c44820885c479063ca88783c5aa128829417ec4dd41cf83a1d991df2efdfefe375e93f0371695e353ef737f4a75106211a5f70c82b4f360abcd078c9e829c82a6b7a36d22b8d1f6e3101ba009c759fc83999d52e29b387a8dc1658a43ec4c4d9330a4ed2138e035ebeae6343a76a82849e37141fce34e9a41eb5ef88bbb9257017ad8696c3847fd77ae103a082ed1a05de9420984c147aff927e1950244912079bdbe5cc07\",\n        \"signing_randomness\": \"9676de1c72b3c9aad4e68e465639a7e20862a243daff96802342dd24ceb53d23\",\n        \"sha3_256_hash_of_signature\": \"2edd316e8328163365db2e1d4522d15bea62c8e975965b08761564c6f2629c45\"\n    },\n    {\n        \"key_generation_seed\": \"a8f65be046001a6814f537915be3f03f3670e1169e4aaa6d7e726174acaec77c\",\n        \"sha3_256_hash_of_verification_key\": \"833936ca4de13ea4f1cac0c4935e4b71463ec8999b1fb06425c610df1df9c045\",\n        \"sha3_256_hash_of_signing_key\": \"159241fbdaf613ee19737719e12ca36604549ef6b3dcc4401ba0116629516c53\",\n        \"message\": \"139ba17ed7b476dbb1cdfe3c42b3a57af5bbcb3be19ed04d6c3072fdfe917ecb9272d59ee89ef83522531d83aff8b9934a8423315c350d1481a4b02980dc29e1cb83b76623869649ac40ef297b153b679c327bb251c6e6bc169c48aba2a439f9ea24ef94656a415c3e86d7bcb43cb3717d54d773f1937dc8b0e02d4e6abbb1c83fe73f1b221c9a359e454c19de5e71ea4cb8c560eabf1da133ff20d81785d2ecd935b99f24840761446c324df81484c5c05045c0949df8d0f10f942e1b5b79074b358c25b6ec2b0b42df65d998b666cf1bc568e7d737f22ff541807be95ed85a9980e940e24d2c506bb0f9bee32effd85a2017de694f61bcc2b292595c97ff4c2145e48af8f0f3d71763b4db433ed7bdb8dbf8643475fb2b9155f0cc6a0048c5546900792bc01eba4b06c83a0c447ea0cf05410de55acb8e5521829c89bfbc084cd86e7ca3d701283b70f78e1ce9c3888ad2689e0ef5593d656285066f319e155f86c0a71256484f42a0c40e7cf13af0cf77c6d1cc7231a48538e9060a7863b774c9cc65e321e45aacc002c0170eddd18cc1424159d46bf99d08a28d2dea8917d28d91a1d6c409d945a5eea19413a1adca40de9458fa6bdf1e5308ef9e67e1e90e9d92bf19b5351fc49dff0a31e035038aaec651c0f20f276e4ef0ee35c14bb625eb34205516d95abeaa06a7a3bb3af2f12236406689bfab11e65fc63ebc5b944818dd1d53c0e7b88ce7aebae581d995ae7d8423778dfe20d6cea7ac0b1b4efe2b9d571de77bd8f71e89d9f6a2dc89103b73625887ab376bd12ce89a65e6280515a44a80d6c32799669260167da0a214ad0fb803930ab1952d93360b54433ce8220b29339dcf2702581e88952a5a1549dba11f4ccdb6fefd6d24522f3207796c8d5ba9d1582f888f2500964f2b975aed5d5af83409ff9720edcf5ce3fe9b6b586b08de21956e7970d8dc28f6208a80f5378ecbc506333a1d98c58eb0e2eb0cdece0f5d16a069ffd742d1e589f546c4f2ea3da0a56f984cfd93f5f2912fb1d068f2bd7c1b5e979abcc62e3a0164445398f5c0208e82b99aed1200d36289b1fdbbf03e43995341aed3ad712cc7c7530c751b40b765073ee4e4cdd411ae543ad5e2793f294320e9791ab35ae1697f23ebfa0280b8041859909b0089c101d7cc429408fabd2e073fca7f2c2886031e9f6a32f2b596a799967ba8a47e87dcc8854d45ddb6de39160600eb4235f4e3424d75ddc8ccf041aa05b25b5a3811540ea5b77cd8d7d611a63bef5c26d57475b28e961645aee0b9c8d47954faf634017787a21a671493e7c5f1a4c553e0a68ddd726db1ded4321dc735332fefdf2a84c22097ab3552f878e304598ec40eb349e1c1ae416f94112a2cf8e8702a4c3bde2f58245166550fc238e153d10f90652518b1d84ccd3ed836f150f1ff103976e743137da5a97a61276dfb0c11d071b240069582265a9cae4987b6c6b017dcd1594024d7b1336ff141e59936ec4ce5410e1b73ba6fb42d35f8999225cb1a135260967f4f6ef2172d53fa6ab6d1a2e3174b46c24bc103baf69c2128f093aeceebe8753eb352e2804ee64ae5140df1acdacd8f225b3c9a61264245b8e5cf759cddd75e25e2d790ffae8421515e0cd6f279d0080a3f80bb2e0729c0d2626b6ace31ce20bcda490c7660d04d1d82e6403000578926c52d8f9a4be7103d64e0f03e8f148bb2236781ec30f6d8bc827c107fcc40f26ddad485e6135bdc3bb331be139a07891717b692e23312d0e5b1c41f30c3b4b4700effb481a835ab54340269fff365ff87f58245621acfd83b7fcc6ff108132d8966f9836544354f7e216fbbb851f390dce8a72362f0454730b90d35ab3859763aee35668310fd501c7501f4599563006aaee9b636b676f3dbb6787317885b0f4a64171bf19cbf2ea7a625e1563032c196e1292d82c7484817dbf78d8e9e478fdc4c92cbef48d4cb4f0e6dcdca6682dc0a56c3e45ea0350d9ff88073748305fd7df3a3be8c055cb1c55167560d5c99345ba80c21ce791c4a511e384a02833b78e8aa02b1b877a9b8d806978519d716c611df54ae8ea2691540e87c6e79eb006569e02745021bdc7852e1fa4177e2c3ec89257618b38719cb07b0ba68f600236167f019694959c2ab6fb39d5890cb176f6acc3b9656e495c07027e3d4de781f48c1f1a8aa1b41449689e191e495ff3f263ddaaa8de0df6f1a4aa3ef1f5edfe437bb74ba\",\n        \"signing_randomness\": \"3400c994f2f97d69e54a48514146f45fc88597ba63fd836a6fd9a6f56da3f9de\",\n        \"sha3_256_hash_of_signature\": \"88ebf673b4613b1fc56746ccd2a1857e4b819e304e2816c007e1d3eec714af1c\"\n    },\n    {\n        \"key_generation_seed\": \"802e08c14f6e3446bbf7f4666c8ddf7755dc718c3e02b7865ff33e9d8290abec\",\n        \"sha3_256_hash_of_verification_key\": \"253159ea4bcd9c5ff97abdb1c9f6aa369e03bf207d3871a1b612b7ae31f41f8a\",\n        \"sha3_256_hash_of_signing_key\": \"da0fdf3ab2755e8ad831bfa05235180daf8f5898143d3bc154413574a4f823ce\",\n        \"message\": \"edd4da833528b0511534f77857ffd16eafb1a2ac87e6844612dbb104b9f32025b7f54e993d65ce85a061b6ac6d70a15bb42bbbbb6e2e21aea55bb8a556120eb15ef35fd9774fc7b5c2894b747d3e4965b77dd8d5b26f38d413662783dcd332765b4de534d08d6514ca9dc6ed7f2bdb4b5c437178710b04491708836cf2cca08f28582107d27ac305ede6030b1f8aadc4a1d29ad16cb4d739d8f813d47da715cad6b5cde24ea95dff4415b527dd900442d9ed1ca712c58b206d6e79f8aefb882013358bc578638225be79b58fb677277f072aebcf8ccd6ab61a9d98a3b260e60aa625d78058fae6028e4c5562a0f3473c3ad530bc4471228f27502a8f8fe2d1f72022103c3a2dea363e68248ed8693b3b066b495561cf4468e8ebf32b454e54df1766468ad3831d56ef7eb9c231e999c4cc3a6b0ebbf2c4f22820e256f67497427f53ad22d42c9293dc8682d0be3517b63c6e871910adbb3406b6b3b1cad980aae47bf9686e80b6e5df2daccceaf9506b4667271779d00b4c1065951e21f2acf6cf3cccb8a633d1114ce9d531d94420e4ae496086638f031c0baab5722a41a66788d3885efc7fe1c3db54bc69e35b7489a0237a37afe5194b5f424f792cc1d696098bcf327d87ebc50429a95ed82105c4328d0095a9775589fdb6c262fa51ffee4d99c6d1a68fa661d1b6a0a2e0693d73b39218a6895bd83fc1d54831b7df146fe7bd2a91b979018787b9904285a35922e22a7f1761bea541eaf21d74e3a2f3c6f2247b042379ca4c553fd9256dd0c63e4c9dea60912d02fbe4ce7762069a86cde02a4e1e311b2afde435da0816aca659bd8c0650c1f118c0ea3622d72a5e96132f8b0ff8458c757648bd46e58195faa0fc4ff8fa44238e35a25c9807b6229000ee560d8e085f27375c2f659baa5fde302b9529bf4699505c28de33ab5dc2b8c02967947cd24c6a599acb5c2d1e7d6bf3bccea0253fbe11d8043fed532aafc9ee1151243bb80b92be239bc4fd1d1caff502951205f2e6393b704e67141e1218963f664fe0759c15e6c0a1b40602a73990f040502867a9eddbd4db0e554aea4bb9597949d5fb32c2e3af92cf7816bedad5ede1b769c823cabdefca1d1b85213c79eb03e065146b58e3bfbe80b4d4683b65ad1e0611372729b99a0b93934d52dde40c19fed5a2b3dc3030e0b5f26b66474a5cca6d741ab294bbba6be516105c08bdbabc97bdec2141d035bf6c3a71553d6f6350229ca2626b8b0b56a24f2d6eece436ecb77a70d747b6a6f830578b4792de533879b174353424e7d0eadf6bd5a74b36a4e6ea7e39a4215559557bce7a00faaf0d1f81016f913a10f3c9f406c7cb53282ca8fd5fe4f5fabb96f891583e0507912ba02709764694296a5248c340a1b9ec3db0f926f438ca96fecd40c4ad8daed9b8a29691601835fe14283762236ef2135443307e5f0082d1c2180ae96ed0dd99a6e9172088e8b94aa2952ba5e128b202b2cbc1966e69b6e6384820d9ab624bc71788ea84b4adfcfaa2efa1ddaa8855d1db3f58eef2d54fe11a8a5d78ed46b58460e6f2fba6cb70640700a4520aa1a2a9b336aefb17cde8ac78d67f194662642a0107ce38b74d731380a72ad4a0a068f09e0878e521f15ce8134780c3fd0cab2dc2473448654f88bf1fe2020901b90c0ed670866b1bc337881292fba885fe2bfef6fe74765ca12372c8cbd698ac41a4c337374587db15affb511d8c224f1743498d7173897ff5b8d070b89592bebe053d5c10dce67ca8542781ae749f3a42fad7e4a2004a565f81d5faecf11115c270155fb8af6aeda138b9c71458d6d2ff63441130ee9107c39260469521e020d2b42cb5a51098027f23890dae8b28bf722af9aba6224e02feb47e40112ccb164e8cf174bc9ac4c11af9b482df9c9f7f5f1b826428c21be395eb1f07de511e8258c84f5f035f4787ace18c190808efe99fcb455a54d366dde2e230b575ed5a4a75d57c9a38dde3d91d0d1a1c4de7f277caf23e0c5dd8e3b693dbc66b6bf1679b0af74a2b9065b64cf0978115cc456af685b22d85135727a8aad96338611dc109b36c85a92e4a0180aadd1d25c5b3d4c681a44bacb953e50f994fcf5281366cdec0cc50976074d91840b5079180cf643184adcf9e4ccb44328e7bb9eb2bd06dbb7a757c35ec3dcf795a5e05ed250159ec453a1692426f624cc0737f691e475804f155e44293151e42d3c0f115ecee53c6eeef69788f7e8e5c422bb102237499f2638244c0c080b3639a49ffc1730ebb0cfd8a46\",\n        \"signing_randomness\": \"64d6c65c750512a619a02bf3e98cba9073ee368195f22185a236fb9e3f713131\",\n        \"sha3_256_hash_of_signature\": \"700ee7c67b27b2d00de521b582b8b9027dd08dc516efe02561333d703d476d07\"\n    },\n    {\n        \"key_generation_seed\": \"23d7a85a824df3d904a511281a973c979f67f5bfaf3ab0546e85d0597f91120f\",\n        \"sha3_256_hash_of_verification_key\": \"8f74e57e50cccf8fac253b0d36e5db465181210753f29760dd6d056d4b05fb4d\",\n        \"sha3_256_hash_of_signing_key\": \"5b5bbceb129dabf192ab358b37bd607d5add9a87edba24db36d5e6289b1086a7\",\n        \"message\": \"d868ec985f946f3c31b6cfe4811ba530eacd0ed061ec383c203b2481ac697b8b88bc0f72b635027e443ab1f54478440de16e596d30a0f1252e0af54c0f382bbf5655bea8c6b9a2f6382d003cc7e4d4f223f8e35ec87cc543ead52e0e1ed956cfb32e8075715c07ca4817c4b8dace68c8b0da459271746be41d6102b3fa5e49aee8d443e78ad3246d0b9bccf6ab7cb7cf72b8a847ca16b435f0618594400037179441f3bf524231f747d920e86506e84c61d4d038d42e82d52d97abff896c1db1c646807156324f7b68db620ee435c7b8c9ac8b193b7c892565c3631e297495bd3b59293f9a9cea5e29e23a242b81dd05c8dc9dd669424573298c85870b109c7b593bf864b56895d81386466ca5cb6071005781fb214f1eae9672d0d16351a627a3faac49be4e13d552340328323cdcb4703bbe07c2a39d75d7737d5c1bd04355b8694432dfb7cb4f1901550c7d6f41080c0f6a2cc49d63a69243d137a78260c06e7a53aaf4f4b086e0220ebc5361a6a78c9b2ec09c2ea4ec45a41065b4b2daa866d9babd71c8e6cb378595f068edb258b2ad1f420b304e5924ebe273ad6d00684f75b6a31dc5290a37d0f9a848b1fc4a67dd9a4fb1f9b4c6cd45e87fab4a09129c9ab95c44703b75b54c9ef9e825928aca56527d79b338c5ac639d0265010f3c085d2b09aef0e4f55d080fb5ff79f13e8e4e8db020f4c095140d46a93f2e4811bfbc1393ec24f6b7ef31f13623df0360b1e335fc42098ca1efcd0306c5fecce942f6e299ac9ed81054fe452d3f63991da42d5680eef749c02fcba78db5f4f7c734c6b4d99af79711a0bab723c24364ac85700242878cca93465f286d5f7adad7f68f1d38cd6c6e0575a36f1e5521e420d348d947e745c2355fb5fb0f12dc6fb5e9435cf8e552c174a617151af8d5e7d469ad5cd741e16eb88ea6d7c5806b08571697d22a525c2e30dff608c921b955d2a990d9466829385de0a81875be564942ae740d15ac0af46a876426ebbe481738be19be06f174d975ae8dfb52a94af9a77e56267c0bb62169165ace155041406caf507146a02fb760629cc4c0e7d29108cb7c779455a3ef359bb6198ac75e16148998c16c9410dff2dae5f3c79da61d371992d4a151ba91dae8814c81eea4f78d23871326bafaa349c8eb57231b590f1ac13f599df5b39df36455f05e53cdc4d025410e8f8f8bb74854fefe0c4f790f58434309d36c1e7f3935d4f896368c91af95ec2df292ae3166b83976abd95089b05b461d4e9171cbb4747f3cd9bab04e5a3b98095754021229b4b820ebde63e463f2ee479fbfd83cacc61878773b129cd4b3e9afbaedb27c7fedec2f2d405b99933fe2c203d9949c567a7752aef8a7788d2375900e70315823daccd4f2a674196835c35ef813826b310346abb16b0145cd70fd0a04611ed5ad0b8ddfca6eba6b93445038c3dd23d3d15e8899f9c889af417e5662d538e466447e514a8897c21fe0be2ef18948b66eb04051c0bc961fa485422a66d649dfa86d4b3dd504a89919a9928ef96fd467713dccc1f19ee69ce3935f0416d9c5752b7dcf9272d2db86c3eb6f4897d94ddbef7c483fcc66232e535a8b0a5aa4bd443493fe539a32d433d9e89f7758db5b0606a96455b39f92aa788fbbe43cec8f1d36fea3adfd0353ea5532b49a7286381d985e018e6534005f605bf67ab4aaafdcc499ac0882fcd9d90bd88053cfdadaf466e536f2ffa7f18b3dc254e42fffc777e0339181473e2b7fc844b687eccc0eb543a54211084b1ec06b0d9eb0a0c96b88d6585f414873c13ef7002af2d47d5859a23d12a7d401ffd4bcf642db96c70fdad0cb03a6098437795bc9c7c6c804a26225eaa53f52747f01db4e62471a21dbc1ded9c4de2508812ab11f61f6364fcfeed445ffba549e45e641a80fb4b58ee20677c7d6cf0526dbf4e26d9e5afac5429b4474dffe709d09d766542d65e668d59c836bdfd0f78b846bc412f29da00291871d94bb5e6557d833c8db3d9beb37888c3a70684adc6b063fec3d847c42e0ce20e05482db165ffac5d1f2c661b9db6d19fb3e8909587351b25f2c225cb26bb137bc52d04ad8157f7d634f29a3623b4eb53b4ef9a78945280bca8c5e1882fae373eac69ea366e2f13a9fea75a6b7eb5cd4d9eb14f68a231bac780f84200146ce7795282952382e2393f0c2a99de830d3aa517dac4ac97f2aad3f7f8e3b49b22b078e3708c9cdd1b2a2a129656066c0030d747edd646384611d4eccc5b0b9df4852af7bfa94f6dd7584f6285ca2ea7ed3f8decb534e6d31d7165c609fd9ad235f5af8e4e8e58fd3d248d822c202\",\n        \"signing_randomness\": \"30747c584e1b97911f9c202a319429d5f6e417b80be60ac63c4592d8ad891316\",\n        \"sha3_256_hash_of_signature\": \"bbcbcbb6e5649025c4ba18de90ce5094148a647b32b4eff75ced4570e6d62eb3\"\n    },\n    {\n        \"key_generation_seed\": \"771cbb7c9fbd9fc5db93e3e4de6c034e58be9bade93748c42297142124696234\",\n        \"sha3_256_hash_of_verification_key\": \"26769788d868838355b3123ec8284413b9282beb10bc6b4ead7ce7fe63738a08\",\n        \"sha3_256_hash_of_signing_key\": \"795fc29e60c3976f26b7be191fb0bceb84c8f8154a2f6dd75eea049ffe735026\",\n        \"message\": \"4beaf8cc3a7c393932cd37a2cd8ed790f05e4038adf1287e2acdcc0bed9bdbf92ce44aae95caf4eb142b858e1421610eafc47de566182835bdacd4c836f19bd686d53c3834efd928487a2ab3402c2e3ab3af97aa802b05223ca6927722c3bd1fe3f8c20f93c3951f907314896cd21cb99306fd7e5b6176945c2898b10c1df62fbb2680752cabc8980b5a0430be39d34bb7de9544bcccbfabab709c11bfff5c958c8763d8d5830235b49ead26c834e63c3f3f2d6ba944fd2688f6350ec99daf4cccc42c6be1cb19dd46514d71cb6e887dba80edb580b27f1142a20ea0d497e0336d55f1ffd4bb3d4b3521f0a01c7bb09258971d1ed4a98ec052b24776623d7b9a83c818795e3989eaeba8c9142a97afce855cc6ac0aba15f0546684ab5c2f48b23bb72a88b6af2ba9c73881103cb6fa99e3b03119eab03bc3b9bc365efcd7b9f49a8bab6a34a00aa8f2c88d7bebba808bd97111ebb192d82ad244e18bca732fe6f72fde5bd533e4bccd3f50332dad3a4169ea85c324d165413f10888ac3b21b91de09fcbb9b636ed00faaa669abf6429b78c3c04f239722f31fb0b1a20cb1a6b553908070ac13521df66772a6036e6695cf66b9a90e2111e499bcbf5dcd19744f43deb943445248a5e84f168e7bfea2dc4e1d0a87fb4140eb7c72d2dfcc27923206054cec870888a79938dacbaacf1f122b22ab5c9701d777bcf9809cebc9b7aac52468134fc4a92c2baa9b8c0f6249130a50337f460a42cb5364a5e7408caef8d12ba6934ab645de9832818f9db71f5eb0b158de6a76619e75245b56020e1664d8faf1c1782de4a688d4055e07d842410600e9454e28676d44357853ffa7740200c91eafa16bca21d0006f47fe8159a733e0e91549df434ef316e1df9bb97da6a2c2e2f20a65b3c00041a903270cbb55ae2432aee25c71ce73bc2322ccb8e5bd0e24820616a890b0851d825d79411c14948dcdf48776d72565422056fe75765e50736c82f71270bbcf229a7b7a45dc88aadf4f84238c896dab889e16c17db7be551ab24873fda82f102d0fcfc139c9febe9fa99819cef0e2684dfc5c843a6d496d8a595d33c51e1fde9a84059c7bc596d32d53e2fe046f23fefa51d13f9c28e227f5e24429b851addbf578922aeb0c5a61bbb666d11d127ba45c9e6378c70d75643de776483582e034e81fae0a3f029c47fb192cfa018ce1f68261d77cfc9e05ef19438e47f3de9a68c8dc09d07b1bdc6ced69592623750f72ec2fb8c5ca981dfb84b4bf0734377ee9dd8ef5ddcd96f438d30ab78f402ebff2163d43345ee8ca119f3208e21aa3a2185de967b475b9abfbc86465275f9a634fc22015e94a298e9c204e9786cb1ff14a5e99f942d42ab5df51ad09654083df0259aa1c26a760ccfdf4a276600c5fd3a54f210b20731941eb48a79435f1f86c45f8181d9758a1835721b87d36c725878375febcb8d48ed2ce8892db50965753a98f4e7110281db40ed64dd8eb51ab9ce41042589152d8cd5876ff30536f8955172a7a8f5c3f5ffd22c9954903136f781f0574f45f909bdf1657fc1cdcb9c4689f41e462c8d39108b10d78b6892c8775fdeb139258f8130bd1d2a1c72b5026506409f9862aa8729b35c652074494feb84a553cefbeed19d6ee94758e800f5fcbcaec19b6a00f33eb237aaa6fc0b3a08c1d8829c180bf95e7d05f919a929933b7a032cd20ace82aa5a45e5b2fb09812f36974b5eda1b387feb13bd49ac374f821341282c8fe2fb0cc5c075356833ff8cc6b648729a4298ecd73bd0ec73957077ac65722d0be23c1536b8db7b0506dae47c0070564e7d7f9444f47b22c679eb8aca4826f974a42043863e498e5301ea162c4e96684acc5ca26ccd083541bc4c1d2fd690e51f07fb08337450a204b0f4f2c17785e037424fd6e78746764584d5f19255496df1e524bff0aac31bde9254429565278a39ece4627c023edf18bc21bb523d44efc259742dee9ff7159d5f700d957ccbb505a88c2037629402c2a322d17647e430777b184ff7b4e8d6b94724abc36a5ccfac08e2479e8310bcb7a617a25fac6efd10d0a07248f7d4597f14309b8064fe3bc4a4479f905e832210d49363d1e5d58176dec9abcc0c5132fd6eccead2b05b56c96ecbbeb0b803e43db2f982ad9efe1e2a49649ed8e42707970c93615d54a3e673559b996e48a3b73143ba0884e918888156ca78f793dff990fd721de0c0b7916a5ced736e31292c5af062d7ccd83fe653294fac8c50cf6ba37b37d5a9bfd1e3b92d1825c1be0795f9b257cdab91ce99c0c51bdfcd6c0ab5a3bc6e30f884ecb4f1f61a3259cd279205b2c21cddb196360061758e67b1c3724f5cb6311eb4fb92e6c0d71e6d1ea45\",\n        \"signing_randomness\": \"b1a71602133377b68a905d8f67b2199dc11b63ef8ec1ca9fa35e7f0fa859d14d\",\n        \"sha3_256_hash_of_signature\": \"351bdb9f36317e8b73156b670c572adf4e2f26eb49afda05a913a816f5d77b9a\"\n    },\n    {\n        \"key_generation_seed\": \"fa812d8cc3a9631a0239474eb93ad3a2a3480f2d973d3324228ef92a3b043163\",\n        \"sha3_256_hash_of_verification_key\": \"6f927f4c5a4aa43c51c3e7d395b2cb92d7632350007fd332557a0bce6aed283d\",\n        \"sha3_256_hash_of_signing_key\": \"eb615d8ea6baccc9dccf19481dbfd1fc5f1ceed6d400deafdb53c70a15cf7eee\",\n        \"message\": \"0bf9a7c0f63cdcf3f850ed7c5db6191eeefe29e498a19f9d89be4698821abd72edc34317b4f8ec2736dc83c24ac195bd55aff00e797a83dffadc7970fe53304f16f5dd92e6ec362b9e283e41ebf121fb2fa2a3f60124ef3ebf836ae51fdd55ca9f59b085ddd660724c072b86041b50a3a446cdb20a45ba65380adf007e005df2d9aa16a9d22b11dcf6f0b1964f04f45441a923691a15d80dc85003b9ae281f2b5983dd1a04d80a4d9c4372d9820bbfae3af7735e7c71e9f085c0a6e4bc107d9e4ba222b38fb236b2cc3a19dd6067beac460383ff2bcc771a7f1aaf092fc72c292fc1d5c6fc6b9715f1e1272eb22f8e0b33a2830e31bd6c531677902f6a95cabc3e9c1ae36f77037a785fea355137a581fc14e6bd5f1f7ad1a5dd19dedd448b47b558c22dd0fcbf296a812a726e7d1b57f4688d3f577104cfb15fc63c27f7b6051c7aed7d645186fca63ad9c2d68bff442466eff76bcf0e398d2bf54c2ca4cc614839e9bca48ab2cc53865803710a98d313aff1ddd06a65680eb83c640052db807eb2f38ed0cc211128044d331fec3e6b0b2f3b675c631fdade62c16d1719278413ea3f8e54ba34ede7e73f3d94802d2f9cb9794d257c46679a3f00015945903190b97071f8fb55f8696253aa3f39b3fad344fb88224f5313b43889b768171895f7aabeff25e21e525ea01a996c764a3acf12bffed08f3f751f5cc094b50b325f8b62c7a5b3256964d48543690538e634e5730354358534b65eddd44a526bb4b15e2042b6210f503eee06d00d615ccad10d73cdcbf5264b526674d85c0ed31ba5ee584f21fe6d13f883ace4b094768865e43099e54671240e8e2af8a7d7d22335b3974ce860e7238a7c1ca8a009eb51c8636f0659189ac8ef01c871e9008957cece0a367b63bd2852bde8690bd74c6d956435d0ab82f94a90cd00fc840dfc7036b84d51f1ff5076ca0974db6cf25af42ef7dc8c30c2b04ceb2510e86ffc510bf4c931639478fd1520ad571fa17958ccf8e37f5f6360030300ede3a33871e9582808bda2233996c5005fd0c23d99261f570ad9027767f6fc96d18ba98e8ddfc2b79ac12cda5f2367b4bb6b99a3e07b59882e49a92aece85339bbb18ab9644d20a3b2a795240492ce4eaf09d9ef728fb82b1de7b64b5d391251ffb0699335ced8c7ce642ff1a79f04c3ea0dc37ea101188361afad236eb218cfbd1d0ebd784ce27dcba0266ddeb87b59b66a4f75bb44665643fa358dd3d0b69b49f45a752b5c410e2299a62be4b57b32b0924a069a8e8c15d754cc34debb0d967e70693a6ffa58cf7099c2c2458b437c7b205cc7e815f6cb494080f9eaf3017e5ff918558dde415ff72e954ebc2ed4c20c8ece38cc916060d22e582d54f74c6c181c2601400110a683f4a365e45ff1387bce4e152a740136bb762b03a99fb68f6ab42620b2e3c00fa8d150944230a6330409b27e4aad1693e2c3dd12216c4e2ddbc5e9cba68b8b5417a7b2edae7eb67d25f4edecbb087f93dc9c927c33076b1c71a2b83b33870d602562ed378805a690dd2a427d86c2c46ba4741f3defeb91a05eace975c836e52868cffe52ca92f97de94768161a3e953bab6a28016782909ec53c02f35184aa9ccbd5b793b525204b72deb63e104376893b9452c3f2c492f423cbef1ec87c85788cf3073ffbbcd67ff79bd038672943ae4bc68da131dba8d7b41c83b4e9cfb6931987b270c74919bbd40612f823114e4bb148671f1aa62bd2bdfcc8b0b24010ec112e883aec9746d0f5de467addaf51f8c070a359108b1f91643071438f098233ad9a94d0faa665a39291a98d14a861905ecde4755d00e690429c57580dcb6d51bb6186ce72ebb1fa8413892cafb8713e89775013e546fda30aeb8af9f7155c08b25810c80ccaa5e700c124cff59fa32e0293adadbcc7b1a99f67e66b28da614c5a4ccd706afd05388c65ebce07a543d3dc1e5a5d1f307f675728d4c629a04e9e455b4da35236c677f26edc622c1fbf29568d509ea0690af4cb5dbb4e418b6162888e43b458774a31324bfd5ee8d2152e4ad43a3007d7d4af5fda172c2779837ad3a09e135de953ce966727a7183bf77adfc76430666b526692991d3c9db5bb377552a7801c548aa63f6931d3ee91b875cdbcbb7441a4ff81f86762332d7192fbc2f7b69a58db6ccd3558047f1940a1cacd6fa28a000b9795a2860394bf05f0120e6d85f96b1fe9de14e3ed66a31d747924b6ff2620778e0714aeb34b79a5d935a0306e55c36506a292c5dc568403551907e49a43a6263d2915108916f1e27cf3529d1b7bd1544af83a7cbe58547f192a93ce5c5bc6d652405ffcb95345f522b2d34e8ee0960bb85537a46121bd9a408d283a125eaa745bbab04e2231c19ae95e13901c69e5c9c4d70b104478f4a70d64f81269a8\",\n        \"signing_randomness\": \"331c19cae713f365f5d17110bdb0a1d64b2ee06e58693c60a02556bf4e53a580\",\n        \"sha3_256_hash_of_signature\": \"8241492959e4e80b33775da4d9b43a8f12806a95496483b2a30636d1e24bdf20\"\n    },\n    {\n        \"key_generation_seed\": \"c660b84d558a7e6b4eac47c7b62135668e0ef0fbf74d514eaa3d0d428014282a\",\n        \"sha3_256_hash_of_verification_key\": \"86df17b04d0ada27626805e5109717985c00e36ed634a4a5067834818cd000a5\",\n        \"sha3_256_hash_of_signing_key\": \"dbdd65acb8f4c5d0713bd5fb56b8fbc3d082c2f6f8cef4e410eddc66e8e6b8ac\",\n        \"message\": \"dbfc582ae98d8fd326fae96a1849efe729a1173339d90c48c3a2b867135f1dff5b497d05fd55130694b5f9c62d136647d767ae682a0f05c670ceecc03475ffd39e0bd4e45b720d9d7e8dd04e69c969627682ad83f48609f6e66d0be99064988e4654e3913b7caf1475622e211bc247b98e5baba1b804e2bf651713197d8a610cc111ba5fd98a053408ad155dcb756d28a283bf3b20e6f3785dd5f105f8d7d9f2956064860b097c675630edee1f17e2eb0b26b6c20e260f9a5915d63f1be2c74fb0b37013244481a2d0c581c4ee12516e0fd4701e9835c8526a490cb39e99fae07c40236808f9605a63a5106c19517c3711ca4b9e8eddc77b242575d904dbe64223cf14a8e39feeda9d6c5f9cd0d0719a7eb5efa71453636f78cab8262636ff1e136c787e38a43faf02699c1f260ec45b068edbeebbb8a0e08ce282bf47d27a33216856f0c59e743deb13397656ff17fc4b3c694b189c35e516be719cda6542260d1301df93a5d93ee118f7cb0ac94d0364c9ea66718a4bc7f3d7acffa60afb7100f7d97e98dffe167d1d8e46c912d41ea057362c13b078cb1d9c443c1a57ac18c4566f5f5388f47a40ca49cdaaf34bd4c9a597ffbf7ab20d7ce88dd76a639e09ada323c588b08140e9350268c1ff76079093a05ccf5e1613a70e6e37cd257875049a767332e5f7420f319f9ac78f97c0c4fa40b1eef8c8b48045c78f73584590fe41f9f274dea838de75dade66d04e9d9308cb0a9948320d28d9ca8f1f51e39ff3de20fd5a2a267d127c317acd51fb779e597a8dc7359d920548b8bcad761c6b8012304e12628a2652d12a8161e538c20d582bf567e9c2b46b4cfe2d2da31120c6df50df45c80513aa9eee9f2613a221aa1d23f861c7f26aac7813b7ed7278eb420a5c44f2a5879a2f1f9f11e14602762e3389b152c014ea9ddc9ddde9ed1d6f74e7526f690ef37e71d448342c012e032c00e480a699ade617434c12da0e69139d0d9036743b9e2b9134b5086fcb96b193330ace8e4f77148ad0f532e72e1792795080b54d7172fb9af1972d00ae24d0b3d86528675b3bc8c7b80598d855b95a77667ad0f671f00039c08cc99f5644bb006ba9356b9c02bc935212c43490c741b0845cd7b4247592374aeaa1b589e670ac62777293870963b5132dcc27088f5da5b831fa570766fa81c2a07b88bbd45b81992edfd2a7fe934219b1f648dd8a414fa03eafcd39e72bdf7d4f6b9c1f31a0a67df03f6709f2be0e7d1b1690c92ce7b8c6b1054270d796b16d6e445d24cb11229cb0f92dd81190a37838951ad28be2aeee6c5f63da60a911ae0a24b1d05ef2f814fb30aae8ca3bd9f01d4fabe5b279142af948b0e6bbccf7560107c161c816a0d8e61dd908445079baafb78c14f68b8b2bb241fb03c237a4cb250911142d0b460acc75e6b0f58bf28546a4779ea7342238826f636a510cc9cffee8bb0292a58a07694c05672b560b26158a8566d01d0eea0773e81f3f84376b29ce375fc56a0689a7ca5ce94b91814b62cbb61ea2efca0ce6712a941d612b0f700c56b46d464c2aaab3f64a89caa8561a1dab2869d79da1720274d031946c4c7715fb9c243dc95cca7aecff55eba4044467eb922e93f57e3e39b93876a03936dffdd2af48d055c6c188f2f229812ec94f3fbdf7d7db62e4274dc91718710eec2ce034aef266207c5ccba21552d6fb8ddbee8e931067010594a9e0cb37250f67281c0a369965367424d454cdd05d3c8f35a15f76b4c8c3fee42f4c9cad68849837ded3be58730b94ae3a5f9146f90e03b4c0836381b3f9ccb5de6bd2455d241be9132eb6d4937ff27663f4cadaa9cda193919f4cb0d0f727f6c7b26e831c3ac8decc234d79d1b3bd28305e3012a3733ad718fdab7dd1a6400bc47f47d20f627d2449dbff10e37a62299e22e408a28a806d403cbee19aff6fa9b1814b35b9573adc86f829a08893cfae4a0212293447d3086e21bba28049f3ed383519917b169e8a1b7dd64cefe0da643a97950a205cbff6bd9334180556e84199f0b60738715cd69aad7c882430578f6fba4579d908f863ca54d0b9862eea6abed31301d183cf465b1a256cbd597a629307a8a890f11c23dbff895b932e9cd2f5f06a4183d6f2d61117126fcd2ce2b86bb44a9a5b402e3eedbe4ed1df11716e91a2302cb72d8f0dae132e16311c80dca041694af1ef63f659959fcaa133d9e5668f94d0489311af3bad379de17793bb3ee8a284529a72cdec474b3a82d92c6cb21c63017f262e0d7dd47aa5c58f5e23f8a37f00d5438717f05bb974f18a5d3e1ca054ea053c30b34fbfaee88bc0195f061ac32f5b71b2a8a3ed4b8bc4edab40a6396c052dce72e10768526c00610e96df38aa70938cf844cf445d8e2bf73c4f32a742812d8c1db53afc6b6c0a4bc67c3cf7579702312d6c89bf14e9585d2c624d07feb4b5b57f8e4c5cfda69a5e922cc1e9\",\n        \"signing_randomness\": \"ac6e80765afc5d0d647b5e4472b83b585f3a173155d444a4996545ad84e11fd2\",\n        \"sha3_256_hash_of_signature\": \"eebf7fdb14ecbbde773fd1b261cc595ce44c463bd95cb90228b25b43e7731071\"\n    },\n    {\n        \"key_generation_seed\": \"929f309ab3f90cdd9c21eb77a7ca762ca3afcacbfe3e67b056290835694ba3d8\",\n        \"sha3_256_hash_of_verification_key\": \"2cc0f22cebc40872ee3a5bb2f5d39d4624392d45ae2da250eda2fd25fb77c377\",\n        \"sha3_256_hash_of_signing_key\": \"c193897ccaa9e5ee48217be4471b4e6d6ab7e42ff3336993816105c399b6095c\",\n        \"message\": \"6103e5b22f934203b5ca87337095c9a19267afb9695d309beb8a557bb7cc90332c4a03e1d416d397b945b607268f545928104cffd71b02864e010b666cfcb68b762fa5ec839b5aefd0407419441b38e6d881bd5218df73c675df101bf2c53d90ff86d4a3c7db19ec9cac044e0467a36337aaeec32217faf86cbd7bc2b663421754cff1200a8a66e18f812868bc8d1c8ca495e6462da4b8b96d4167f040f04927a7c27ad35cf174d42684ed55ac80d14cbe4cc2570642ddec4f44880d967e9af77ee27d0d3dbaec9067fb6fc957ac4a136c1d564e17f59ac4938d43fb9050d810989907125c47fcea6c162c723e79f68339cd1b3bf596988bd6e215271385cd50616868c6bf40fdc34bd30e5a00773e2c039723f2ac3a3fa45f4ce870841762d7435bd6ccc5fd3d58fe059ee455a806fde89155c84797fbb73691a1fc6921859e99066a3239e31f28d1a46100db1917621d9e61473cf1e71f9850b584b459d5690941e676a7dd56796313ed9abdbe03dc75afc1430dba27fe0f8df48ef7c339f462af1a6d30a5f8b480dfbbe860c4c0bc136393c8fa0875af454273c3cfdba7eea44eef1a4060136948cd98b9d2c19aea4934f3455f31dd15be6545134f17a195b6bc409159c0975e592a15e86ca4943ccacf4b46719a072db8c629b67768f1956f8158f179a0b645320489dee404c8d0c4e786cff39b324053f102c118e7d51173cec0fdd017f213b2b07ac6b2c7dec04172dd5396a020edfb74ed86fc31952d241a7c3d139def543d90976aa70599792e73cf73ad0bd4a359bf60dfb2ce96a784d8de5e23a95e831ca6ffba6b187bc5f29a7757185ec06ac882572ec6283a1875b54fe4f295e1970bf311dbabaf9f894d3364d68f529c4ef9030ab934bcb09459d5aac61919946fd28df1ac85876f979e8b8528e9bbe69f03deef136eea6a8fc86f31bd64285c8c9f49adf53a8baa7867ce52e72dc4a63929df3ba2662dc77d71f88d8af42b8d67ad54884ee11f5a6b3b794f7d5610909b0b740937587cf475da903159994a262b6f32a3d1723fdaae65e636b71cb0ef0a744f359bf08ac8231ed2970ce8c451266f703da3b57f85aceed4c1c174c50d9c226f028e972ac124faa6f60518699cb4c499220ea51a538f9ede67d0e98e1bf8fb4b24b1d8ef50a28a93e20076f8fb812cdab04871d331ff434ba66dd4577b18dc3f471b3e96a174b58a7ac2470eb8463a71ffcba2d064470fd2d4e15f9491db09df3e3ba376a3ddcc437312be5848db3b9079f2ae046798473bb970d725e1d7c6fdf405ae387dd7cc1735a7fc27d1a476592a514b87c9017e1e5d37e338f37916f3c72c5f2af75185b88694d4e8e0a93fbf20ce81a7a0c10d55737b6473fbd92bbb39febc6167336beb9c235997796b9c0dc18c353e80305175bb412acc29e647813d0003f727ed0577a7c14bcf67173da569320e887bdc8f5ad27fd8864261e802a6753c6f9bac844b5900ed0d4274c0e6ede42367079188b10bed5999501164fa4c5a818ed6ee229c3e0e0f7804b19eaf5d1132be1d7fc18be834c842b21f8ddb11f8cfaac10d2e124981ed698ee7caca211c5624f09c62e1d451429048b55ed0f8a714bb77a0d4b40f0a446eddfb27602b7bf894805c4aad9252658f6b21a05dc0cf6a3acdc227fa867a4e5b1db63a14de26a79aacf1900a7b7d867c15cfd1daa712f2a1e2a6c7b31b121465539cd0164e3ccf79a978b543ae9602996448c6f68069d044fc958911ef40b0b9afc78ed014d94571f6771ea5e2306a7cac32c135fec0bbf1dca3cb0b57daa239c01671718017c907048e0d19515cbf430d4b3b4ff4fc9a391d15a38b39c4e528fac04ebd3dc69144c98afa75102d21ff961bad2e1f25562af92554814405c4ec08dae4a0cd28be592c9c9bf997cc0fe31502dd541000d4640d59654d26ca2a17ba4cab0518ee097c05b2984ffc56e8182368e216768e0d07e17fb64003e95194d04c6e00e08386084febb6cbc841e8f3fe2a069c45554bc502c27591ca3c1dc9e6b1694ba2c1bc0713c1cf738db22ffeeb7443d72d5bdb975d192976a58ab33db58f5dae497a0b24011e15e3256ff124dd99af6fc300d1fecdcee18dd4fbf25e901125d4e80efa8e2a211701b74fd992e63376996994e054cc00e7e1de7db8e7d2898a735ec4920dbefaaea66b456cf6a12324c5d56762313a627b3523ab1e2c1c82e4fbab136ae4395fcf2672a58011d96bbdcf2a7478305756d66b30a4ac44e48b18a5964aa89f14187ea114084d52b4ba77755ba04c34777409bdb782b7b645e93b4db284525e2f9c9c38d73b475dde2251277a2e6c3183d5dea78414e22cc8fb4b2c7efa797cd4a87ac81d3242ec8d2c2efd6bcfd69c39f14b0b365f3151a96f75454a3a1400c76a4390fe9f2e7a22a0cfa687a5bef1c905d3a893b0dfd35bda184f25e62fddc2a52b6a67e76f550abe4cc8d1d63cc8631e4cc315e46d3015c3b8636b92b8d07075d401c654fb4a\",\n        \"signing_randomness\": \"3ca92fcac81ba5d5e4679e71084f56b85c718cef79cba304573a15ae9d814944\",\n        \"sha3_256_hash_of_signature\": \"887a5a0d2a83e615e1fa2b0307ad53f7c4e393d9d51518391b41c19079b6a649\"\n    },\n    {\n        \"key_generation_seed\": \"dae1eba78ad1568590348088aae88c1abeb59626ef65991cd76ab81198e52837\",\n        \"sha3_256_hash_of_verification_key\": \"c902dd1d01d56540d4e918c5039ef0eaafd42f0a10c2c0a688353f2d053891b1\",\n        \"sha3_256_hash_of_signing_key\": \"6b5a4500fd43d3bbb5def0aab702314b23b423db399574af65b709883d71fe53\",\n        \"message\": \"3eac87b3d642ceaa3dc904ac3c4245cb2a260e4b74d0394d33d4b71024144180a727f80b092305f31b2526998edf6f98e46933fdaf0e8709e98d54f13c2701c58bbe35292fd3334c5e03d345a9a2ea1e01b2c4573567ff1ff3ba7406a16f5a5805edd760ac78a3ab8602e415f67c7cea5b36421c79f83cbb14fa775448a832a4b28851ce215c11dcbaee652cdd7342b6b1204727479e6208fb556cf08bf7ee230f32659e829ce4fbce0955d01d36624bbac18c1d25a3e187722f8f74c88b56e518cf0e78b3b0eac56d8f13c4afc4da3613a41ccc2b0b0e2ebbfe5799e479f81335360d483596e9ae926751ec9b956555f271c2ccd85f0f6c1bbb2c326c29b5ddf6b5c4c11f8eed15c0143993feb626543e92ce4d66c0bd28c79ed1ecb793a3091d6b9ab510b0d41aa42d70c2d8f26ea0b826c8c375e1dd89b3e2a48fe5d88a462deac33bac35aa32ebc010af7e47b77ad23653d747760914e0ca12864cd401787efd96f30d82d8907dc68578067703dd19b2377df319eb540e8ae78b2be86bee1c915ff3b2f4b25c0ac22ccf89bd85371961944d8a4e6d20e2d3e9df3a07d3bf6986898786f0667545275fac3eb0f069b457d8ebbe5f60125f94756db04ea203451a0de160cbce2a34650d92f200448b097691a61361ac487fbc3c82b2bd7c1acca02031311971c3cf69ba459a0b640a702db4467973713a6f2466560ffac0592d64ff1d4a935220826eb559cfe0144ea4b8e54eaf67ddf91988dd4b3749c865008c0c1cf98bbf76d929b85c8c426c15fa56706984e0f2e90658fa3cc33ec9fc700976870c94035ecf9a0534b18d07f55923663835416e40235cc2550bd9822f0912cf101f86039830ad9102aa4a3b6777edec5ebe621082fcf81a1c6a528f0324ec9d39fa80b6e87d6366e7edaa0e14337d6708f7c3d2fb1978f4f5cd594fd35b267f9cd09370d3366dce286ccb9647a1944f8d8be63e5ef8f6108cc5e9afe9127da84e1913439ec35a4e17f7782df042dc2f7c5cad8a659db282e61763539b56c2afa0f2b507d549ec8c9e76c7db306380cd7b46c9699b6db8be06cca15e8e83763137b06bff02de2738a46c61b70edf4f394d54d0453dabf689fb6ba41616bc589cb9847224e74f919b6e03672ec6a52584fe81456d6e648dd6f0f9b068eb72241f067bf6b891a498a9a59356c735e10efb37b3ecf47cc5620a35442dd81e25d2c6db0e9e871301add193d628b30e3b4345751bc17e0b5b05af758a653de7bed3763303ffe1af05e407f296c736ca6f4c348b25718c7a814bd0730affc057842af3d9b9adb12fccd740add16218aa57e43835821a2bcd70f1027f3042d4a92f10d0a1fb8323e87869bfa8da24da75f8743fa3038c24fedc0c987065421bf4b300be3ed3f6d6d590968d3ee32a8f5e20ea6168756aa18bb78b6aa48c299c36d0e78b6f84cacab5946c69179e461f4c2dd201d8032a29ec6c52942ac37d9c76ab4a401c9aff96284e1e9e39bff6d912ca33b6118067605ea65d7f611dd963f4f75f97346fffd1df84c79ccba06804b3017775d8c0bf614fcf4d824709557937b22e1805a0a961ecf226f26e3706362bf6d8d1dd30be7eeda481a64961641dc57b9f0211f8ee43578e4c2b6507114dfff3c3f884586bfd1278d117f7c6014fd5980cdf1e2fd1f34ccad170842b9e819c22fab9890ae265c3bb6946fccfe218544d00a6ba5bef5224eae24002b6e83e0b35e98c2322be2eb3d8234be8b048c54e40782c9a24d7a8b461ec05f38a94aaef3da3b46d0d85b0d949cf1089408189ff97c56c7dee50a004aead82c15c7c0d0965f3c65a9a715a65d29cd3614954ebd91eeb4e74f862fbc944c56f2edec4d344f92e8154708ad0f5575880503ef0f107a9a9db99bae82357c16578f3e6cbdf9b427da88dc322d11c6ab2a6ae6f5179c94454e09df5caa6a519a4c1903c8f2925639e12af793695f256bf0e55e0d45b73880358f09719ed89a4a1a07868bfbf16095a20035d5d4f99fda19ddae3e21cb98308f4508b5cee706c27898f03a2bf14f29acbf055e4ab0713a7b6fc1a7853efd36e1290e69587fec15d492a66b9a4fea6e2bcde61e02fe18e06f59a2f4e06f177b14ce4c1cf1a8d1f49c554a8a4c68b9937b4c230320c80753d4b071bab2deda89c9181820336f1e766e447ea1c44e15cbb7c002c1813d2c1726db0e4de289466077da9610e5f3aa313b1b01dd79a4056a8bbe9d843ce5b0439325ffdfe91fdaddec6cb86d5cebb68d8f9c0ed237a4648c412780acff48fd9ce817ea70d950dcb989ea6b11fd87ea4f30347a27488c5c15be7fd6d1280fea3a7c022f8d9881fac93176db2025b4c7914a51099893a791bf5be851f325347484ca6ed51b2ba71548a6046ea7ec85b31a9967e7d119d2ca3a51c1e14d5a3eef0d41bdd615da01d45979007a1997de281bc340c3203d5bc0075b1aa38873a9dbb9d18e6e26971e70b54e41e2c8c91d2e60fbf85435c1ebc4893c45a201b1d2391549f52a1ca3e0440adfb746fbbf0d9933f9fa0220b3e04ebebb29d2a9ac1\",\n        \"signing_randomness\": \"539bafd63015b77a86a4569148f6c9b750d236b1bf8893bd23b56651c47b2b24\",\n        \"sha3_256_hash_of_signature\": \"9df85e5dfa466a30618d5817fd8d174a27c9c542d7eb1ecf6e5e782a6778f68f\"\n    },\n    {\n        \"key_generation_seed\": \"15ed428927a7eb0c7c2dc7a98cfbb77bdd773fa8747b8232a6ec4b87cd7dbce1\",\n        \"sha3_256_hash_of_verification_key\": \"e0317c8476592b14a907e2fff1c8dac28a2a46f7156665a7ce293e6c18ac5d9a\",\n        \"sha3_256_hash_of_signing_key\": \"245a211961d3fdd9a97171e331761dc0d83b998f7d6eef16ef61af2919581e6f\",\n        \"message\": \"baa4a41e4b68fe333ffa5ee97fd3de18f0eece8eb83e46a8e3505e2ef8aea2c4040ba3809a764b681ec7449f41a2463651a8cc6def0e4a058eb843ef016e5cba8d55f925e66524be55cb98fc3169082e52e0d6cc3600c4e8a560b6d448a72ccc95620101323f98b43e28d6357414185ecb0263c7bb94e7f86146661fc897844cf52873114d39123260893def13516f982783b927864b61b56d3a8e5b4705da3a95f6d12a6637c9ced02f07b4aa0b08b4924103036c2a93b31c91ebb6c5b77de090ebf60a04191eb6ce9cc9b550f5b0c9104b74d15358854181c0c5640fc74caee14fed6577fd75eeca14070b6d02a9a421247a5bb262d6e62b04649e75bbd3ed8e72752289fa7c1a68096dd96a4bac8a2dc27c44881dd2416387d74a005680a3d229d562d3daaf8dc37b4c87cc86a8c991e9327cdd43ba930cdd8d1e44aefb084b51111965c5dfb0ee2f09112b070cbfc545119aba823eb3f65f26bcc025b39f79be42c0396c5fc9fc924ef1b7ee9ddb71b6e69b579c0a64c5b020206cd3515b8d5f4ff29378b9580d282f7e5eceeb5ce9c09a7b334e62151100cd658dfffa66f4091231bea6c9de8129ec4f5fbe8be0ff4bc93367dc69d9e38c177b23afba5c27fee3e2b73c0037dd7c419c854df7c2412349bab43869469e80527c3ad3a7103152f9e0b03353a596002ff54aba8b14ac393ee52eb5564d63bc2738d571fa3c255abd20102bb299441b00eb988f3a5cfb238ef8c49963b4ae8877e6b317e208821510bf446ce6b06c33717c91c460924248382159198f09d0f5a25c1611b2d39cc6d2ed149fdf0e09a0b0b2bb77067182e386f5f6a55b68808dad98e5ceb0fdfae6a0315845acc7b9c172b0e82190a5eb7c58de4f86d883292a883045c62d6a1b3c886c345aa6158276efa6b93ab2188e47abdd25d332146e980e1b1e043cf63ee35a5aa01ab6cc62f77699dca16fa30e3632dc5ccd3253d01e547746c78021ac307f0ef1a0119ad11504803edad933150981c4d9fd181835c507651dc92a86737e3afd0eb4ddef6182872fbd31bfc6d8427c2f4d3a39bcbe6b5120b8cf2af5dc59949c92d10b1c6a96810564dd335e0755f9de25ec26c102355688c38250df8f96e105136855c8de4bdcd86df03f92977da16908caeeb4056f4a5f751a57ba057ac0309f1c107e594cf3c31544e4f1d93fb9ae7e1a2451e7082cf0c850990ee71ade0498f6a3852dc4fc128bfdb8abdda3d759c8d4f83fed8509cde5eed38410fb9f0a5f30ea45c9270ba2395df645aaee03f56158685a0ba65de3d2c5209a7ef4bdd4bbe0cdc966dd1bdf1fe0be06c7115f7ccd80f8012e5d17955ae0c9e4220076882f30dc5e391295994b9f809c09dbed8ccdfc89669f40492944ff20948080a4ed66ad8166b613ab2f4414762ae493ea6661950e8e56b3758a77cdbcfbf24fbbbf20eacd5cbf8815899a1c3fd20b1d04920025885388012d9c58ea842db9530b7ada901ab9ce46a12700687bde07fb99bf66d0c775218b8454c936f03558b899b59361a0c664081ce8a7858ddbc5e7c5480280411c9acf4d1ec45035d97524e9e44f963532ca5067609540c1bcb5627f99d5c61cb9a6d400f0ba0a74e45ddab5a4e8a765dcf2f3684e3a2661a78ac069fa38163ad9f9713eb45c841c6617697cf8a72c54b550dbe9c22b04d579b09aab0ef4ee8b70ca563f81ef9700c07761c944926f9a76a8c3eee1cf7e7524d65908c47c35b0453dc10db5b75123a5b26b9612c0ae18816a71f34638798dfca21f5073ce771500034f9a71feb8b621356c430b4d47cb1b59ad4677b5c679188d8861beaf52558165f691f65a692e8cb8d24abb74b8885edebbe52fb13dac16e3a8ebc4ef192fd10d71898e93547c7a09f8642aa3b4faae23e48bfa809c5989d3462aa50fd4e5c4095542c45e5600926c2decb4d18bb43b7274239a8dfa3d9de1bb9ca099dfe56dedfc9e120867efcda10b48f7e630506aa606d76e4537036127fa05fffb8b8703cdc8de70a78d014872111a431f393345d74e8866d9a9a633923072e93dbf47c54c4b205c60e67d5155b76f51ab49acc7435525605dd43a10c88a03e08e257c68937bf2984be63d40f8a60589d909f8f09688a77da15dc7b4853339f235b1bd60aa845b4db6b699325885c49df9c40781cc56fabea6201e2f8a9352c28ce321b9441422807e9c81c8f1ec85d240c9f1c8ecc4ff06d6e3682dea3e6cf92f2b74c2165af247ce0f5ab84460693254b523498a57e7442977f51f1c2f649bdf756e7f43ae543f5d8e692820f8a06322667a7fa9c1a5b10199a69ccea22c74e172fed43e550c68c337ecc5e6aad9f7eb997a7e619d47df73cb917a705c3cde5ff344f6fbcfaecce6b734e09a385fe54b224a880704d774581074c59eb0a3b42c59b8ba4518e764c5a532f6655dd839862af716903a118433ce0809376a88e88fa847b4d1c63ee393267b15c1e42a91dc6107cde990ec9ecc7c1066e9480e90a22907c51af47da837438a90cc07de8121691bd73802d5d09d18a2d8b38a28948735110891d1b559a73445838f359a6fb90a3cab887486cc9d95cba35b55693c890830d2\",\n        \"signing_randomness\": \"fd3cb9a6d1c92d8919767779c088a9d5c67b919d2de1b6b630107ece8950baef\",\n        \"sha3_256_hash_of_signature\": \"ea0730010c67b7e6ffee4d86646528a0957a335a68b26c06e63cc4a6215975d7\"\n    },\n    {\n        \"key_generation_seed\": \"ba7e359b1f669783521ad35edabe97141a816c2fabf0ad0e001e21f73ccf7736\",\n        \"sha3_256_hash_of_verification_key\": \"a96c9f13b52cc4554d82efb836d7e635b4628cba343ebe6f88dbb1823910dbfc\",\n        \"sha3_256_hash_of_signing_key\": \"5211e0a6fe89c044d668314734c6865436efcd1da6e36751a9f166b2e138e0a0\",\n        \"message\": \"0707ea05515798829f42a4cbddb4a95c5750879e0a584ab503f778015f83bebf6d63c3b48a4f478ef01091403ddc5a9662e39707dbc8502acf50f3e06ed0199cc647ea155feef503be045bea4035c07c4cceda306b8187185bd06c14220f2b7401229969c1cff8c36d499d5a725fa1ce7b44d71e6c0e4e750766183883d838dae4f00b140e0afccb0e72f935018a6314232dc632c5ad3c26919d1a7925bf0f665ca0223439518143486ce92650dd145fdb2e97e0d5bc9d6806f442fe90c9c1f52992e670db2603ad885fa42b3d8bea4e470b7f76a367aaa506e931890b6e4607f59e87a7a5fbf3991eeaee47cfbbfe3cbe028e67bb645d37a7be5e7cba6d7955cd62d1d8db0d9772ea0185c25bc1ad40a09d3e7e9caba72bdc3a6ef3c40c7ed6208854157914a80b5c66a6dec2317fb5a529421c03cca6fc0a3b3d51556e8dee7c1ebfba924fe2ebce8a46be96e761aa6749c0a9a2b2fc49b42ca47663ea3395df22de20947db14fc1fad03805955d67f8473baefe2c1e22bdcc7bb988db0dde4e83e26a16f10b93bd9cfdba77b9302edba0c9afba7369a023ef763c55484f7425f842111cae27e07a511a725f25d422d933f2ec201bffe3291411ac3cd6e91018c95074c18fc780a73945b148154987854cfa1cf1199bcd03519c8f34774453df90b71fea6734dea7191ee2a5735f7a191f527642d53c844b087e9346b07edd0b78c36f83445825e60a13c424f72530e05f75da8d33957faff004deb549985790956a0e7d9b256298d56bc6206f1e4e1e958fe298641a277a2c8b6b9b7660dbf689ad7e1a19cbd965cbeaa4a0d30741586290576996ae668ecbab4f06f2a1d542e32c5d3f042e7e29a41bf86bae29e7029d997876cfb23b10986a45ca029739b2446a29c55561aee8ffb187961e6e7401d726af6d8a5c816b2ceaa9a1c9b780ddcc4f0e4003542b193ae26ec687f8c51451d2d5387d9c3b9eb95981df2de069fe741cd5c15f6d1b12c5b9b94230aba33bf46dce8ac7e26896edcb4f87272c32d19e72c313738855c02c6f46f1162be0a3ed2e76704b16169689bf532ead7ae7f2b26f4d9b22712662beea1f46748fa4c27d1d825d3fe493b5b3b513617c81d21a0912d329c5a4e3a90ef5a29a4e3137d1ce3eee99c42d034e61593a4076ef124bd6bcf8fc911fc9f6077d82c2980c2adb955939441bc9e81bdf9d6996ce578114c01f9ba096d6ea40f4e0fbb18b3e3d25e7f6d6cb670ad26f604368acb6190667b7b7ed3c1a1da04e42ae0087852834b91aa072ad51c0193e5299481221bc9083118f7b5503559f1e2d9e22a8d57932cd0b59509e7d7f459e20ebf4c1d0df71472340e64992c0485d593714d6b469547616dfeafc95089689931e79944204a6d0a47a565dc325f3be19fd44bb6cd4bf2b1d4a78c883154d70705e121b833a4a7e7e80fcdca03f52c1f831ab0d989ac5dbb5cd83babcb3ee74b69681818dc05e33234775123f552cfc7c7bb0b98c937957a2c4e86e3d775468a7cb8d33756ed7489d04dbe52eaa2737efbc4c4d0f55b5a841e1453763e611bac358fad0b5778c6015d97cc42ca9fecc66cf844dfe55587c200da5250b3a419791f57d3a4f672551be885dfe2aa8637d6c890ee8e1063e782fd7e2cb356bf47b6eb93a155d8d64c9f6cca3971c5a7facc3c052a2aa9fb286750f76933261aff5ce408bda8382af8535145f432f78b3b25a768b5da2a211d1d07ab557cabc7a139f66edbb744aa76e0fbf22092e31c92cafc624ee1dc6732f27e8e7632c6eee2d1f5c85b52d712c884b36c91da383f0de9e06e5ef63d7b7a692e5e91ba1a1d9298e26694faad9ef262f117df8115e2e877197a8069a96210ce65d45e6aa7011654acfafda810cccc20c1985d54483dae12b29d7ecf66376968b52fbd727cbae7c9e3dbfee7391d985228aca9eb8ef98fae32bd24552a6b34baa581dbb03676a3a4546e10efcef269b18e1172f560fa0f0344149543551e079c1745bc0425b5233b7d7dc32f751d321638edb1cee56df0359eb6d9863cf3e341a56060c8ef8486014f956c39b751ae239a493a017b2fa5210d374ba83df5d799b7cd92987febb0b2cdb3ee42a61381304c5eae2add4777011c3279bbcd1edd6f91ff72b3c353ac35da8fa843dc5561d3cdb507730e8bef20cf09b0ddc36d47f4c10d82652dc2937d889f83b1ddc30e52b244250d19eea9cf7a3b5d931e2e25b64a0a81b2c4fe933a17beac2e10fd888d07f994e4f2583d204da126533f5e36b62486a00ccc317c4381a8fe11d36c43e71be108e22a98f53729f05a5e0aa38d512423db4bc1d6bfae9117383acf94ae2a737f6b8070858beaf08e365ca84925f8bebaeef5af77eb73a9d3648aaa6493cebddb95149f0dafacf129fc321e558084a44cca4b429d664d90dd90f2a04818b48d135952746ceca76f99b947a33a3bf7c535b187c1971af4fcb1eac841be7e96f429dd38127b52facc2dd6512d8d019e0080cadbf7078fc67e9af170a2a00f70f407b0a7ff469e2f6ea165f8b43eef1779a115089de9abe6b78c93e4b8e3b018686d16ce8ebc88cbc1d571372a3996c9e5967c035f9da6e200e7ecfd1cf7158563f36a3aac3cd8acf52a4eee29dceb03fa3272a671cfc9b\",\n        \"signing_randomness\": \"bd322c5cbdf5c481cdb9aa66cf453d5721a97e0055e0ff3604d690163bfe90d1\",\n        \"sha3_256_hash_of_signature\": \"e9752a3447fd25aa9967b9decc8c38a15a9bdf6b54c5d27045761d0a5ca04648\"\n    },\n    {\n        \"key_generation_seed\": \"9daef95c8d5a61d3a3a267fefb9f37d6e677d7ba26a3a5bfdbda8c281be89ccb\",\n        \"sha3_256_hash_of_verification_key\": \"e2301852a398e8410e84ad5fb5e1ef24c21acfa57f6d02b66ec5b7f50a1fe724\",\n        \"sha3_256_hash_of_signing_key\": \"75468b91c72e0ef999e7ccf66553690712ee57c93440549ec5cc4754a8967228\",\n        \"message\": \"f3ea695264936d537d86e545e132131442c2973d19b37f8c911e3ecef4a13a8b1edf5e5968a6198d26205ffe6b76cb14e353b5e2c9de1bd44ab9bd55862ba1a479833335725ef52601810c778da4a32c497ccfa43f91c72a1499e8d295ae7cdb43f1ca05f0d4a31b30d9a69cab8288640f3f9e081e2c98cc8351c7eb9954d428da4bb374b346a83eff5aa3f455f2bb3fc922f901bbe5695e3ab9892a93beef90fc150b3bb47f6965c229f7dcc3100a4101840417a0e2547f9d42ab27216254a2898368bfc60e7d407271c213233b6913c8e48df10967757bfaf5b5e2a284b8f67c70537c97583786b5185b45e2e36bd8b5443e98601f772829176c4d66f44a81aae7c13f539490640bfc40b83e1c75305b06be60e18a0ab568859435b715e15ba1ee4de73e04e1b09dd15350ae423c131706f057255e9fa8fa3f9e3ade7435a6451f7a2aad0c0fe0f444c4a247dcbaa49e7c926dd52a33d3737b4439c1d40f861720e37bd25366eb5f34bf4b552160f3eb80ca8fb19304e1e4143090f8e965daeff17551a3931905b5cd991c6bc5af5be808073893a47fbfeec0940ef5e7d2f2ee199847e1a4bea447bec40f86f6fdaebece6ff0f66e04193355c9576dd4aab2d796cfee5d432b1d32e13b8903a06ffd3aecb00c169a3af8389848cec724f647c6ba8dc3134ca18586db3e4138601a16df8873a490f23c4d27fd9c3d4fabf2bdcba4af3f0793e7b591198100ec97602d9ba572409ea49d7c8edc646335fd4494577720ea7cdf3b4266fc201de4bc204c0d35cfb55010bfac68ca0df3ac936c9fd2a9c532b8e3461d25362efa37da159b64670060cab833eca799fcf1342c7ee1b80bde05abad08b9ee8908d50cd0d433dda0b120d1980f690acad9c072502ab537ef71b691917a76d3098c27fdc6fad1f1b29e307e17c87d9fa6a06cf8cef6568d9e4e005feefcb5f41a46d91e31b41268367d636c4478921e690d5d57e99da3448773d51b673109cfd3a58cc50c127f34f4963fced6c216e60ea0952317fbfe88807bff4223624f6126104cb46c8d39ee228bb4fc0002287e346e5ace43e2caec07a22203fe3c4aa9008a94f7075f6e449fb89905bb955fa0023608c494f7b73d2aa4e2b0a8a7e3caa889b6b6a6640f7222ef969d46ff6794bd97c5363921461bacda17f2781e14419436e37610e52e3b7b7bf9c1a4b1d80876030f9a8981daa4f06a432dba739db988bed5de7f38378ec1f7d8a46b305896ca0caa5d8ad74002863c6ff91ef25ae96450936509efa93f94718e895a82b4616a965af004038e0897a6563dbc91eb5a6172adba052250d06d210bcf5a250246fc3482e57fcd9901104c5ad58eeffac2860a4da9d2c308552efbda2d4275f3f3651e9935a0e42869b9263fc7ea71079e604a4ec6dc61cef6ac6cc06194def432c1f7cd9edfb0c4b448dae3c2a685bc818b2a90e17a4c1caaa5fc2632f720e764e2b8da314224498119a0d94cf5dce24176421c2736575672b361119ec7c766265768cd9ff1957a17779c11244c1cc82d72d4e3c87107885f71c56da2bc41008b0bc1375c12b3b2a80071ec03e377a93bfb227bd560edd5e5d88f46f7ff9831f05bf262f01f62278d3dc13f4f0ceca0509091c25d20666d8d3527975ca3495f6843b46b5d5b6f5c650e981defb3943963e14f00a0f78ce785a21634c46b531b4f2ac5ad0f03d92372c334ce963e514a1891716eb5d5bb1b67834994eda492719032e2a4f961ddd6d2002d8f52798c45a9da8145bfd191e97d1fba1b395858b0fc7d5f5a54e69fb3780635f70a763e44075075580778676e6b9705b40f40210e597b5aa1aa77bcc3be5005159a4b68cbdc6ad8674495e0df65a6decabafb993cc49c082d358db1e5b3a8af2fcb0049a15bf521986ad84148135cdb185fddca6802c2ade9ea2e82047725d73f51e072ccd799d696d7530f61b16e9b4727c58cb0f552b188f9b451be543bd809b63d66bcdbaeb7aa917be6aef05df559b3aeaf65d5ea12e852d1370efd6197f970f52292f27923a10d01aeb652a9a44573c137257b49d130f1da48e532b3e33d4854b995534380b4549511b39a99145af5abe0ccd3a9dbaf673efc115cb75a9a5a806679907bb525a2bd4507977329eb4c985b3575de6533fc5d62358c21af3dbdd20deefd7c417c77d37dc2a098a8fa48f7944b7ec6f929387ba11e3516c9ea681238650416ffb97ea343d5f227badfdd509b94c1451c54f85e4539a8f70dbb5efbb10b2d82a16fd0c997c603b8983ceb840a7c3b61918d8a97766bb8442c3b9ef2d324e28dc19748417d32f642874a8927688c74bf4f6f6724015c4dd50eb83b85f613fa20938f5c895f88830a40c9799c212b2dfb453ba0bc534f75cedaf7a016f6744cb4f5269fbf0284eb90cf1023918078024c3b125cd9c7501224050b4d20b585472b42a0f494513ed131bcd8f75e223317f56b37ca48780750de0bc81c74a3388c94d93a65719122e9d533274811b76965265d7b2f91ebe3c5924ed2d4dd5e327a6e7546aa2605e4c78d0208db7a7f678caadfb32e6bcf8c77fc7810f7d1d5d50e26d1a0da03b8afcf99904b2b3198670462451925381f0bc404c51f2f18fa7e2c1e8b0c6cf97a9a65e575373996c3e9da15a18d15c93548377677dd713c9828dc4e4ee823a241377c65a2948bd29447bfbe\",\n        \"signing_randomness\": \"8e128d60e2ecf0925ccd6440e04217f4b6cd4ea12c1f3066ba9148af96d2806a\",\n        \"sha3_256_hash_of_signature\": \"96121be07a8631a6c71b414d71fb17728302cb4a4dd4ca9873a151ee31320549\"\n    },\n    {\n        \"key_generation_seed\": \"0531b4105cb209585f9fbc29caa57e64c2d40f0829931a42caf7701717d9096e\",\n        \"sha3_256_hash_of_verification_key\": \"c35756d06d6a96c9f2b0cdfc3827fad7f3eb9879d84a4149ea277789104f1d61\",\n        \"sha3_256_hash_of_signing_key\": \"0bdab3a05996c544defda441d85830a9af4dfca6025d1d134af641ac586de6a3\",\n        \"message\": \"437e0f77bd0e14d704be86135119f39a0a65650c762852e2694ad9bf2ea45c7ee59df915f5aac128309847e944127294566ffb193d0361dd7111d32b06dba60a12e053f424ddd70674e902e409bc6f5891cb9a76108322cdec1491d3d89a74cedd855bb0791dd6da371a75ae979593b5159fbe9ddacf88506e6a184547e2a7395a46fbaaaf286eb7780b789fed86f257e5036a3555e777b909243695ce89957df492c80050457afd84aad9f8918099ab00fd7ad3528a3d0afe5b52300053575b839572d4d7ce43c255bbf5f16948d40bcc2e63714487afd3638601adf47a324482ecc99fb88574538809227f8c0a5fa7f20a0b2fefda38e6a665550e44b8d5630290a4815621a5dd74a2108ca946241c48661eb087240788808bf676b145442b2de4c35e1a6b8cb1e97e54cb729202d8827a0d4994c6d7f3f406ed273b00b6590006af069d69173b5ea8237b87705f362288ac3a50bbe7e70eb15df6ed820d66290f57a87e51b2c5777c9c95c2a76ecf2e296a7c295bfe029bbe681b32a6d9f16d11c7ca2750e2f8877af5ddb616d8a820de998b0b2af5b0c2c5641f498c99971932327ec2c73c0ef4058d9f33683f60553ad2962370afc6725743c86e591d7d7c20944479daca5e92d66a33ca0c862dc60dfeb5ec3c6e7de356f6e43f06b1431358285398f8885176d60cba218217dc7afe4ad876d0890648052a56812bc3f8a9e6c49f9d70b0a032924b891a9410bbe2f214c842bbf0511ef9017744a0dbdbd500a4189b471930e25216d2588cf8ba39aae7623966cc62d6c4ecc8b00b0613d912e60adf613c8f55b778efb93a513a776c64e8dc943e6272c0eab4004b4b05ce9bce9ce2f2b86fd8429e9a72cb16ec3ded285339edfcd122150f4e7310f669b1dd4cd7e76d282d10314e8abf61d53bf343f3ebf9968e1be8f3785581f675bfc28c893729cf67345d0f7c11d6e7d6da0bff255bf706c986704a3b9c6fa0602c6dc108a59cca70f624b08e4f5393e597459bea4aaaa463a3b08de147e10de6b75a0d87bb79ba9a71e7f5999c8972ba992228b60912aa2d7a32703ba8bc02f774430a2b590911d48d3866396f1d71f19ca90ebd5277743a984e2156cb57de88ebe91bcc09ccb5c687cbcd4e48e4ee110f4075a21f9a051700b0c2698fcd6a5a73372ca366a230a9abd153e4dcab7a33a8226f8458c5892098bc0a95619880156548f300c40bdef81e8c1d8bd03031c690b7c3c000ce99675adb4b94752ea22bc9e0278d0a53a2a19363a9388bb8d6c24a45b5dedd8f7482e9c29603ff182f25856fbeee2b41b88b352f99db5f33d8eab1a1a1fede60ea6cfb7478db7540d3a286e88117503c4d0a2c13d32afe3f1a31d1af9ee60eab8fe06248cfffc7bb438b77d94b5644805cc276f19268dd1ffefbab3c796923288638da1c15e014723a84f8c2dd9f55f7adc2adc13fa7cdc29baf48ca438c882da5f7caa792b7cd984bb11ec4b681b332edfd4ab4c132b08bfb688f81baa3fec5a079e2182c282a3ebe2ad5e4c59090bbb989e6a07d85d604f5ffde0587add29a5175ce65d29fb9fde3e8b49eda1d88ee8dd64fa1498d33ebaf4a847ee9fedd3376af46c1552a150014c11ddfc5047929e2415d3f9d81186a685a1caf2f004de777760f0567e880866320a7b42e61cc994719ddc81e28525e50195ffe4e0467d9a9182b75ef57dfee926d7744485a55e07d1bcd1c9b9b12a60460bff016e9834848665f132e2ff87805e00154c7d9853dbca43d005bb197eeda3d2d9249a621efc4177415bb103893c82eeb0aeea056b40e98b5fe65527432ff33ce3e09fe1288a6e2641011721279253800abc4b73f65b15b434bd34a573e77a94729a78c92f0e791570a416a0876db39a8fda8696fb12e7fa3bb11e7838054e4195164b9676dd03327810ccff9586217aa3d50e7d3ebdb1ae1bf6889df316047cbb278ce8c9741798452a38e48a7138e1fba286b497fdb8b1e7bf6145c5f29ecf6d5430f8e550314db3cf48f27897f312c6d9d6357a880b721e5148da7f789238ce411f952695f4a878756bde311bb4e62f10c2f9939b8530ef70d3fb431655aeca2ad36bb5df0582a07f53f1df8e0325e635d5a5e795c130106502a081f2fc52a9d97c5daaf174f13d2de1ea0f8860f08f4fd5b571e1ab1e84437f3c82bf19b96e46513c316bdcf994bc26fb8461f90594e08e6d4a032c1da38481a1ad7bfb7d5270255bff23ce035535cf478216e6d2e62e147ad93357d62636b1ae42c4e8433bb94ca91d0f8ec265f2793514543aa86b786d9760be5c77aad5a8449a7dbe92391eaafc305c1267a68e6acf0f044fc144d82c917992748b9232dec4e33ec97534f2bf60b56edbff675f0343c9c78e8a8d0529a78e2eed9f998b360360352009f01905c1a4815a36b111cad8e5b34688b99216171d4f57283cd669dc05995bb8d94ecbd3e7b662c4a603bd85251f2ba35fb6ca492c2b3e996fe66a1eb904ccd61b0900e7dedcf136f50e4c3ad5fc312a2de4b3e51f355d01763692c0722c700a544e681a316a1d261fad727e557398e500f15df33883abe9d1ba645936891f5a91ff6c8a7b9b6fe5062718542df4fc4ba50d7f513945482381adc42d5a9d444ca211232615306d7241fc49f08912bacbafbb056c018ad4d6021d99fd720ed6548a5a29daefdce868d71a1ba72d9f998a3f89fcfe526493582c4c8af5c1be065ea29f6155428dbc955b745df\",\n        \"signing_randomness\": \"8ec405f4b0485cf9e3de3bf57f23727d0fddca6f2eb0c91d162d9d5e84297980\",\n        \"sha3_256_hash_of_signature\": \"aa5823dd467f06db228145c7ccc3fb901a240d9fd58f3b98e7c8b8030d5cf176\"\n    },\n    {\n        \"key_generation_seed\": \"7f8515aa82dbc9ec8cf1ded5ab58ec0d08cf686e25a8c01fb1109a3c68d19e48\",\n        \"sha3_256_hash_of_verification_key\": \"89db807a9aa86e4e11e66106198f616792f20dab90cc26669d4c0b2407f27d20\",\n        \"sha3_256_hash_of_signing_key\": \"2ae15d96a30f990192412dd03b1b99b5f22190bafc8e590a70205c06d23f6036\",\n        \"message\": \"e4e3edcd70c4bbed033f402ceedc2c265dca10b2de0db00d454c3ae1a0d00c97e1dc8c6804b1777ed21ddf5145b9f9348a931c128a8fb03827f653c37cd95859868dde356ace682f627fb69fcd97757bbe8bd5a260a293d2acf0bfa2c0a3548fe25a2ba1a21f95123d592b40c20a927fdb615e69878e8d7c98d261dc01958a088599d3f9bb5e14002192fc7de417b1074b3f7b52cd2a699091fd9dc3c5929e51cc0259d2255caf0e444ec11257b759978bd4a7c8e2ce8473325b7498681102de6ffe9764334d862e379d9f2ebf9b312fa75d7a50e08b94bd43eef78722d423928fb8e26fda85a345eeed0326a5d694e4729154a9997b269407b7d03818025eeb2ba96580626dfdb3bfbfce100c508170d8150e4980d5d386761f4e8311339b47852acc2a0a01dad90d3978de6536547d4f203ceffaa652e4f2f28639bc3ff83c485c28edc0bbe21d17b8ecaf3794d64c36ffe7f07e8a906cab8e7fc9067ca4bf9b074c7fb01ef99a05d7c0f35d889a63afe5ff18023bf77f8a3da0c3cecea0e538a6dab5c54f3a0d83151595ad3ec4c45132ec2f22f652ea5dd930e692a7c0d7c23de84314caa7c017ad50d430fef42de557073ddba6caa4a787c92e6e28368943cad0974edaeb7addf991cce20bf51c5a898cf0a2104abb810bd4937d23e5d43490a3194b8a109b745e0a365efa59199b43835682e996794f16c5cb874c88d9697b189ac54a1ba1f459623c1563cba7689ebb32dc4fa0bf30e064d119d40c36301a653a4f959c97873003cff7e8e030a137bafe0a60ad08e4f692dc107e68ab40edd0c384875b8525aa0a5ec3aceafe557ec76db5283672f9751afe1166d53542d216186a3def4dfa94e57bffbebd6f4afec3c0f3f40f651a1251a9ab39c262d42313e9f22879645589ea54fe894ac005115a43dd806b2c8be6222dd9f02189d4221a9dde99ecb8c3ef4171776268c12adc37e4ca92eef09d2d1803db1fe917521662ba7ec0c07292c7e2130eca4eeffe53ee0ceaaaff6f4ccfd42186611afee79bc651b1adbad08458592d69fbeec708c7537925658babbe7e9867915c6a728eaf41b0af2effe55207c01652891c373f7a14409d05fe9e26c2e72d688047de9a0954516b85ed6a3230b6b0ea9c5f086720c26efbf8b7f5c5d14651d54c4ea181a707c562239cfc08b2e09a2941d04d587b90134d8f670f734578534138cd9cb7ec04437a768fe65fc5b3fbe818db423a2208e485669082b422ab1257c2529cbf7ba4cb30fa27b7f702418c2ef9c3bf7cde53661df716449c6337c54542eadc5209a0e030ad6577deeacc6be1813db24bec035cee6aee93749d524222535a0277600f8e4f4beb473093c5a00b6666cb319dff131ae4f004eeb1bf71e5d274e3dfbfa246dada9d6f548907091045fccf79b363e695ad54c2f791861ce04874ee8c3375612de820cede04e4472bc3dc19abbb91c42a1c3d7b467837570e7d20a2ca6405deccff1aec03e0558076e988619cb0cda9cc87a12367bd486b676a4f71d40b88ab4e7fa750350dadd1a8f12b70864792d3cc1804be8b7cb9dda532182c32582015c1788b43054b7010229f46bd39000440e7f5d22e4d52eed85b204b344680426aef51f0ce0551feb9672dbf391a9ad363ed090837cac1e721878e65af9ba92a0ee7c7979925fba9f4e452eb4fe3af03b9eff0526ff0a331ac0b8cd27a0c49e5019b7025c3c9870c900a7fb31ff834e04b87db77c4d6dae4c3fee741e923704ee5f294d8f881833e9137158d1ee0fbfcb4637acb814a2a5346607bbcd6bc916235f7875334f2b75a7ea7b8b8ddcdf46c0b8007c9b3a014ec6e634d4173cafb1dd09cb9ed4a123151f4f2631d4bee1520c10c15afeb17198009c2b254c1ff0becafbf69be8c7dbbfc7e8f3f1ef05ff6a7945ff79ed6c317609b9238670dea26d56d481f87ca171ccfd726cc0728c965d9bc38d376d707e6979908b19fdf7e74ecd2d0671ec338fd54ad6cc5f789e96018521882588f888d7d715104d65954dba8907c0b7ce3f2acb802ed49ddf1416c29e8d685c5ad879464819e1d53fdac741f71e31ac0c17b6c8932a4a00e7164cf8bbfec36ebbd30392145b292d355fb304a88a638f991f6f89a398b09f1de4f0b29866029bee75a12d724a52736f2b9f49937f0e51b0f2e1bd2c1bc9325bbd1061e0f7685aca02da735d8fc39646e0b2453bb9690ed1c4853a757ea9dc2f4eb4b5adbcfcbfb0cd2587f61a24b77ca0d6cfcff47a98c7098b986d4fbd0e46ef0d1f9df842f4473c43912ab49f4117c8214a42f3083936c7e8a38b294ba081296a393dcaaddcd0d340ac62511e47da6591836553eedb466da6285359ee831a952e6c7ae3b943636124e43224d527b7d394511cf31c50ec1d3e7a20e49850905d504f1aae477830e3bda50430ebd47fdbb0bf537d8d479cb799b0429c3f6591328299a09f45cf9c6d30d5c1c9203b9521d807875d7fb2c2cfaa688414497122161b1b4f159b66c0834e111da4f82d5252367fd2dbfdc079333fc51ab0d34ecebbe786f984852a596be620ec6cf84ed596425b90316a13b39e5ebfa19b319bf0fd1d6c812f29970fb1ffe948bc0d2e057b1dea15445d71b5f728c72dd0c69e277c58f031f90932994ac5a177926dcc1c570ac1b4b099ed66abf7dde5a5d77d08ef1ad7c6ffe018f56efb07c737f33038846247eeee147e4a5995bdc3352b73f15fce5140410aae3f0af1764e5ad996d01608c5e6c6c96a20274ea7781b41fc532b01b52134fee28f501efd9cf\",\n        \"signing_randomness\": \"234ca1489df44ffa34042a77d73748f1e621eddfdcd2cd35708566b941a1aba7\",\n        \"sha3_256_hash_of_signature\": \"0d0e0c5bd96d003a4e02e22aee3f347b593b0cc74aebbc3df039533b8aab956a\"\n    },\n    {\n        \"key_generation_seed\": \"5af3838060e0f83352a75a0ec4ace2ce8ba119bf89f34cb4d6b8e27007cae7fb\",\n        \"sha3_256_hash_of_verification_key\": \"6d6256f1a50d61f29a400b5cc62ce8c80a33207b6b576835c528f5049edc9f2c\",\n        \"sha3_256_hash_of_signing_key\": \"93937c31853d8e8d6b5772ea4085ec8a7a0eb7f78c91f5d08408b646c22caa9d\",\n        \"message\": \"84c603d1b5549c46964ff2987a1f533b4ced94e67d576a3b0bf1c8bd87a74ac7db640fc9f7ade44ff79b820846eb83367153f5ddddf9dfb7848a13d59436916efabb82dd61291447491d2ca04166fa8680e8e0e0dc98e79344534ca1cbddb531797a61c291606200107002091adfa927a763cf98cbbd631cfe890b0ed257afd34ac0c5280aa7c70bd0c945d78e6fda284cbb7b3ab636bdf17342f2ba28d707147f14d15173d9bc0b6d65fd1663c86971be1fa59da8325e1f3773bacc5b8d4158ef525fde6e96631c51ad142250252a8e5786cd621210df3e24cc0b4b60ac2f013d76db0c73df40efaa05a65383a8892276b3d69dd511937d55d914c3222a2386d1bec0a268e683716af4ab709d2d225b86229095e87fe70d69e6a34bb214529ca3f082c0f2709e77b86b00b4a04bccd343c862333b7c9163857b77e30551710ccc3a803323f5cd4eb5317cd2e6a24bfb77727e1c64d0ac47beea1cb35e5f2ff6024c06f2f391fee76f2e69537673fc0124e48e4e2242e84d8affee6803ce6edf3a954d2c54562b8b76a4edd91e24a8640afe67255605849053b60f558b43ddb9f8a04e987d15f6292962d10ad8f7b47188d12d1c9090c0fe8710dc3937c6939496884bde0bea979839837c61be4df5662c724610c7fcb4631a0a2083417be6a20f4eed094e2145bc72a83a6e147a655c481dcc906e63adc0244d95b6085fc096fbcce81eeb0497f48bb5ef827c0893e331795e3b301dc9f3a91dba9fbc838e044e2ad9859f1dc67e9bcc375442b4eb59714b5ebba87ac9a79c99ce74f8bc75740ddcce46c4b408b91dd7d4ad26b0fb1a4ab874f5504c40e7363838d22aec45c10d3cc2e233124a5cd8344249edf388e37ba43598f2c2cf56d444bcee04a335b154dfa3ca694db481cbaa59514098ce6e0e4138c0a543efafeda4aecc022c824259a06c3d57a70ea15a5dfc822449a27f58f9ef842dcbb636ce293684e1b331cd821594a12634e5594410b6c5e2306dc8bbe62c8b0f49f2f699a59efb14d3cad399f74ed893e1eb43fd770fd61e0c58e5d8cbc9435f4ad0892681a30df4885927130432186ad4be41f6fb7cfe660e23c5e55f60789b3e97c3b622599938b36bd1c0bcf6fdb7e4ee44c92b6a86ca2470bcdb8bab8df6079382ca314bf3a8b3c4286518c356018fd6f6fcdd9be9ad9c228f29135544e723a898f483e9d9ee843e75acb3feac447973d12461fee3d984f3b4f31645faea56852d356c96cd73a6f185e8cd56731e83fea145a2bf0c15adc634dd9e2ffc799b59a0712eb4d2618680c7493f50a9bbf3f7bde1025cd44afdaf4a8c42c9254b1b34aa8559e1cee9bde7b4da0fb3cb2289418110620e505b793b91f422fcf53adda8f7c96d55e26244e075d9a70004642712eac377ce18f88f2c8581694b8f621707dab6d292179b2a95aec5ad6e409d78253dcc05eccdb45683dfffb9c629afcfb0654725d650e4a283fd98e47f37aa9309e2933cc0393625dd81d4a02f9d5082644de02b6472d5d3aae110747e4f756973fdfce8ea5f997e30b11ebd50b45f6889d227d87d9184cbc6ed40e96def8b9236763c9999e21bfc1a74457ffe5e0dc2b16876fe04c2e0f0f47012a767a7ac18d71a7fd65f8647a7e1ae2d4d255492a18aa81d17d390e381b1722bc3c38bccea9d5e73231d0c6e1a96ccb47079e36c994e94af9a318d67b6408bb602a91d8e9ec6499deed0b51a9ae31d9774a1bef4c1de0e7a324545b2af9870cd733c2195c5ecde386d298c33d492937497ea5f0e05c377a4d755dea9d96c61fe82cf6299eb34b857217a2c6733fed64f5dac5f95a0ef2294eca844b96ceb5163363a31c58c88428152663ab0a2b310b1a9e9027ca8cc0db6dff528f9a421fa826a86acb4fd1d79c1ae6123c9e685ba66f5ff109fdff2497b1a50c2e4e7b4662fa11fbaa305a960ca70ff98e5290a8c3a27b4a3cf1705c6df4290fa64f3259fdede7a81cfde4214230dfb9efb20049e905833b5d48923c8ce2f8a104946fb3356154519d950998677c56c8b2c80471a6117b142e26c0345cdf0634e356d80c3be12f4ab89eb41dddcf98188ead2ff420eed3fd9287322f24c62b21f430d5f9b8592ce1cdc946616111c91c667006e47992fe2d5a2aad82f8dd1af3c1b8ba5326220645885cc94e8b2b76cbff7e161e994c0cb9e489b8a5662e9d420913af34433f5bab10ac72c5eeb9249f3c102e1762e862c13cc882d20be16834e54dcc323ea89a133f451b70087a8dcdc5b518eef087a571b570a7966f1c49bfcdc70ac05034d1dcc56edc2c0f57d1aaf16718c67d162ba330aa61a2875f90e2935752bff1ec28a79ead1ac18e70a833946ca6a15d8765e1a62aef46bed232eae89dbec278297b396cf611448c5fd4b36b95cdc54e3394c63b9b0969d6488ff1c700b390e7226f99a945306c6504958cd43cd3d63910a4324bb662a0e5db1622d90ce00e50ce7112193872aab5cee0b8d6fd42f26c2fb87fdf99062169c0be75c85109d4e209dc8a640fed3ec71ef3de8878b3d1729ff118f50f8a33361c6f707f6011454c5d744989ec1beb644fcf99cb2e7c3cd20e6f1656e07c3566c4de68593bcba0ee9f7bd2e272c3d47a3e03985456f18cafbebbc1de74964becabdf3e9bbb9a10b29bf3b458fd50f19d63a6231cb51cde3df46e4bb6318e81e10ad1674a053c8cfe1e72853fd60e6e642642cb825644d6734afb00329839f22ced734fa1421c4334e20f2ecc8bbc2652004203b3b639fbdcf5fda1423f08c3a1100655e4763b8d8356a151d702124d30fdd87b34ec4d34bbb3639464e44a693690e193329\",\n        \"signing_randomness\": \"4540537cdf98ad35f5bb40da1dd2e0ca2340d3b3cab1693200afa0104fa5206d\",\n        \"sha3_256_hash_of_signature\": \"1ed0076e695200db0b102c351d9f4e86e0d2a28bc9b85a5333673a60f697cee5\"\n    },\n    {\n        \"key_generation_seed\": \"b323d48b567f7effffd47a7c9abf0add5f11141737a8af62b56e042ee498ad6e\",\n        \"sha3_256_hash_of_verification_key\": \"017cde602ef5b05cc7450d45ce69d14aab9f21fa8cef94ea02b81a65c2586ecb\",\n        \"sha3_256_hash_of_signing_key\": \"0a5fe2f570c2b692d0746a5a9b895dec3b701f210a021507c329fc00fd0304d4\",\n        \"message\": \"92d5feef68737ece61c6e0078d77fbae97b0b9235f40b97099c114b1586e107b5ed1308a8a2d20be41af129da2e0b38eaf02faef733c7a1d1a387bc55ef008530abc22697d0465aa3eb71f41ee72add236cea9a25995f3689c5a451e2f03915d96abea10d356d549d68048977587326523ccd71c05fd57bfb3c7a853f535beddeadfb84118f6548860f6ba536277ddd7ab42123e93381a385fa3e6cc023c1458a9f94822d93248f36c48fddc972b5d6494b26658440ffbc23b57363f3d82cce69fee4747a889e85343288d55d30fc54d2d0744744dba9977720e8edd2c0aca1fc51b0c6a3c68bb9bb8da0385db1ca4e9ce660cf7eb2382e5e95d2ae19def904a8651dfae53a4d0dc4d057ab1a506c3bd7e1d1ea3fc4623e7d7b410dcb312f037b7a5fde5e0e604fc33270faf1ffb6ecb3125ddfa5c49f25bbc98238c8ab1b903537cd67238995e81b814280a4ced61513d69a2178086d505f8dd1df7e11ce66ae33d4c982f94231957031a258e0ec745672a57a5ce76d1170111b8882a9eb5388094ebbd53ee9ea1fce4a275f9d7060c8da79018487b452817280c63b01b05efbf897387592e2bb3bb486fae0ab09f46d9f2e176de96c59992c10a14ec16eac36102b1d15541607075e67c842a888c87b268e9809148a323c423220dc31566b62f45cce1e2bc1b3bf43b87c998f00023890bce517271bec16efaa33f11611fde87f197852bc2e7a2b44f8c72a6f79b22f73be0611b81efe09253931545d2453939c46b6797cc5dc5a8f1aa3bd8456eeeb84ee76dbf2ebf32598750ed10670df422c7d7993acc55f657e6e1b3dfa1bd6c1cd55fae97e69d2f8f5af368f7da0a63b4065eb6d8f02b19a34600252fdffdf4ed8de2ea9cd2e74d63a6cef29bf02f92d346ecb9a61081ee5ac811f33aa5792f6a1af570a8b0846f3e6ef38452346dd637b19eca37bd1a6c42b20a5bede9a5de3c9f169d04d8c6cf5376d3404f0c21dead53da6c169f390eed7b5b54dbe47cce0b2ad1179ea8fc80fddc7281bd4fe31b9a26a00444af0b4d40a1b72be37501308906149dc6fc5cf02b6f60aff82b975fc8f146961ebccb4d126add524a9b33bb16f6a83c6f3727a72efa2bac116e493e07b2ca718a63fcac8e9d52a1b61479b4ee52a5ed30fabcea4d01a792a92676721286814f3b0f4e15e23ce0c5d59a0c3eb8573c0a2f66c25f2eb2fcff787324721004979be5eac505dfd39f5538e2c1b2cc12d20c1c5cd87299766361aeddbfff743693081842378744879e6e6371b3ffa9ddf34966fbf8dee91b7edf6eec3e4e2f410cb5351f847646c22ab594046ded63347d04a008fbf6ee9696c638ece73b39a269db239df36443868ad44d26a5c40fc92dffb008e436e5c18907f5b18b5e6c5900b41a9801db070d2db651187a4da7e2647ed3e9b6e9781627eb576bee8334374468760dd3b32985d42945d953d434bfd80d7f7ba537265ffcf27db0da1abdae89bbe94d98bc9ca197e41c0839728f964fe4ce30b8cc43cbdcdd9ccbe06fe99debc6f4024f3f00d43febcd62a1822a6d507337ee79d4517aa486870602d4f1c5368b0eaa1ff6c011a9a953aae58c75bbd3dc78d263a578c75cdb1ab324d71b9a065a9af3dab854189585c68d499ae8db887745e20ad9738705b9d2f5d429f12d6462e5e2ef9ffba53ce2f4e75449d2a7dbc3c818e61dc546175a6e0c10ae631df6b1eae6d134c08466ebf6eb5f8257aa10ef8c6f27f4295f7ebfd450629f3eb4e0f4be247ad7f5e80703b1247a4fc277311d69e5d62e0b0201a805cc4f1f807de99420d563a703493ad35a56b2b2dc237112f5ec21c70bf139a9ead8f7e921f086e001b4c449e42a0e3afcd5bc757040a2865d0e5adaf98e37e6f8a501ff39cef0bc364eecdffd03069b81f5e1978c397862fd56362835c059fcbe4d8e2a957fadd7d05bb195e21ad67b429621e1d6872de2d8bfdc91544f9e6ae8c164a23255ad0e00bcb21456f8fa6ae018f49605736c81a5ac0945e2d965f1493ed5befce512ae93ad91daf6f5a151d6c9856dfddd1f877945d932261ded67ac8231dc3ccd0b04dc1b02079c897601e363ffb9a3bcbbbdb0b0a375e69ee4a7135c094abdc237faa2e5f82d2556290adcf82adba8402c4fc9d0724f15bb87cd7a75a1a7bf826896d8ef63c7a2a3c371756af638706270652c376100ec42fa55196df332820d377760448d3e7adc42e9f5d8a7074bd0fa97433b0e2c501252de6939ab948552663a17dd7ff05430fa76e29f0519d650b86fbb19fbed097143fc242573e3e6fa4bd4a2ef6d9ce6932a066b4f9ff935ba9bc26fc2e5031c20ae30a52970a2df3504576108d5f26517f8577be61e6aa9d192ed62cf36aa641da0d274b1ed5ee864b549154eb4115658e6c60219cc5b2e22c49ce3ba76a85efb549117e1207f6df081d0761421262e352182239f1e34edbea4bcd8fa0027543824dd58a20324fd4cfe943aae5e361c367b22f587e2f9bee841e11875b026f12b9571512f72985f98f6d0c212df36a60975429173e317f6acf72e621f30654a6deaef9e9e455524bf07ffdf44642a1826f734d69f3eef4d52f26c06376c8f71dfb65a24a4c57d74b5976950af3a57b4248909524bec47d858c69041eed34e0ed3b111bbc117ab112bbf947d646ab3b7172f5fb726dbc53ae37956e29f5b6b1e3c90baf4e4fa544ff63815fdf4ac9a2a80ca0e8722383437b9a02f3ac538feda7a6d6c1635d3624a385d846e79e956dce483b89c346c1287a1a7293168d8a885feb6569ebdf3f47f8bbb50aa43941eb20001959af1b9b358aba13fd9bbc596ea42a9774a120af091d544e79c50686c26b4fea396bf1e4c25b8ee4929d75569a5fac521c77b\",\n        \"signing_randomness\": \"627ef60168ef6c8efd1cefb403dee572635e57fe9504c647a4f9da5bbd5b029b\",\n        \"sha3_256_hash_of_signature\": \"7f733c8ebb42840623ee7e516cfda8898cb89d4372e4abfc7fcd1c592f84381e\"\n    },\n    {\n        \"key_generation_seed\": \"c1cf3107ea9b283419e27dc563ecce950bea78c048a3f49fb42128819959e51c\",\n        \"sha3_256_hash_of_verification_key\": \"4ad012bc9a3098a1c05d94c41db9cfc344c2e87f18b047a50b3139d3098f89b5\",\n        \"sha3_256_hash_of_signing_key\": \"5cfe77a8860455ae39d889981827f5037e12b99a1a2c55aaa6c15bb580c2af96\",\n        \"message\": \"7f704cef1c510bc2cae9b70fd248c656226bd5686d366528f0d0befc0a8761ec640cd2da7979de5eebdf6127f29abb8607f8a3d3be05be25aace7fef3063df28e22a522fff0b6ff6a0c61f79b02a408e8e1c775ab80be6841e9f8a9d030ae5518e3ea8a4e31e416e087d47919593598fd58122a9e601a57ef02de183d56921811ae2253628125c24f93c84361c5ec99e7b16962bd96ca190c68f3aa9dd60ce3aa7610589813b4fb77a4688308d9bc72cbe918583e298e03ab95fc500209c14abeb3a43baa92dcb11cb523c4d17eb9c6697b56c8b61eda05bf5789166f839291cfe2997b7dd462eda69b0615f2ad82aac0a32f4b30fe8725849c144a9c07799d6ce9d293c25d8302161757b8c8c8d07032d914ea7dac275919a1dfa0d3348ec07fdc70266975722763ef85ec4af9e14288c9659907526566bb3f2dd5dafc0d422568ca3ae52486d3f2c18b667e5622ba7e52c56bf00f82af2108cb4949a09179544f30758b7fb98c49ea160720991b14e2858d648f0585ad1bb1d08294f029bfe936154e9d328df2e054004fc5c29070df9ee50dcd0981d2bfb3aa7d6f637c4ce457c0c66d27e2670107a2b85d1f026bd970ef3fb7e32c60218d5e43a06d9cd26289a937b4fbad2a831425728f3d0d30c6c602af4b14411e9b3c7cf0b4d630614a9e03ac30ba2b024d496da984d08854f1366012c2400a5c8268c2b126dea5aeba0de7c92be0af08ca22e02604a753702bdcd642bbfa0cc91bd8375657a957306a76b6f139621481b6f15cb57bee128954d30f552661f906d8ab42cf260f30f88993bb40c9679385f5c4639888973361216df3c60c57d9b250f64b7634c94dda3fd122713fd2405a7b71f476c263a781dce271e7d0665e45dcb27f7293de57312396c58c40e268f57ed856f536c8feb4b0060488de3c25949d2b7e64207576641b34920d04b46766aa2978d9352c2769d49f8599f3d0439c928532e0ee428a3773fa4d68e6052335c6d93368e321d750d296799faf87b82c640a6e995d18dda002887f141db8ece2584da2fddf848d38357d585cd619b1625a70a5d333561d6de856ed9908d1e377ef7be03b326594808be58f7fb3939e939b73f11dab3e572dba41d43a046b8d2bb521728222d5a77dc886ac6f328d9a531118156d791d64f5df8ff8be8dca32eabc3cb259b0f72b021ceb4db36a6cd2fd149437b251f81f7588ae921456bef1a79fe83447d80caddbf20895667ca0e493a4731eec901e03f66de284400a5558922ad53d4e0ff7bc6c61640ade0274c63d94e96bf6c642b790823109f53c3c27130a1ee38d448239187f5009373be328af866a9b8dd1bb735e8002296043c6ff641a432709148c707b900ecf46555d77644565d5998c096756f79b6f0e20850b8bf0528e78bf5fb4859bd655227873d289cce47feda8414d09ed7e8d380fc4d580c7f44b01521e829e7b0cb2d2f345c517b65e2d476687ec9a4c160a3ac0b01cbaa588644d799b125910812790f06c1ecb1f1e64d5ccf92ae5e8147c98b0cfad5626bab5115844198e8c2ac1df9a208fcd2d2891f4a29009f5b36d8e31383811a9493cf8e143b5ac8a14d48119cc16d2c6bf6826fc47d4b782ffc76b64401b8249777e32c1298606553dacf386a22809b599924a635796a1aec3cd8568064852e54c95ad887d7afe837f6ff676f69ee6288879f6d96193ad94a0418bbba2eed5355876f2c3497448a5f8f3f83b136703d9a38fbb62784cc233df448a5e88eb5f81a0be97a16fd4caba1d87a4bfb08e002eba548f662d496a1478bb7c26c69ca4c100aa6872a4945d703ca812bdba53ac86010aa1d2c53f29e46ad095936ff50db8805df4b08c9580aeece3a6ddd828e7b5d4dabcaf112a6e35ab3c28a6ddc4d98ad1063c2ed72caa50086e6b72090cc1f2afebec6751f27ef51dd8557e53d928535d82a220f62ba0645e3c2618f3424ea1a339a138c9b8e26b14bc32d1736a4193c0c72cc402c3eab58817335c1424bd6f38cfe16338611118b4100e4038d07dca041c72e485c5290f0dde601565dae9cdf657a4c7839d3ade72986af396e767430125786e219bc5736f16fef66b4014e5961cfb4cfec4cb2a32205a92dbf1399e2710395ba1240d48277c120526cd9e2352f7d04d89cc2754379ce80a2cd1ac765718b8ba61ebb8bc6d0d407022e7ac672065fc8503bf5bc4138520cae233ea997463d7c9e00bbd852f12ec17c6f1db1914446aa21e156d210094b699b4117b31eae6386dc0de1f55ccec09aa1eb38cde4602598d452732c5ef8b07c477e3e2dd470737eaa7357e2e8b74c31a117b519bdcef79b6b044148a10468e38b5a6b7b10d74c6130a60a268ed73dc9a25ed68af354758fa3f57ed3558da654caca7150a8e4449d0ef640184a7a33d00ba765b01c442e88d9b4257b93904ace04375679bfd8271a03073e34c4a1c0437c4009a9590cb98d0b5581dc83407f04a22c9b0246de38e1a13f9b1191493818783950548be562f940240cdecd4a50c94e406b1bae04b50a3a19e7923183e3fd356238c45ae6559193e0e846df0fc6878be6c963aa8c3508dc31f766a4b29c78d749c89985ab8f580dbdf7993a2261cc4bbe489c3bbb38c46739bd2516d3c64a93f10cf559db6a0ea3bafee8b43f696a5288c66509a57c642bbeafb40f4cd0649b4ce25b6fb2ef5529b73556051213bb39cc4f1dc8004b1588c8de836699c66ced567998523ad3ac303d9e13617ce6c1d2fc4c35b22a24504c51f64155f24d91d0e8785b40912b3dcedede71a6933b36bb514fdd1d3d843aaacf2c1e79a5216622c20036c9c999dac3a5a2d43fac3b23119927806f497b4048f561a2276fda0302423147d35579dd4411416f0f59273429ac0464ac49b230e29dc124115d18a045663d228bfdac9f57b0c5b4\",\n        \"signing_randomness\": \"e1425191d9b51a40f04e93babc2c98cd6a21745a48bdf5745bba964527075185\",\n        \"sha3_256_hash_of_signature\": \"69f9c46eaac6408cbd9b727f90ec0c71e31d77509f1ecf6a9e305da2b15bb339\"\n    },\n    {\n        \"key_generation_seed\": \"a50fc40f0d9efa5d254943dc599f7dcc2f6d197a4d2666d5d69cfaccda560817\",\n        \"sha3_256_hash_of_verification_key\": \"a363fda8ab50e3c28a60bbbec1c422c4c027e7035ba07a863ae753093a7f6e8a\",\n        \"sha3_256_hash_of_signing_key\": \"e5e8a386296ee78096458b3648181dba7efe749866839b75ebec34736f5e01d8\",\n        \"message\": \"2e086fa0c4582e0c6ccb020f86a6107475985160bed201760d6489cb05b8d21452c81bd5d317f8857703daba24e968f3164c82a4a9751dd88742b72141734dc0b4a77cbe2ae1c287a396a2f5804519456cf1eae273a5c6361f52c35edce5ed7388d61d01ac040676522c9fd7b02a7deafdcb4169867efb69792210a7069287c5dc958d0953c36f84d9a26989dd3b726be8b94b41dcba1b5374123f55a6dbd6360698551c27d16baafbb0ecbe116b44f11425da45d7fe8aba91697d83b6896a06a7888c97a91406b81b3a5bc8b68a984750893114b4011b9c8beba6f5c2d7d9f2c7a27030555633a0f90e30753a04b1958141af7c1b95ba208da36f729673d20da0a83f913bec8049f8cd032d9f9dd94b2086c61643ab2cffddb2b9be0af996d642b7a0a31ce0eec8c61b343aba980fcdace9ced7be4c9048b356d41002eee0433428846ba4220efb7f493ff57b0c706282eee448cf7da9b17b32d0eb0016983175469aa5bba53489ec56ba3a92a70fda2390e3a5d8c038f496e7c3180c6971a39491eac10d828d44b3de2be64569b907005783e62710b9ad8eb8c9af4b04993d40d1ebf165efdec748fe9f6b334da6a30c568bcbad095998a47242ca16803fe1720fcab85233ad76ebde102a5d93ab98460494bc886bb04c05ae89e157967747f8c050b33cca52ed5e59050965523ec5c4eaf94cf2f2ee80c35aeedd14e65d937c92855d03fc76abaad57a21a42420819ebb9aeb65f031f9c4ba0ac2ea27289e941db89669a0620797091aea3ebfc2ac354e94d27894f444ff9e604c8bdf7d6c00df0e7fe9827171010445e737d0a5867636e3488eaacccfcbac1030c0dfab639ab45c5ac5435e2c5b8244e58c3a6bac81eea408020bfec66ef55fddc618083ed737f4dd3bb65474487caddf3aa2720a6931fc69533b6491dfc7e6e5fabf8103d05f870bfefddefa20822a68a710b517065bd2478ce080e5dea09effba3a136c1bc9d7d8088f736c363b30e2af2a6f2395ea8161cb64079340fa642c7763e3bf0623c968a16263cdfdf1b8334e427955e20c1ebce8c8cb136da8d002d8a9e5da3b1f56668c1c59e20dc3be026a43f40910d3a2b601d9d3ea2bf6d2c2781f976ba840fc986c8af0df84b8b0fb291d1310039d6914f8f7cc6b26cc33af94150253e8eb410344a64344a5a0c06e0f3aa23c68617c6f4659df79285782c89bea3091083a069ef8f048371cfa054de45e32c19a44db5d435bc8fef5570b68d80d5bf5dc06da13c36e3aea341ca9fe20047ac30683aa9d862306534ec93e79eff79fe22e3ba15e2ba3f59f7b8b9314dce31095d3015710c2927b54ba6f46d3981975229eed16c9b17813801c7d3cb3604de9b7a4f18c2f91b2b50c1f43e87198afbac718935db9cb96d9fe048d969635cb9f4dca659ab1612a698ce45336b8d9ff5468301bf05d04b3558d66e88de88427fe87e65d36d3c29fa3fb126f1f294e9bb391ee427001c34126c6622905514ce153682754d7fb1c985ae4da600aada1593a0a214332b310620b1b4e95bcbfd6eb8a241cbe848bab37462224994e0d2f3f4b521dca4a9a5ab10bee741c5919907afd2552d4aa300addf67cec2862420c8d1d8dfff60fdbe2d4a8d03c92e23bdb3400f5390ee4b141c5843b1e2c07c9afdbc70e3fc08e2840ebf3b0e5296e1ee44d12e68240fdf063c07bebf01c08586e8153068c1adc744a7b54f53b0fec3c752da9f6f989a1afea4adf1ad6ae926cabe4e0cb2cd864412daee377de559a38047f31e834a6ce56d4041ba709945f07e514f96d783f32b0efcc8b889faf2b6d217246ba7c07b687e028f23d2409bbc12d6ec0d94ad9697bab6395b7070b6feb2e907a119209c9b7d86af953ba7d2ea63982bcd794a5bac69407bb7cec5e027833b17420f146ae08f4b753bef6ca0922f3294cd2a670127f9d2a2ca78a30f62056a425cbb7074c9a55135bd06ce677abdf33b420f66cfdbe9461bfdf385a97439b3431cd29decd9b5e59ec3adaae879a4e8d5e28ca13e73fcdba51c828de271207a5deab373b1b6677a29acb87cbb01f10cd2c090ee66d472e8db61615a5ecb84a7ff0988dd0df9831bf43d732a12ec8cd50a86add12a5a2ea765744b05f73725ab8704eccb08bd74517f21054e58903481e7a724f7ff24c43d6cd23de84cd69c9e464e67003903c3858a6724247eb929716e170e2d2739aae10b88bc3fb8ffa849e385b4113e78c24de1673fc7e7285e6e3744f3843ac7be7ec16bf74215694ce467a2e859dd4facab86250fece28e0a6a31dd529d08566a6389b85c310c28a8dabbcca9cd6a631ef0473abfd6846d8326561cc9cb8181c1593d0f15efb8129af9e838af518477ce361640169d9731fc139881d452773f21a3e79e514ddaa513d7b9f3399c0c57d21eaa00d44a7f031b79cac9fc304e936e75a0cf8d204a6cc3c0fa7d037dd8acc3a33cf5718061fcd57ebd06a607fe0bb0204e687b2a17b1ff47da357b51a753076cb89422098d4f880f831842957e648c54adbfcc0e488a95581e709b5a5a129da7ec5b00ac9b18b80533f2dd1bd0f475a61db18fc0c4ea655f602b207b572234230c831b26cecb7bc3284797c4bed5a977c3bfbeafea3dbfc4257d4c2c5bb8689830ee157f3b5aa1eac09cfce0555880a074aeb86062a8ace19acdc1a25f8d0e454f50f119d12e707d103f3c1a502d4e358d563e53554395b5d386ad49363978afbca2f8b673a693acef70d1db4ceaa8fa580160924d4f18119be46c71e09fdee45efb14a74db1c688e99e24cb6025e73a3e7f0f7ea9c485274d2b6cf9784cbe39e388f9ccf1e2e8dbfa6db43355391a369def645f815424253abd0b6de9c0a0af156d9a4eb7474a2e5937f008134debc9fc7e54812967fcf5bce28fb5cd43f1aa240ba2e9cedd6f350d556db1658868091e6034d7e1ee5c6645d0a345d46c42e23c6821c360f5acd13f589\",\n        \"signing_randomness\": \"6601d5036d7237da65053579c4fa739ed41e174bd433f3f0946f691fda702000\",\n        \"sha3_256_hash_of_signature\": \"098dd8208b78f470587de3fb620023295dc385d8edf9103e0a9024463f0f40a3\"\n    },\n    {\n        \"key_generation_seed\": \"4c0f0ef1ca8073a562d5414584edf268913d53d5fb39fa639e02e900891ea82c\",\n        \"sha3_256_hash_of_verification_key\": \"47662d6b7e0538c46fb19a8498742b1c93121557a6672dda42bcb58bbcde05ae\",\n        \"sha3_256_hash_of_signing_key\": \"598c4e8b846f65e5a7b84a90cdb5edeb3ac28f205bdb45e73e6f38860d2cd19a\",\n        \"message\": \"5180b7de9a84f651da10d334009b3d65582f3912d329fbad4ae39a9eec78943338c29db4f49ef41e3c50dabbb530e99113440383f20d5a3a8ae279a6201a0c84b003f6717c709c21ae893b6e412d87f8e0cee5a89e60a14ce975a4d42e4f43f4710fc9fa29e9b2afa93441ef5570123aa88aff009e2507a3e60a79cda25652e3ac3ac0c10a816bc04739b6fc758ff9ac467879bb67f270e4eab43f10a633e5932b8d6dcf23814de8643407b17b5e2a91b340f7bf6882db694de4dee4c480ce037b9f9a220acdce84b03746f307a6026531d712c0630e7de3add3a8516ba602d2463e3478008b3252b658fea54de41265b5c81e4e913ea0e2a63309497abf961ec40ac374adc0ff3c6fae9bfac5cc2df475885b0bc636702828489183cde1a2934f2d63828ad1f2b8cfaffa53151b0ffae6224df54c2ac47cc8844b76222c2a3b6e132071150049b6e46aa75dea28c13477980315fb64ce500bf0c6f633ae621d65b331ba96cfac162dd7897b8505257e228cb621bba9176a7afb3a2cc20d7804ddb3aae4b87ffafd3c8dc541d05624db02bd62491067ec1cdf73147014febcfa5b561756d5e7a13b88d1e7b2c0375e1d0de71ed20ca9cc4e6dacdc579f1ab024aae2a0bec9004e5dd81c046f00a2a4cb767c4eb240d205278cb863d1a61def16635c6a84c2406288410fa4b73b21077d8f7a4075a1ddca3d0d334725151e434bda80d3e73593338b07958d27337e32cde0010dfe5e58b99eb27a97dbd1c5e6f9a552a02726aad5a4aa63edc336d83e5870dbd514193367af2274804628b4eedfda3b2a155694e89f5a6798c5d6e036159c1f00d8dfb03d41940e775974b11c3fe4456e07b127ccb44e6fd6b2918f57a6523d7f77f32478d9f1bb539846793d4284e2907830e5ea76054802a266c85b122a389eaf4700629036716e2869c0fc9440856d562711e903a1853bc68582a95344b612e5cbc7c5b2aee23cce4161a75829b2048742fbd65abfe2397cc7d66023de34df4f2df8540cce9781ed6482d29ca4e906716c8cc9596b158eb51bab8c2e00253d6589a99b3d20fb494834b42bbffb80e7b0441e356b541f83877736985f6330ea459c007ce8bf18d84e78e36482d581dc7df97528ce15f68e604b4de62422b3aa76f3e7e5b33a49cba9d89fcf50deb65ee45173795393a50fd4c60cf6becba7e733513537d13f89fcf1c4d6437de0eae608fb11d68b9adc0c3a19a3565f6d62ba81a326ec334b239b212b87320c03a75c58dc8f828c4195ed9d7acddce493123e235d098e9dc60f5d3a625e1ff66f245e9977f9630a40d26e3afb6676f5122a88ce5507bd825757d9ccd53fe574fd0e6e728da355403ad664ffdeaaf636256fadc3283d6f15b297f79216833cf2c745c4c5e17d03260a69178f2216168bf8f00c9889e1e35540254f150c587a884cdfc9e5f7d379be474356c06943e416eb0697a1ae989ab4872d0bdf436d9ffaafec1631c9939fcecb84db2846f12ca395f506687b4a5638085bc6ef58fe8e2abe9f8d51f272ee855e2db84a89d348dd66950b8f43939db897c519fa302594fd1fbd6b6e94ca8ff63a7949432dc2d35c60803a570b1dac95ee0a60c62fd18b3319601ad29a156400d392dc9a14ff50af6752c1f6edc2acb7ecca71097b6e82227de429f1a29c5e38abea1c74de06e6788cb1790ae9f0e8ab35afe60b001f45971d42949263aa62519b0d630281a4c5788d5591b1ef5a003c58987e8665701e5b1c6063f93533094e96820f918c354903775ceb6675c4ce9cf940c4beb8845b4f5e1f642bf505821e5a23122e2d1adb82a63ad18cd1e4775a96ca9ef9493d75ff784a2d4a99f54dc3f87828bdff4b3a3d98fa5a29b62a85caaffbace4592a81bfaa5b8bae6606ad25a92a43140690a6003aa2d617fc707a53ec9d868e33596e098773942d798263f58fe5a1b23046cfa136ea35203b90bea2c5f0aaeb5ea8c24b8b8cba14cdee28f45d0278f193228484bcc7e08a75d0064d605d674aca9019a0a9aaecd6ac672cb8410fee4192e6dca7855fbb1c584cf288bacb40707d7e6f8ba2956f6d099f52bc7b0ad72b5a3ffc03c7b47086330244ea5d393c6b9f256fd82d5cb9436a469acc3f8fc237146895be148749f82d39b7ba4ce47715bb393a96ab471665529ab9e9958b12396c1ba7529dbf289184ff0f635c2ba9df301036c869d52d993463222b70ba778e81c8dc668de41c0356eef5c39f1bd42398bff30f959e115c6b386e73f0fe28a2665bd463c781da1c46d6d4ea284b152c8c12426dc9cc467809bfda6fbfbc0bb4793babbf6ad564d57ae9f5e2b7f651d6ed980f8b1174a126cc58b23c32ba73f5031b3fcabfe7bc360aae412d799cc14d8b252d9f9ec9005b7fca04a88cc8ae9f7aefca94137003d5764faa3c7c45670585c84f74c4ebd1f5ad1f97ea093595592fb90e3cab01f98f06e114f13de67cdc36f3ffb01c3d51ea643c25a3f6aa2c57690e42b98583d925ac7b06a349782a1d33c06bd05a82a7aa3dd679326d948d74a1861926b45db78d36070d3087aa9c5f4f42ca57ee9ce7035bd88a85ce1107c8e07e5ba3a62ecf012bc75fbf97c4c72331b55ab9a6effd78869f1cd3f330526f262f7dfcfa2b084b61e90772d5fce8f038c0f72554467192cc8a27f1f53c8714da1864815974b00991f466648478c5f9bf036dc4083d72e8d144ab10fd32408da7677729347febc79e48e7b87388d9b59aefc84b5b3b589fd91863811a6436ed76b43e657f7ee03eb796285a4d93be9aaad1e1a1e81687e42ec83f3dd059b78bb7f8ec70e6c831db5e90c6b3aa511f36507dbc8e7a77df0f5b9ef03bfefe9471de7c7fbe67b9922260d3703d95a5bfcbcb62d830e20c23c6cfddc210e47cb575957d8c3514a2ed4561c738928f210057896eaeb1499d4ddc70f44e30661e780aaf5c0a20c8553f40d7d3ff6d120511c1073510d04f2de544121ab851e98f666906367c21302eefb1aaa723f6a531c454eea0be7d50\",\n        \"signing_randomness\": \"fb391e8f6b6c6cf4e8e20bcbe3ac3e06718ee1e191951b5fc97a74eb1a51126c\",\n        \"sha3_256_hash_of_signature\": \"46955dbab8672ec664818613d82c3e30ad0e67c6dfed43b5efb62b53b7e0cb8e\"\n    },\n    {\n        \"key_generation_seed\": \"5ba8ad9b66c93cde7e7e616a97fed8aa91bc7235fb4db086cb4021877780c6b4\",\n        \"sha3_256_hash_of_verification_key\": \"1a44dab0c38a7bf802730e1946ef8fcb0fdb89dbf72bdac9929981e64ccdf665\",\n        \"sha3_256_hash_of_signing_key\": \"48e83fab2ed0c0de0d4904d7da869cc7c84960f389d75bcd336b13f07b101245\",\n        \"message\": \"99b5b6fecdb52897a1958c5c3d1fc2f20b7d045f551856ea3cb441bad9089c64cb9489db6b63e0655afc4c2fa73c7417ff1b80b9c7a1d659687d2c415b3a909ca30e96849d4bcec6a9a6a4311204936ba972086b2394d86e840770d01550caa6ad85adc0ec851d2b3808e4a0e9830b99a70f6204ed4dbcb6759f6228126039607ad7ed8eafeea28d1c3e25a46bc18af7e01f55fad8244f15de36f890416aa09548554338972c5f88fd9357792819e51a63d0b872b0a4d21ea3597405b52793d50c6cd70b52841d53484bcd3ead004cef0a6bc16ce74cb8ad0848000d8c5158dc16625112d1d85d17a3c1c8bbdaea42c3a43e9930724655592116c4c6d0b8b223337ee4e754541a09d898f7fed71c3785b7f8721653986c525bc00f15590616437d11f9722824dfde7e9615f1fb8488e5327e4d8baf5f79d1ff5e808d154951ad87638910607b03faac3a61fe9916ba65ffd16986deb4169bd24a72b1c8168fe569f3c81f93f3ebdd21d4e806f79fb28550912e9afffb52e97860c4dc0d042c56e1bb71c28b68e416874ec7043306a29bd1f4b9a3e612a6778315e2c2b850d6eab9ff1905030fada250caf308735393c191134f3c493d00b5695775d82adb9f2abdad17fc41fbd7a1defe337c2f8adf69154cc0862fbd43035295b1a9c80b88fa8cf75b36ca08868f881966b41fb3e239eb1db9cb51606a0a9ebcd552b2f4e819e2c30abdeccdde88d2d2f82f3585b5143943c929591d20cef559cd2baf2dc7fe03c9e4e084e8890fce64a4aa9f13d5eb945ad7e3cc53e01fcdc192b97adc1f98d9e773a0177e8d97405808ebf48bf17b689bfc15f4c515e38a855a9266230c9085adc9a6ddaed93d80c3f38bc516695d202b4e89da5b4ebc43788c848f8c4a72f79f37f857edc105f13e4ececfd09302711bc1993f5308b8f32ab96fb8ec3f5ea0531dafd0ab3451f81f47e62c593c8d3e3beee79db06909576bf876145856f5f716caa436c98eab28c5b85bc2e4d7e1653ecbb8bb6b5bd6981dc72d7f63ba06cac8197eccdc72c1481db44724a3c21f7fc60661f11fdde8122da5d0b1d72a29952618b373423a892875e6ad24d0916109ed8e9a9a8d9a68acec4bb5eeb0d00eaea72d8d5a76c2a42f18cbdb3d336b71c70ac73d39d7eb04533453779a1f210bb4fc056b4728afdfcf46675c6ac76f750626d642e3ab117e5d6740154759a46c27d51306587650e1039054b876849882e7dfd807bd03e69021e337dd69d9b097722c6d2aeb517d773d2f7d84d69dabe1a1d6422ea1766c0fe7b8dd4d7283f2985d96d91a132b8ba03ad85f7d56095773222d0afdc5a192d29f3bb0c2539a1c99db4e711b6ace3febd58e45e99c9f5a04cecbb309d50397f28c48bb9cc9f9cf75a52253b634ec47216a1fd6358af26501821864569879be1736b0ad242ab5b8ed16a7ea0989ed4cae3567afe1f8209a028db46db0270b3bc06668a9bf5e1bc1061babba00ec4ec37280379139d19bc6072cc6b7d260a816cb82f9bc90897be3025475af12191690f9f400a914789a860155efd2d606a15895378c827f2a4ff700303962fd96db2dcd2d213eebb2460f0b753bc6902da81d44c983dd027f1171d40a2039997241e09ae5b6165b4d55a8e4c79671a8b8bdefef2c21f81c541a5719deb939f866b61be250af371cea7b7525094c904698d412737f7781bd779365f122ee627d9cd4a68da9d5be1b0431998aacf824cdd864c7365c01cd5a5f480b6ac1e5fead8ffe40d87c1f9fce81867157242285c5e76cf9667919c29a67ca0c0a61d7819d9ee6b792250a358f5691ccd80578f15288f3d5d6d7dd6dfa351fcf8df0223f7d1da1b76711fbe0e7fabd30377660ace7b23acf03abc1d973248cdd0897773fb74e20481ebd3e52657c9296b980905ad29271ec128513284f1b78f38634bf84cb80791a0c5649177791cdab87769d57b626f78a03435c758a207f52bd2a1f31e34b6a122b8701cd9fe478c57cf3535b6d51eb46caf794bd69363d5a56adde6945e9788f1e1dfd045bfbd0a68834b13d6b9ec4ea9c860eea0e9ac19c2de14ffbd6b57e5992b08943ea0283813f3f15e4f928b8d0f13de6863990f5c77f130c97d8be12571edcec7deec4b6ef4835f136da45da70a11f9192478fd8b4846c507410fd11668365b05252e68cb2c972acf50156e369b83bb85e62e4bd4d84c2e9ff41a5844d5d88aaae7ded852daa0ae5c14a5dce64c7e236e9b7b60f5b5ad4d953a2d842a52929491be3555ab8df534cad56dbbb86b28a8a86b7bd9ad1c58c87b8a089324e00fde32f8186b2b74523a22904c18ade02c3e965f94624f8df57e750ea6335e3eba705294b76cd6ada33d90fec1f48de7ba9dc7d8d60a53d2563964188874810c45736c57efbc3a3ceee7238aee5281882a554f2143bdf89ed4bd819c08239c187c12a8b6e763434b92c26fdd658b350f51775c60cbab7a2cb120db8ce8ae9aaf6af559f8cade84c4820209cbd27cc09230b22f013a0e4cf8041e4a789a5d20be9914a624ab957318848addb39c9748c8922c54327048a2e46523bfb22487538363459035ba49858f85a469957df1f4831bb7ffa0564c53233b99b596f5356089949306dedd6b904433d25c4854a80590b964df6b0703b4f9628d6b9a4d3f0a4096e9a0b46d6b32f66d563baf688add18de001da62e33c503a4387ce0920ba5d1e8b69c38e3745b19f8d8b6ca5e1ac6de90edb25fc32df04f0849d769fbed3f8169ea1d2252619a2304e055370b4443cd23e56d4934f9f3fc92f1c1eec626657e6a89c1394e56061af8ece3e2a17fbaaa4d579a99a7998632a6ae2683ddffffd27a27c8815511855f09adff7bc627a7a5c95fe57fa3ef81f494fa7ea6e6ca2d14775a25beaf1b5a3e35ecd4a306545d597e4e44301c3d1648f0a7d841f2f76fe59c6eafa3f5b58907fc4e642ecd28d16a71ee3d295f1de12de1485b9cebeb2cc6c9ac051d3d42b6a1a068533a7680a98d015b09c5b819ffc61688d441c1b7fd71180c4423e64ee940917c7dfaa19f3f51cb5b38d1b2b7c81d10e7c\",\n        \"signing_randomness\": \"e5580b2a7b9d30906d0d6d9b88ddbd8b5a3ea18e231cd8e8b05b35bd03a24695\",\n        \"sha3_256_hash_of_signature\": \"aa90178fbdd8c00b733ae8987781bed28ebbf9474f3b3f00a9dc373cf593e449\"\n    },\n    {\n        \"key_generation_seed\": \"25d957b9bf68326d2efec93da464f43e3df16dd6571ceb1ab68bd58e87734a51\",\n        \"sha3_256_hash_of_verification_key\": \"c49c47d2286ecefacf1f7d642df907f748b1549841982dbf182889c4d1d30c08\",\n        \"sha3_256_hash_of_signing_key\": \"bd5416a304284bc092ad7c8326944b5228d065856db4d47572c692b075623ee2\",\n        \"message\": \"e3b57b208352a820f622a694b7c3f6f297239ef0a069615dc664c02f1822bba48e11e37bd9749c98facefffb0fe1792a386be10ca7b98cc874c68c36f5096d3718dc93e0734d6d6f913e3b958dc1fd1424818c9437b0fd59728ed46a79fb52c737a1d1d26f04ebac279a7ff6a971e2b69576b712d9224ea18fb9bf4e613a8935f3b36a073b01f37bdc0b77981c8f2804e93c395419352b85c8a32dd77d41da9bf3ecb914173e80dd1fc06e8ff5bf0e4f7424849a15eb7faf7de77456ebb64d10dc10fec6254070c7df387397137372ea3a53dfda7da13414af2df16c1e38c5c70a5f5f44f725d622049256bb15dc04a8d846a1a0dae7e765a7f00c498f1d0b2893b8405be4a43fb7e97881069a49134a2a847184b82eb5a690d87baf2f579619ee19a3d7a7c7eea72d6e3fccf0a8092bb8d3c6b551f27e63e762a30b4a4df2dbc4d119139ae1b135d06ff827846901577700935e0011b65461c2ef9a7b71eea33c8ca4519c7bcfb557c5e1d42d9243f2dc34057f5e0ccb9a457fc34dcb10d9b47f6ec3b9550d3ae4fd593dfa3e28c6cca1ff1ebc9d98da8db869f8c80bdbf8ad4684acb6a779ca9d0a106f26da17043773862681c5dd2deb1bca2ca48d4fbb4bb7c1f765dca3a1d991d890b9a8751ceaff543997fae5b128ab2ef22b3be94499dfd9d8e78fb4c82ca8d296b0415e84ca8b5f2024455b5decc8b4ccdc7bc4ee06b4f0c66e6748fbd07e3a3bc5b4b6889c40dc4a97ae3eb43c3914def976efe3bfd84a093bd69102d7b37c89b458a55b98a1974a13a7685d26e9d816c79585bcfc1042c2af88534a9fe8b0a6c8c44355a6d606f902db40d5490264bf0f352c27355633cb095268d5b8bec985a62d84b2323fe814053f05dedc22029d2998bd0bcb255c162c4bc03f60e3580ac3ae86c37850110e9a1bcbd75f64a0dd60b941e2f57da9d72498b3ea8324eea53da3895585ed2942b9140f260895dc6a1131a4c3ad2b64028bb8c0fd67e1be4c07f808b47daef306fd9578025f9c639660075837b2c95473f7f860d6ea2c53f4ba677a2345cf212c7757bb94f1a4f76d4e96625f6fe051b8246d1b7611bf6fe325ffff8514d2f9a3453f0e77ae8b958ab5b567e541f156c6f4d315b4c3c547d59bbd0d7403e2e6a49b9e7d3fdba338ada41875ceb03830a846a1fb266c0f1228aad2b76a2e3404278dbe482907206fa66487ad2c999867f870c8cb7a70b83437e14b9e893bf6b391dad75e84588e882246d161799adea63adf1ad706c0a3b76bae595d84b21ae9da30bbc0856987f2c2c543d977747b8cbd5a613b92804ecc5284ed23650e9dafb4b76d63f069710897334f18ea6b0cbf99cd590a78e3b050e1bb24c86d6323a17106f0cae3f30b01e4eb3db1b5f3a4771a880c8ac06bcd5a82d4103d0452fd7b54834c1cf8595dd77f82d4ad9ebc1cfd0c9a8cc787e10aa4d1688474208b69ff7ad4da6986e5f62a34ac3093e0fb1efe8ae3a96f6aae09b0e8f6e7a2b65c7387999cecca43cc33f026dc19bbfd867c48127cff579d1d71aff0c4a0e20f9fdfd599a6169df1b85f6051e02290df6f5ede4f29bb6f0c8f806d6850c6534ecddccd75bb8e4a097c70445585740f822e5cebb0e19eac82bb78ebde2ca60a810ac6c54119fd6427da8a0155ef48653515a919b299a306fd3c62b505a6911db2b56ca2f296e487ba02c546eca2783ade8e46a8c78eb1f3d7c04bb24548f92383e475ce6e572d8de1bfa9b3e35d9bd6c79547b592c95693750010a3d22cbb31aa5a4abe94897831b1ed9287631f006a735c36bc84a8c87497eea4873801a733f35b328c7d2ccbe4a41c193d22f972571ba7630b33080793498cc85e6eea1c412914459da175a6db8658d0bd7a823fab286edc20c785c40bfd539924a24af4e3d37bd781353677c76d4672098f5bdd17017012571d9afda05a40ab56998e40f5e359c43dfe32ca10a45bf08f67d128c24b1acc03cbac46ba6ca5a532c105e91e0c77ed59fb534aeecd68735a4978177bb5a656b9f83b202bb604d61a24574c16656e512c0a4cc6f597b3268573e10539d1ba775ed83bb680bb9115011c6ad43fbb66fb37c467249060a1586df27b2cefa65265ccb9051e468000ccae24f08ba941a8180a64bb624f146c8ec562363b32c369f62997c4b1375dd7de64725a598529244273caf8398913c6fc01522683cf1f9f965c491abe7a554f0019514ed98d75eb8bb8565f77c195f629f98163494b4aa2674f92a41dcb67edd1d818a5b98993d0b1198bb6bedabbb486bc6fde039433e842bac568a5b4eacc028cc2544b57d8883848dddee2e967ea85a6102bd0abdda41c3d78447bee1d4949449abaa9b3377e8cedcf04a500fd1a6916e26983e64b5e96fef87b32a060444d374409262453cb1376c349a8b5d1767b1e2991a1a6044e0f58831bd11f12159675d215d7eaa74807c995fe22017e30482db8a4b09ca7800822c75c92ff649fc0728f5a1d44efe7d0ff147274152d5f2f60342c8f5f951d8c95f83c1d54613a182d9dca68f54fd55047f1f90cfecc04d733dfa82cff2618f29a4db4f7e1e59dead58ca65d07cc90c25f804a895d6a82f9375451cc55506d276fbf783f7d4d53b9bfb83dbe4a8771afe21ac543983d68034badc980f9434527f9edaa2e228646fdf75b44899e749cf4c9e5b345222385a4424382603ad6efc24c56e769028f4394f2f6220a9b390d395e412498e57a08bad927b8bd5d76e18e8feb457fcbd3248d218236b07783e57fbfa03c292a9f5719e6aef2eea3fab2caeed5442e89bffb236cb13db2cf9c35a38c338c377c475daf45f8ea822f9aaac13425fbd43d3dd9229367f0b3687d7e82ac5ec2fc7cdb69c99a4eb1b8e45465c6a53f16ac0c4e0c970b8c732af515c09eaf25596f64a04ae4621037b8841fd2b1bbcb310ea23e122b0b9ab96d8f7702952d0e96e4cf79c2a30df0091acda91479ee2979b0054997c48f6a0e909bc52a943459af25553969eb31ce7685369a7fb014561b4697b8bce220983136e5eb2303cca4eadd4c6cc74ea2fe69d448ae6ed953a80363dded5591b27a1ea956df081ce99aa59dfc789d9d8fae952b0737099d467d\",\n        \"signing_randomness\": \"6db925e3f0c18153a88305735b7b63fbfbbafda43d53f6db06b50acff0d75bcc\",\n        \"sha3_256_hash_of_signature\": \"20618e11ceaa1dc2dbd5f6e0b3373fcb3c84ca39c6c5a475d7581dbd14a1cdfb\"\n    },\n    {\n        \"key_generation_seed\": \"24f0cd3b05d964f82d3702bf0a613139808d49283286294be57e13a983c3c961\",\n        \"sha3_256_hash_of_verification_key\": \"fd25bc085c31489f12e4ae7ae4cd90d28b1c92e04644cd3e6784c3c0f92b403f\",\n        \"sha3_256_hash_of_signing_key\": \"c859646dff683329cf4e0e72878d415708cefda8ecad22deb30bb803b671a192\",\n        \"message\": \"89d960d04a3df6984276a3d17d59af9e72b25418c8797170fa701a672c5835ceaa22dc35470d038c6acc5082d2ae329f36697c91cbb1f9e42da59a654462bf19e04352192778cb050db6f4a656f6ab0bd9641ca8ce6c1ef8b020a3d9fd9dff772f38926458bda6e6072456e506ae464785399ad7b498afd4c211f09d0c722fbd9e20890cddc8c6eb9ee75390e6d76d0672fa64d8b97c65cca46dd1f542b6d6014f035d2817c4b9430ac8dc318cf8642ab34f4c8d71fc0e3b1fc961e94b6a84622876250fdc21987777360784d9a58f35e1c9b71f30561ed6854ee9b112e7b20ce064272213bd1a46d0d19e5efafaac7addf4d7b7a519d689398eaf1e67e64ace8e5e89756377e1fe458d04e3df7f6680f8b69815680276acdbee6c8e1aa909ec56994f3ef3b65fbefdbc29aeb0ea906274e838cac36a0607716fbc2b8da6150a4ef39e1cd9cca72915007723c5d2442f7133258234d18a257da2c13e53b47dc6abc2d607b98e351fcecee8ba8886821985bb3a7bd02429ecdc5a27eb04d01dadce88a324ae44f567593fbf730c284414056fa33ce90a6d6f146dbb1635bd26b4f883d4948da47216c70d2aa58ceb3979523c6a4f2f7ea455a97c7adb6c43685d63bd4c51d7ddcb81a06b9bac31a7b255b94052d686128d234bcb63ce713028451b18b981b83da1246281fc3bd2b06c741cf71979daefdfa0fd06fba3722ff7bcb2821fba964fbe9f6467fe583c06d3889a40360a7aa03358175ee75eb8fd1d3368c30b5691776c163764db924fba2362cc9572f642cdd2b11b40fa2683a529ec2100dededeaa70a1e639a71d6a96ad31f70a00fb63875d0fd5c21e56ae57b6e74eecd2ef34bb3e20be5a1f9f1f54955a18b4e4e4b9119973deb76a2a603fb6410a350667ece5c1c147dd00b07a88a7d0e86aa2d747a867ad90ba6660c7a0432e20849ef642a20cf5a20af7e34d139b39dd65c65b36750f17f0b9f1db06cc6e16f10eb289f567b647454a581604f381d66371238ab785585a4da2d00810ef6851a6009025fcadfb77ff7996ba6b091fe4130733466b29fed46554febc2ad291dd966bef4d79a9e04014d3003c95696e8bc39892ad32db6d6ad22d33e931bc87f78114bbbd97b334bcea676f9e9db23c0485ec06d8f37f070c143117b1bea49f06e1a2423d98c12883d32d29103f7699646e7091d393b21a260703e17380a1bd85452702c3af7df73ae7856a1c066013014de62c3c817dd74c44aa436a71490e7bdc6b8b74bf61711fdcc541ad7dc49cf4c3ec154879e048ff30df25065b5641367cbd3bba19606a9a27a64055d5d3b538fc88eda66ff9f26e619dcba696866de54a8dc8580b5b28144f952ffc6dc543e98cc9fd7f4538135c0f4deb4bf892266dcc48a4d1ddcf407be4fdf2a5afe4a0105a20ce2b3d9f48d608de2315240875f1fed696c49cd8d4a78ad26f51b3c804949c536ce35c3963dc1d238516b3f2d297f5c9939a946a0170e185c75087f37acf907f9e3f87a2b15cf81c7ecbf2165f0f3962d11e9c6a7845ecef432ce9e1fbe74c77ea1057d79cb595d47a8ddc1d911c6b97af76d91f3515081b95ced16275decdedced9ac790d73739e35973834503133510dbe39201f9b5c618231184b9dbafaa7ed6623e8bc492170812444db62d4f01925dc4f821c0896a746b4453e93ee51844b311b0a0a51601477bff651eb5ee331227a2e9e49f593eb2988e449e750e990a8a89906efab00e0955c81b6aeb160313007b481c40908130597626935389e47afcb0a20146f0c7b29b567e95d59ced7fa8023a2d69c89443a11e7150a03d09ee6b0f74358141d48e9bcaa3ee081c7d8f8c223f4d48efb3df8a4e287fc5b90b4fd251cb616687ed09ab1a06c42eb9d6a578d72e99d499882d216ddb3f35b0a33d9f2d3d4a700161a5c3b5a6729f197479e78009794aa1be3c25e0b9142613ad2ea508acaef5eee33dacf60cb7a16ab38d9f3cafd2150081b63a3a6ca0163a25fe81206a37a0874fd55fa3068b4c1b25e6325fa56646ee5f3431d33d0bc691c134ab306b0bd2d1087f4d898a529dae08b97683fe2eb8abc9095d67b79cff0e77404c1f7ff316c3cecbab77c710fbf961008047af22805d77eff79f815b21d142f517da2199f6627ad9fd85aa24e9b7f40c7796207a82901c7b5a3a42369a9bcebc24ece13a3ed064e4e748bee2890bb21b8e4845362be9aee46e25418f7ca38ed087e46e24f12012a1312bc623aaba6ed227cef116a3c2130b4b837ac77d86f8ca3553ba0cf5ad45e9b4e4e55059f1d4675291581d7cc9e5839212afcfa897e90cb601cb33a4d2241a5ed5925f6416be5a43d4767fa04f701076ad5ed5ece2d09b8daf11b00fedd2aa2e748cbcbe365031394ef823951ebc52b3e4c79d79234c16575910c29a35eb67c624f7504eeca3921f461d7f95eee39638c402481df7b59310c4554450789dfb28ed1e485c0018512eb05f14dc7a3db5c0606f9e28420d76b8f8534d2ae31aa01e90a20e248a7fb3b72ea859031c67f7b2b043d38f7183165a42ab28c6308608c530a9ca98f82c133bbc313fddd2109838e970dc9989ec14df781a518f6cb56dbedfc1e381250c64f95d0be5f37515437673425374d44811f4406ee2b5130334ba555839e61ae623d283c77247d2ef8b22ed138a526f7e41dfd41fc69a2839b77b51c6fd96d97d3ef8359e8725ba1afa80278fb3ba9c697f7e2bbcc5d3f0f2e61bfcf542d3160ede02cd6295fcc55865e7890342572499347df80ec073a91e00193baf804b884e9cf5c43269824d4caf7eef49fabd8bdc5496d190263c96dbcd287681c19b90c34635ffbdfeafe0601bbb7514fd84896a22895e9b21faeea372696e350f13959fc23533f3e8c34b17b595f3c935e37220aaf644f3a565114c34c7b85f1a3e465470166a62b13adb00a2bcd5a9a3ecd59fb772f09dd6a6e2ad12fd54ec62cface0022f2ffe3eb62db0f4d0f0f9d1fd6f3f11d76da868d2c1c4124915de19eacffcdb31f7ca018b6976260ca1bb2c4fcd6b9958f096313b608e208d875ea5a1fa89916d0367edc4f8890e93f1e660aff16ea79d1e583007e693bf06c172105b3dc24117dd921fb60d3ac0d2e5c89fef17087d885a0794e496e3cbea333cf72a507788efe\",\n        \"signing_randomness\": \"d82adc2be24134146c202bb857089860941df6b4cc218d016a3257520bcb61ca\",\n        \"sha3_256_hash_of_signature\": \"c1868aad502967dfc6fdd5259e7b7f60b4b977330481466f80dc45057426e71b\"\n    },\n    {\n        \"key_generation_seed\": \"5ef2732b63a1cbd2cc239ea6fed62f7feb3102715a5bafd8c83aac33702faccf\",\n        \"sha3_256_hash_of_verification_key\": \"ac48c3bf7f59c30736001116e54c97857efdae4324f0bdb12b2a34357db4495b\",\n        \"sha3_256_hash_of_signing_key\": \"17c9e6501e1cf9c876b6a400f88dbe6c9ceca2b3cba1b5f2389d42b5f68a670a\",\n        \"message\": \"8337940ee74590eb25e52e78e8563a09cd2d45f650f48775e3e61f9e3509cc8eb7e983310d0185359f66bd80e0da1e45a6beb53acebb9030e310e81a576d0f80c64fce1d1fd77dca27b7c6e02b0cc26edbf496ad2e3ce8484e988e56bb28153587d7ecb02fd8882545e7bf79cc9966a7fede93f7e9451bc48fdbb481673d1c4135f95d68f40f4b4f847345a320fb4d736bf5f9fd347435462dd3a238e4c799e7cee081107e11682c7b558b19177522427f1d269fad81b565be538e8ff2d7193579aee51e50974bdc0b66331b59bf496c87e4f6e143754076db516c9c538410fb38a930cb5ba1e6610441126d01c8eb5f34e2e58424b8b218d9e68c5d8b4f5258eef07ee0aa5475a72ccf363d47d825fa524c16c7b7587c44864da9e4b267f738b87f7e5701147f550cd38774b17de48e6969a0dedf334fa67470419059c4d1607880cb12fa9c0ed23032c7e0f325169eace7daccdd4c2e5097fbba859970d7eac4522c1fea043c9278c1c89fcce95203033b4cea4f9f24b55ba6b79ef88f275310c6e48189efc1eeedab66b56b6bb028726bc463d93d742492841e85d5c837948978d0fadd1c172f8859c802c6be8394a05dada7546ee1cc5bb909d3189088f4fa6d07c573ed7263c081720e701d5d4b027ae54be175536f3bd5e91993cc040311a7d352aa26414cae30d10408ddb44e8c9513f4619e99edc894f963489876b24bb0b91bdc3ee5b78ac0d4046b2e864789c0c779e5af97f8f84f09a26ff74b8bcde66c007970830b70c2a1122dc9845905c3aa7810b40641e8bbb398a23bbef52bedabec7bb54823e64177a73786992dd67d5c007d770938402efbcb3a60281c5706920a9eee4c26c0b251c32b9e1936fdec2928110959e99255508250fd5ba84b4fb314187124072d30fbf2163d36f1480ecc08f7fb8093bfaa72f1914c63533ebb3a57420dc38dc93dd6ae4d197fab790c1efc1b7a2234522e0b408d0648c7ae782f2f08cb70b96cd76b5089af1ef4ba3a4c2faac363a4dc1c6c421f6ae1e9b67461eb02f36c25e763f1a2b73ceed4dceddce619cb313d124ce6f7ac986d6bc344e630f22cb654c1286fbc0ee01c968dadd1edad744c8bc828cf5f316336a5883166ed000ff98d6ce2ceae7d3e40bbc5714f71ba9e25e1506d644fb2de2fe190d327accca79d9b6d9db505cf1853e98f30e9ba5e568ed83e2567c936a64420c5d8f07ac4f65f38c28e88dd7b5209a600aeb81a6d2afa4faaefdafd9b7fd3ad7f49462cd577204184f9d44a45e2a909373ced24ec0ee56bf2e6675c506eda67b1e6dab75cbf1822e20e7a8a81a7729b42a6d67a1dd457fcd19b62f048ab97b3d694254e5c051fd2daf3d12ad627ec37c22117bdee9eaa290d11d56baff0de1037eba908fa03e2f869fa2b27936669306e8e70a0a4910a123f202797bf1c8fe47178bb1e8e8d7ab1c01f30f5e779b2bc99902df15185fed4c865997ab72254162d00858e0908ea95a9acd0fce72e571c7a381cc33e06a27fe6a5922775ee82c973cc3ca8a05717608f8703946c9a89854d627744da475defc1390dc44fcc3a23c47aa8af17240eb1a1a00a062d258d471f31333d0356243dc1cecfc559378b4395f01a970ea4074d5666b44d49ef291ed15930dada66765b165cb8331cfe549c38cd0672f534be60f4d9b4c125ffe747670513b5744676899b256b992e15106b99b794db3950582816612144649210751f3d0dfd5b25cd393e724f7fdef00756d0c8540e8891e592507599b06edfa6ebfe543084ac81858f5eb02d8f5eb8a72184851e8589a3ac6dfe1cdcf286723fc4c1202765fa4f783ee58c627ed494c7149bca6a4ddb420827cdca82dc42515beaf46ce9d9ed524bd00ebd3094f770b1e1dd09fc431e4c244d2305619dae208e65ef385ea92f5a79f12b99afdaea79c9d8d319944ac6cbbe3f1290ec6b87d97785e059e6871fdf239bc404021cb52064b88eb4cb3fb6a871b0f76c12d7b8c5e8fe0a65024ab5b25f4c67b6d15c22b0005b754cf7cbec898b49f4326f1ae4034e5f5a446a96ce08083d48525a3661e10c996dd22dc34fe570a4c8817d10d750fc5c2ed0c24c7cbcba5cd1b2680dbaa3315fbf2ba7457abeedc96b5d111110d4678ea5c7851d25f258926b0b028365799e940a6e17bb03cb332fbc6d713dea7108fc6268c8d33e7a578c94ff75be808c15ff7884f092c0e309f1af99b1a7314fa0f32c8d8e32b3e9d92c9c8ff6b8fbb99111529c4be3a2a4f62884373d0903180b4deabe613de5cf19415dfba7f9a46297ae2f21d7ea420b41f628fd8deba55207606539d11791623cb325f1e18c98aac27283bfab2408f4fd6cc58ec9e306643ba1c0c77d84b3930263e5a76a1ce94f3d7721f0098d54e6c990c3aff69b6a0d82c853ea2af2d3d2b3e96dad59ff873171b55d16ca9a7c68dad2e918174d264919ddcb4b9d01ce622d56c599bf60711c74315c918a7bb97b9513937afb6a652da68b6b0b34e316d7be9f5c282a5e8773c892782eff220667a6a54069c37b88eb1ce676aaecf2015e59fb7af4d30c4625dd8de4805f505e83c877cd61d2a0ba65b32b0dbdfbacfc88ca43e4ddf7a1a4517dce83b7b8acf8dcaad28284039747935865daf8dcfca29fb676ce2eba2c509cd75588fa5e58cefd0694626c9bb31c3afc372ed313c9bb3adc398e89dbdb108dda63f9380ebf9da17b378451634682f9823e209bf10e39f884ed270413152025cdbf4875c121b1e83e12c044453ffda6d8ca2c240ad522577c6898ab6f2abe1fe77f860939408cd193e605f87ff2248fa163ac2fc0f39bfc38503b23f5441e0e364caaab890073266b3b51217661f5df41c0ba925bb425ab3dd7b6a3675b7d60d0290131ead53a4eab0c66baa83f2fb77e74c3c123aba7731a3f62fab8eab2a96e8bbc911e501cd23a088e7887a469284e0b5c27b5cbc1de2b6938cf1af58a47fe78141306cb76e8f2b73620bc4549db6826d2d72873885f6c5311eb5b9462bb4631d314dfb9c836c6f4d9eec6818940c04689cc4d8d11ed9869355617861340e722b2be78197746e2759aaa8d68d1965888e89b6b0f5bf51f94e586b2cb8708f4cdb520bf31ddccfb7cb69e29a7ae8aab12c11f431de40fb9e82eb5f2b6ba1f9757f1487b63255fa69a755601c2fe17cd1892d5a6799c35d05098dc133bdd71318667d47c4671\",\n        \"signing_randomness\": \"a4fe2f6f39d216be4b44712577c349cd8c58a9ea3c9d73926603f8d86c4b6c4c\",\n        \"sha3_256_hash_of_signature\": \"d9a42e18a617ff6475996044b8cd1aaf09b97278fa43a5769558b2289aa025e5\"\n    },\n    {\n        \"key_generation_seed\": \"6a27b1666ab6fc4483d14cf84ede49fedfe05bb24e008ae8a01c52d83b8d40fe\",\n        \"sha3_256_hash_of_verification_key\": \"00522e2973d622f03ca25b36c20afcc812713200aef3561fed37fe131e203b14\",\n        \"sha3_256_hash_of_signing_key\": \"47bbab33932020ff2e61ddd4f58b79942f34d2bd1ba3940c37c4bb621c669d5a\",\n        \"message\": \"62215248e1f3afb19849f758d742f8afab595040c4dc520d603c9a80fa9cf2e97e4f4bd7350551fb667d606bdc31a45d88836cd376785c01f9007d47df95c1f4d1e30a927a13525409d91c9f5145c0b86d3b44e933ca81e4ed9559ac17940c61eb85b2d26d2c47924ab80acbaa3d9b1c8855c13ee45f5c8047c161aaa5321839a01783b21a5ee90cf91b8285c4779465b7a89de3d74d482080f68eb2d8b47429d5475356c50a92b3acbdea5786f4d6c2a304ab500490f84fd1d0f21acbea325d62d2657f3889b6f591a7f63d8633c061cb14b8266a7fe17642dedf1d08d9ffe369126cd780d9f99fc6262b5befcfef35d33498cb2cffe55f2f8d567ea8687dfc6e7d49a61fdbfe768c1d11bf5b3b18ca52225b096490c97cb9a0b3b2ca0762dcc36b60f7d26fcaa4e38b1f3a6279d889323010d9cb0a97fc488e09b06237e6eb0166465c2cbc2b9cd06f155759b6c93ca0cd3178845e0f3a2d20a68757aaf3c4e74545494462ccf28f6f51ec0fdff4f1e6d98fc5b63bff068fa7be1764bcf14497e71e424c9389c5dcf8c5ce1dcd40b82f1d75c3c3970da433a92a04de958766ac5eb3645f4d21882f7071383af8dffd6cdd91b549f143dcf59fed6674441eeb03d5013e90adccbd7e3da115535ac855dbaab7f51d70630dc00009e726a16deadb12047d85906cff315c73ee7d4e24c9067e3b772f3dcc44c25c7cb8622fdd7b8ecf5e9c877838d71d500f864a662619b1478f8ab4db2dd09a111acc99abe737ddbca06e88926c4e73b5f5d21eafc4b11938feeea5f8d5a4c616a342b54c9ce371817aa2409a55a3237be85a50f05b33d35aa86a62e85a01cf34ee7dc840a26fa1b8c6b307817c062d9a2e7163a3b036874d2abf6531a772d4031fdcd59ca79fbf442cb9155f90148dc3b723778e699c6985634185c3ffdb966adb80a3d1308150b12964142498466506bc0742783c27bd3472a5cb45021de066c28143ffbc82b5742be51e93bcfde1a61e661b730d8760e108b80c859e4b3a07d483a6a8967e5f01b03ec8b63a20c6a03755c75f419558878a5eb8bb0b2120f183e4becd4a104eb4db62cacf5f9964583815334a25bdb75724e549211699ac3bc9b2b5f58f1fb33429905df81c9422f8b84e95a7c36dec6ae9b48d4f502d8ab59b69e9d112693578d143a3f111ef00844303950f65ddeea6e30f1286de16546f90c4364a5c09755af3fecb13983c418b2fe4ac17bdda57e4d597e8bdccbfbe4082c446fc920e5145bbafc67fadd9799cd8c7714510da579516ed39b3e22de319977fc77a9ca61ae8252795d11724aaa866c1ffdbcbc1ff91af1b8713248864a4e8b9c59dd12863245f5048110dede7fe31ff9836715886c37e9642dbd6c668ba7ab8c2b706cdd58586eb7227b5768c3509c1f66493468859e275700ea38ba69064179f6036d7b50bd232b61c9b9659492894c0057dbfb80329a76cdc57b2a89bbb910483301ca0bf6aec7d5ddf86644ff52f48ff6c7cd00406cacbc09aa251708baf3276a52be2c7b42fb6a9036c318529ca98940769a67dcd532c0000afb5fc63ad2303e94e09d2cb40ccbe47faa1dd22ecf528179ad40fd4bfd43717864149243d61ca255344c52743200ed8385a7ca6cca24cf967d23d07dc2a3f9ad5f3240f4f022a6c6cd281b6c492e8d144a2f4641957ecc65b32c9f74bb468524ff58f0f3da2f5a56742896cc8f99088574264f857dc67cf04c4b63c6a08fc534229ca8ba616cd504f969ea6e3c98a517355f98a9e884062805b77623239074206e01ad2f3fc9fe9ff8254a5d3525c3b2f0a692803500c967a2e18511ef5b8845dc4b0dee9338c38c4b1b8b84ee63923250eb6f9e9c272617c7895bd538a6f34d3557812bbbfab2b8fa6eb5e95b9bce33ad3185cd90dd536a68639022c079b5ca7748864d37d45fa6780a45aa991f28bc0d3bf371ee2ff0c913cea6db38e4a278a4840ea1f255f8e83b6b6c5e260a49d727aa42095a88cb8120b51dafd764e690102f7fa07cea2eb86ac613e7be2f498f5767b622d04e8a6f272976fb058c3334cf8caad1d180e3456c210763c974e431cbc3e25ead8b9ff9243628d5b08d92cbf1d5df29a85b1a04d2999b3c669227b33610121d543cf4a978f8d9365c0ff8affa92b07fc8c8604a0f357f3c669445685b6a29898301a5afbe10ace8d64a47009c8741d7ce82e9900643900a3b92a26fe5f24886c06ae0918c3f2523c320699c799cbf72f0ddb08a0f1f63d6dc2f021c78a9d44503209190ee4be654663679cfd292292d71fc4ba6233a196ef9e95cb965852773404b2622b565bd91fca6747aaf7f4eaded7bd3bb53645381b687ae04b8d8a9bef1095eeb39a0beb4ea89badb4655a1afc7eecb7da0d670c192297cce0b31bbefebfe94c84603ba8c0b7cc73159ff59c01a037cf2c866dc40d88432cd6c2f1989351a4e41343cacf7bf2c2b395c863709d6ec1dbab2af514cc771df14df095dea8284be2b65097d8e6f72ef3936595384afc0026956e819f1657c901b92644e9d6d32d0d95549729b2cb3d5efac9c42a5f284abc3bf5cca5b08161b09d9a48ffb2996c3d4383d65b8d1f7fc3248cbe84b9c05464f4a76efa005fec342edd56959cd26cb0dae1b61b0493a4b68eb3d6335bbc280508f09d84e0c5f4ef520d92cd34d69e5bab76df5d2b72cb41a298d370ebeefcd6c1904b956458bda581efa6b3654be402ac3a971603f23f2b543c5beeda5f018543b72c146cf04680bcea31b4a238460329e2bc12f14c804fda3494c15452223d2477c9c8a497d04eaae7de09d7d7a879d3a5dba565ae1a38f15e69c18838c487c0fbad44a068c42efb7d3f5ef488f91c42f25ac564751f0efe0ece7d98bb1b3d0fc42c9756f4b8f9daf1fd0d414391155285c8daeaaf380bd07e43570f14e9a47a87bc733f1e676233f17bfb71aae464aed68487392d339ae064ae27bd57f8695f493ae56ca96c0615bda8da37133dd13c2b21da189a7329773fd8d51381bc118645440b28fa4f402ef84c4091d3a0bc4d206bdcf9007f5de9aa1e6cf7f6058ac6b69fbc703e908c4221f9065147766e48f54be4b076406e2f9ed19c1be982e636fd02dc26267c3ed989e6ad1cce62e7b988fa7c1831e5126111a4c3c29c38a1f96ccb3a04132175fa46f73c634ac6ec741b135645abf1dcea18571cf9a539f5cc935bc6d32beb1c7b8b3b5a141146ebc12dbbcc17bb4900cf0b95ebfaa52190afc6d8933cafc9\",\n        \"signing_randomness\": \"257dc9807e7f9b6bef97dfaf0f83be41ef3cf3a97ff5618ce44d1360ef2389f9\",\n        \"sha3_256_hash_of_signature\": \"f6441dfe3523b2fc9191bde5b37596f3e57d4131f8cd86011c668637e04149b0\"\n    },\n    {\n        \"key_generation_seed\": \"2a855572e7e2add2888022bdb585b61577a75a31aa8acede59acb27eeb2936ae\",\n        \"sha3_256_hash_of_verification_key\": \"f4c8cd2c1f03a68f45343b92254ddd253031fad1a96aa18f0fea5cafe9d0ffa7\",\n        \"sha3_256_hash_of_signing_key\": \"87e5d8e540c41e81dc735d70cc4fa839f771f7af8e8509ea24627708d0933206\",\n        \"message\": \"954511394b9d10e1ba162861802a717e24ee42a346c9ed280c88e267a41ec09d6d73b6076e7e30257bf265b71a0b6e0cf408f02ba9078811be94d0f38559e9985463fc9671d182286cc4f18cabcaee1a3e5abdbc384fb27911168b54a387171c0524489fdf512e4d8d2f65050cfe7405d8df63a79c6e42a76f4538907eff4dc5870095241523f56fe8e389ebf1a1cc47ddb9f0188513d5259be257bda5be7381f22392cdc2406e0f2448a80f3824f2670f61920c667499de899f0f6b397381a2de66255e061ab92cd864de75c9db7cbab9fe76ac38e0ab3389530b4004055268b289b40d79b32e5ebcc74353510bd1627e2d5dd0be7d3dfd04138f6e3ee7526133dc70490612eaa5024be6fbefab24e1e83d8941a113d8b871f3dbc3011869174888cb7a265d7de9ab99b999c19af9b442ebdc904fedab52cf40b787aab35626417c5291f2eb892f43e698a8c65cbb6442a4832f33920fb2dbfc50b8e996fb227f2ff294c385a330957d2fada9f86839235ea79ecde6d9d94fbe7c79a38d40b9a8f241f53b921107ff1c72624c9600ec04dfa1160f1fa9e5d986a5a363e9ce8627276da73f5db47e4b90328884cfe93194cffa6fa680f77886e4a7a0fdaf13a7ddff6984b8855e1f58235babfd5106338fe2b075d4f10a9fb3d3c5f829b7c61b02b34e9bde6e62cbcc3ac9f467a6ca170eb43e632ebdbf6847f781e2469b4740fdb83da34ce34a286e3b363a72cbb13eb66ce1de35d8fd77dbedbf45c44dcd16e6b58a1699694d9006947c8c20810e85e3ebf8fb2c68b967743642d86556ab6958e545ab83ec24b96f2b4bb99cc8890c3c1e0fecce26ce09b6d99000694f870af9f642374ff0bbf61efc7cd5aaf5667fc3fe5745dfaf7f13fed70fe070ea4c09cb1a92d8b7f0dfd4b4a4b7dcf4ca6a97043bcef6346f1570f37b0eb48db8d15c8a82ed69b0c7833d6c830414c111c987471e84d2ceb5bd973dca34acd3a65d7b1a502368941935435b78b8f2b74c2bef127d96651247bdbe68eb7e466b9ea2a64a13c375103d7c8f7d30a13cbe184bd1ebb19f3274e645f5c7b82efdf09233d8ad146dc0715266963fd3cce6f8cdec20743bf1b7f57c101ac24c64d568923203e1a6af03a700f5a401ec4572bba528e284c151f1d108f7563858011fab32b3776cf2b910d7b21180dbe75742032791018258f4d1407c9a213755c5c91205352df919b6f14be056243df6ac2909e52c9a79f6917440667719185f1c5f1aaf40d873ba22956fa0bbad9c35360853333a10a0841d9d2e758a0b1bc187f6bbd31c41b74f9eeef1f7a28bdb7ac3d52fdc6fcb3ef0383a06a61188548963e552716d2bfbd6c2dcde496d06615e86a5cdb76a03bca2822aba85ec6807ebb6918ad2948d193ccf74f4bdaf7090cd4294c1785dcedb6b55886a848284a6a4a88a496800053e84a9f2dbf6b334aace11a5a540626716302e259a64c6316ed543806b3bbfe37563897e83bbefa570312df908c1786df0fcf55069edc336501a5ae9d4bf212d56a9cee811038656912238ae284575ef8de1285b763ae54adf44f91b6dd9e309b7a7a0ab71ec2e4611831b3ce1c9dc85cf907b52df7406b06367e7a43dece72dccc57d268820ea021c27056e3c6b50e7ba7a59b53539a6b7b06b35051e3151c23f3bd3c889b25d0ece1fd0df1aedf657fbb096ca1c861acb0158501ea1aefbf6dad11bdc325ac1ced3739a40b7a83458ef4f3453c0f6eabc1a48037809a90480df9dc4ff07daddc58df2733d49a4fa53c2a41e55a4a0167c6d33ba6e752aed3a125dfd6a0322cd235254505d7b3ced7a0dee7eb662acfd30f8b79d1a872998cbcf15cd86e26809e0d2da0324ddc90fd12caf9d8e4eda437fe4e658d47d67c95927c4b5dee965b940ce93e6743917296e10820a7101f8f633c93069e8b569f4625afd4ec61bfe4549fdd06c2290a91ac0fb40cb1f55dc8bc1fe695c73af603840ac0351f5256e00555c984e79a09e58c566d1a117b7e569beb5850fb491fd9b982442b55bdf53832aa65180dcddc2f768b1a1361994de8c25f3608ec853d5982e0afd1f9fa70170fc3589ddaf958dd840b4b502f8e2697d01ad7ac2233f6a16d540ef8d232887d2b4fa727ae2f038a69af3dae69eda8ef6bf1e0b67d811160b75231543ec5a4d0778b7b42fc1dd6732385aa4400450b3caeefdffcf147635cfa4aaa53de4ee3035bc40ce8670016384bb877a86a15b59f3df0c5d624d3d2b23ec46913618c745330a96c715c6f0bd096487e89b917384cc30b3d20a332f1b4056462227e98af9874ff1d18df2a6bf84ae822ee737f9e34ee8c69f23eeb9bf38ed056f499545f405759355c104284a6d08a9efad8fe28288b2084336a6479a6d42404f3e6ff3ad1dfc63c8aae971af11f2699f32f57ad29188492ce07bc1a271035b4d13a686efde5572353283a0f3138f6dc05cc35e5e5057c5c8b9e12b0164c0915adedf40a6e23848fa59adc0e65bdd2120486942f232315fc94b4676751a35aaed2828889864c4cb7dd95a662a475733c2ca8f6997a9c822c6c8b9dc95a8b4c367e613e97d3ec6d6ddc2f81022ec21b3a93244e3bc8c2737a7724a3cbd480b26819eeb2676fd383601d79fa266ed3f9bac2a98ff0109ad7e43e33e108d88c09ba82afcccfe98f50f789109d99dcd0a2c61947544f3666edc621b5d5ecb7088b2430a611bea52be7f5edfc6e2649f5e81f6df72fa9a748bff06af766a60d2b751b23a8aa95cbf733359f7c0cd19b1482a6e6572d1570349c688d78cf8b8c7dd37576dc47a193a2c2797d0af7504dee303823a8b77204ae7b6e91d431979798a7edf435056251d0e3f26b2ca16bfe3422cea0398d30f0a0dc06dc8a93d27d13650e5bfb6ba04c93faf0d7d06f99fe4f1f52a059fbe808179515fda48eca714f0947fe9a98f02d66fb0d80952411cdfceaef6aba16d92b8f1b82db151d7dcd7fb7781ec55f4a86c86011fbb9c5570ee76897e7803036e2fe3cdc2d5ea7a613897f3c69a6ea734e3811bfd15e90d7256a0c0c88ceb54ec6aac151b435cd2a870e4a02087c2b847c75b00b44bb3ca6d4404c3052bd308b8d5f595277592d26f6d5a2193cd4d650bf931fefb9deee61032b29ec0412f38e1cbe025b2891c59574c1450d9e3d8ef27940ef712143f06f38ddb86341a7fc781e0fa8971dad13aa7e93f1858c70a71a40164211ea9f6a41ae90d19032c2ea52c23375ce3c4e59599ecd6855213aea83f8dfc5cc70f58a62e4dca17c09705c0c099b29056592986c03cf5d67074735f2bea\",\n        \"signing_randomness\": \"a697aee697ed8142be668bdf28f92c4d653b3ca0100728c490ff6980ecd15308\",\n        \"sha3_256_hash_of_signature\": \"12c50ba1760eb1b345db8c6708d3831cd0a75539155d4c159bf6d4b9f66e7b09\"\n    },\n    {\n        \"key_generation_seed\": \"7967e9de70a7f95e69371f812c2fbf932cec07ab4c235ae9e8a6799f3f537d36\",\n        \"sha3_256_hash_of_verification_key\": \"2c899b4959d0f65a96102ca530ce36629b1a1a705c9dee9c218025e0d823d478\",\n        \"sha3_256_hash_of_signing_key\": \"3f87cda81be2e7305f46f676f7b6f0cd188cdf0aafeece73a50323ce8d403a52\",\n        \"message\": \"326a4fe723be9363acfc000705a10b6cd8a7b25e99a34b4a354cbd6f50550bed30f6c4208490b4194ab79b24b093fbe132c299df924f2ffcc2cdc6c2c9019eedf4b72d7f0817825bd787135927102e1da041e9a78b501b42dce777a79ace604e57df11775d7b87e75e5b00adac90d1add78cc5ad348c7472eec6e6e06f737e77115a9509a6ae6570f738dc2f21314a7ccb9d44add6e1434cdfe3614bc73a6b468f6691b60f4f2db103289a90c4fb2bf5aaf87826d2beb0880fa64e07e9bd30d4eda00d6bda01d1eb22bcf14ee797a859c9a0d9034e8c5316201af91388c47e1ddf061c9f45e067a5f60b355c98f8734559b8f1b82f47bd9cee0224a1d67d40706333523c34f3582b6c8cb47bf7d0e4fbc7d7cf3dbf21077e664fd59998338f4dd4a423c3a145ee1e994aacc1a48f81a7e9fe106008db93a6626b8c8505043ab864d93ae3972675e69c3825304086aa3419216ccae7f7d5117739e99d8f4a0b658148de33fdaaeb9967ef56677d2028c3b584c5cc1c096f4da16799408b2ee2fc3482ad2f49293cf4097a78492470099bdb90bcb4fe3b245ac8b3c53e05d7609e34770adcc147033a8fade81359ff63c3fb90c5a498c98b7a0e5ee9cf4d287759acda4bfa3965ca85e1d1c1019e7fe6d82e5e66a717f94890277e6db1eaa6f3291fe1bcd7d437094749ff5574b8728e0dc21a143a14e382937efb7ec1b0fb3f6f9c0f547f470e3b436dfc7986f923beaa89583d8978c433e0cb0c4e98516af1ac797c778662455a57fef45ba2c7865c1df5c502edb01c8cc729468091bb96be9da9c298528187867eee9a06141daa15f60cf719de2bd15010550b92a41f12d8f38b54692589aff51a9d5e6047a0d9b707369992251df31341a45b01b05ffed8adee5810824f903ea59f14fd500aedae797f8baeb470c0b14c4eda5c687e4848a85b30a8e8f59c45d4c9f0c65fccb15f4d4209a55722c29b6cb09aecb4e53fa3aa602c56ee3ba6900cc12889e7b87d5ef283af1586764519a30cf60833c82f0ed15e39a8bcad5c6aee9999e63d399c5cea10ae1f53b04858ef7896aa29fa541451fdb685734c39470250545193caf26c9891f7f965904ae10e8566bff9b2f465bbe13d6ea4a79586e68844b9fa68b2f992565c8b0ef5ffdeb5878cc12a0571ca3aea50add29dd06e13741a1ab215bf487be7735d1634332f47e037253054a21e0ad8d8f011334cb5951f833d4d344d632bcab7c373cb7dafe8f3d79e7e13bdb1c6cffa474a9fbb46f5736d55f3466534596ebd22b29107a8fa50c1d0e62f0533e343fee038fc0c3040a6df2d318bbc8420019b1b148d6d1dd2fe428c2fd617ca73f224ef9af9bf6f83cf1006616235471b69dd4eaf9f32529ef3e1dfe6765e61e246b519c702351c9cd66c57065ec78993d793b082e3685eb06f2530b07862277d339a52813c99ebe16c06c4c8f547d9705850e770982e8fa0275a52f430ff2422a115ece46a9202caa0195789532b1444f1507aab2e4303464e499989f21c7d881328f18dbc77d4b9b467cae244a93053c0321dfbf815da28b6ebf483eafbe634e9947bb5383fee3a31bc03a63fcdda5e3e46d5d3184718c348a83975728714351df43baf91787caca346dbb819602f18a4c4fe90c4ce307984bcded89cd2e4aeb66318c10d95afa5be53393feb981c21bb1411bb9c58818bcc141223d66ed5f35f90c05fd4848617220dd72f5e892292ce20aa9a0f9ad54022cbe94d2c86daf3fc66949ac35d8e122b02e2d155e73f4ce24d7e85a5c301dcc173ca8ec090af9dc7f443c983280dda27ed4b9bc71f86e84f7aee39e6a7e9bf5e43920aac858f0f49a06216d9d3984cd2e3575c0fa6ce8a5e28b0f481ccbaab450fabce8a1084ef458dbe257cf09d8116136c2cf1edfa6cce31aed0f1f8278c1c8d9c79846886d48e3fd311c015bf2373f7caa71aa26b011d0df5a843ab53d7e7f0466ccf49c5d4de872ca87b8895101ee0147a3dbd391beed75fc16f65814d56cb29273a5f4e5400fcabf85040505c31d001df0023726e9c1f7c29a37039fdda73b9b99acec3a029f7c0dd61ade7d5e835e1cd605aa8e583bf8dc99285e86cf91f4b4827a0e8956efde2b495a86f85e78b954341cf3afebe8db71c26b9b1ba27b47284aa84e55b1c2afee733ac596a10186d9ab504f33e34a06ca931d7633462b04b9b2b0d4751b0343503bcb2a1893d944fbdb4be63de167348a1588e6551fd9cf2101b0b4cb61422655fbeb50d64cb9e87a23007a39821ec3aba391485347624efc3dfda4a133c537d7cd8c3a549bb6bef9a52d2edf0a8892c6fc3eec3efc3c18741c85bf24cd3b36ca04ee77f654ed5595a0e4b9316ccfe4d2aa6b4a66b06f309337e363c9e39829c8838729f19811093dfbe962246473b7a19faedfdb0193f63eb85ef308cd3be5831f35ced36d9448d0ea8306044f78946079210cf89ff78104bcb2964ce2af9954d53885d7914e4ffa4ac7e9b3d103922fd1ad68c0a4592f885c5fee51d52214e17035e8681086203b79b5eb176679eb3263b44ea7287262dd84bb98f6639b9657ac04e397d69c634a0c1181eca485e467d62631ad2d9afd5ac5b86ed4005fdbb7404b65bbb826f1a2334a481b9cd46e0ce9c414a162e84368089f24149d7d05ea6adf40b25a708357aaa5a28801ff100f69252810188cfc6087507bb5bde1cd43bf72b1b3207ce4f7e65a18e5276613d4beddaf21af7b964ff69965c47cb03846f7ceddd2c5133080fc632a4f0b3495b2d2751727cf7681f28675552df2a0994e425a922bbfcf84189b8c9f43058d691db3166c596f6bc480efde06bdae7b9c2985a1f2f6441520620e193d7b94ab46dba2a1ade44e2b006734e6770f34b0e2122dd7f4eaf045164dea8c2fece7758630384c00a6b528a6ecf07045b2dc0281c936a540904733149bc65b0f57acd9a5e41c2adf83fd6a760b169beebf04644db1314270adf86d01cc2cd580c609e78bbcd9d2694a89f9cb6dd36b9aa2aa5581ff561b5417be2b52f3ef2581e461cb0690782f33862c52590643bece0a6141dc805d8f56c4f64c1bbc49a3ecf1e8827926796e5f9335df47da6d3e4c14795b547116fd1f3351fc55c28b543183fead8df7da4dfbcc38e224901ff7bd83b16631064cac4a37fa632f53f004374aa19861fdca515af91e66186ef804366d5a1b3b4faaa60a0c4b36b972a9579548b4cdace7eb85f1f68a4e4255fd994c1786975e7f6f0ba87d0295de72876bce37146a09edebc0164b9c4911ce41ef4d48130a27651bd0dc315fd622cb6d03759d35756806332658b5b33e768860c1946569aa45130486ad49b\",\n        \"signing_randomness\": \"b289f87e11a5321c883ce48f016495f83ccccafbf4b4d428aa043305ea04dea6\",\n        \"sha3_256_hash_of_signature\": \"9ce9b23764bf24ef83d7caeb3613ac72dc17a9dcb54b8592533e3f21518c194a\"\n    },\n    {\n        \"key_generation_seed\": \"5aba340a8e541568fbef49e77f94cfb4b3a5e9cf14c6755ce6412cf86cf62898\",\n        \"sha3_256_hash_of_verification_key\": \"e5cb43b52572502b1ed6dfaa675b6b0073ef32fc7fd3df5837f25d9c0fff69c6\",\n        \"sha3_256_hash_of_signing_key\": \"7ec80af54ae1cd5fd8694a7e1bd3d731b55f582caebfe0e637419dded220bb78\",\n        \"message\": \"efc63dd588a7230ce08efcfeea534f5a0eb005480ad1d169c386e476715238526e936fea7136e2d8aed60de31cc91dae4e764ce5f93624fa7f72b87562fb6ad8996b5e41fd478af0af8338a7fd9aa250efd2f2d20364e8a88a8642e8e38f38583abf8d3be97f14c3ede66ebf8ebc84385cae646cded8c5ce8f06910ba7fec05d828446d558d6fed766fba347da2e84da247c34266aa31c328804f4e3aaf6acbb0ad50feeccec00d20b3610785b9f1ba06a0badfb42a8f43de3f7bac36057ee0b4d2a15db040a8903f767f7352995c8fc3e06ed1b1322587eee5b31806192e04b09a7b433d08cb2a340942cb75c51e0f8409f907f69c5f8dc316a227942edf7a458974fda76c255ff4f1a85a352cd2cd2a21507e0f37451060d31d0847528b3ed5da3e7168cbd0302f1b03842e63b3dec6fb37357e37fc3cc26721f290726a47ab3d4dd8fd1778fe5133726c240e7b3e398f3d809c6c469680b9efd25dbe890d6936b76a52f97aef3f93872b76506a95685eecdcbce203400d182252471b99b7f4c6ced4cac8faca7682d0df07bc5904aae042479855098cbc41534f0ef17f38f1bc8c272cf72c1ac4a5564dd132130ee676e7d7ec3cabb4e85ac81945c87de08ec60ced3fa0ab3e83c18ae493a851434bfa2c4968b42acccf3609539c62a4e01f8bc159362e15ee91d8aa399d8bd8d67ba1e8fd646eebb4583812293406b05ba5be2b1df9620e6fe3daf8cebd9652bb04494b899f407c7d9ed1c4e77ffade24abe56ad597bd438928e05b0363d6d2685d34d6b51d71012844415c46f13181b146a3af25ae4e8853cc7c7ef6387306c45180a6ef9e97abe1e7d5e10115752c3071b6a213367e8b1a3d1c3703cc1840735315623901d772c61d55ef8c47db10f0eb7582d7a043018dc1363e93f315dd984b8002ea7bf5bed38d3f273276ca577cf99a635cb6ed9d6525520793405be27c86e6effeabb1e5f84a0076bd151cafc59853424de4b3460c673b0820d76e15ee47b6505d2d5c179db92a44042f3631c646d350ea9721b8984660a76018dca5c6bb1223cd03cc844dc9371d32549d9d645f75d2683fdad1df6434bbe43200e506ed2a815fab511172c70f99a85fa3970433e8955b2f9389f23c10141b5779a23b8671eae8b91991b78f635fbe8e627d3e79d91fd1e6e90699640ba3ae8d7e4cf5145f1259cc76ae50b1fa150d8338a9450a5b6b90eec9c94318bc78c9c7715a3eb215aee6443540d211a0556813529023e5a581623cd6d19bef0705a5f69aad4833a57c308144e92899ac5683147cdbd279d5c3a55bbc5e8f8e26a158a3e42f8c5b858909b024b4ba4069e26de66460ff4a7dc92bd54ac244007b6ac6ce07a31a2af3323cb55f07b8f480d279308fe10f2ddb001da6c4aa132b988ad03fb63e0eb06544571f5505cf377a81153d6fbd4fa2b7562074cfaf587ccf28dac84afa58809c0b296e0d2594d3582c28596f5af7500e143be7b49c63d04f49bbfbdf60b024daba5533f945ba90659758e06984921efeef79604059eb808c9fe1bf9bc5351a406fbba7f5d8fc9f891488e537db14b216a0535c9ff7bf8d5c68a2453a8a48e58fa7bf6eb76448d6d0bd05bd4628c4b852a236a11bec0f67118f1267ca42647f6f2303509094c9a7f3a07b2724abd2d9b56b71fa7ac6cdde456ec209be76c419855a5151ec9ebf0e0cf1b86f4e8e81b8173960f8d1c8affed1ac7b818af8e3bc092e2b209d693e80b11ec7da39ca93223e1b47c6127e8ad40a78bdb0ecbfa1f39c84cb9ecdf960abb39884627bc4105c53ee7bca4802b92af60241420cbb36c407f46cc2e953d7e3503cc82287a8d68d0e673e212173d80a12257add5256652188c00590dadcfb7dbb6b35507b853ea5fad4f52e02230cb3d3bbdfc43eb74780583e8dbb851e0257117f4a39a6676586216220c1ca21de16cdfe6e1cc99ea7c989916ad2fed4a8373cfcff02207529bffcb7b7601317450bf430bac9ce111b0fba8d7de6627f863078d8e6286b2d34856426ea90ffd58705444d0dc12d4feead0ffe543811e1ef306f40939922563832d06e6dea7109087ac051a361ea9e755856fd4e51388bc7c40c63e0953c8413ab0cbff70c466e15de5b089d095e8ee8a64e929d26ca3b71ef0b2360aecdfa89284cce08c666f4e0146362f0bb84b87a49fcf2324ebb96dd941f00e2586f7246436eb66b1e04af84482d8ecd2bc8ef9955cbec62afdd754a7f235c7f3c41cd0b36a9024d426b7388d3c33a5a6e858846c0fb0d88ba5798c923f9b43d14a6661c65092d5c5ec0f97d84784fa336ae6ef57c7a5d04804b96d19849ff9074724a5faca538e32c6efaa5209317543159272ce50454fe1e7d068c8f5ff3797a66d5f87758627ab5d40ebe1fb7ce9d69287ae7a5f349a5daabd8a8e7778baa26da0eb237034a3366448280237a165cbb303be6b33c0f11c1e56c50a84384a0f6878f2a99b14cd3b6820abd27d2011e0c37f8439bede65747038a5ff7f00daeda094331523cdb7e10f1063b64a584d3e9f0655268f89dbef3ea3fa4c6e54feebf8f0046c6c811f0767cf6fcc9b3497db05582774047a8dcff6a0c1b5188076e64a9d5693195075f2a05e507a5a523eee4537079f9e5e79210e4af056d6624d45a0eba553ca9bc92171451970102cab57dcd89acebbd7025008325c61145264f42e4d14a76e5c2f1c129d4c054da00501081617d1a27012a6e160750dba73becb5dc05105bfde1f1d0cdc837355844b291b09015fd610628513c1c86ead373730b99fcd4a552fba07163ce9cf6a3d3ac0525593f0648256e8b33fbcf92af58ce26d0f036e11230879dbb789507bceefd2960ea320236a224ea74dd2aaac541664fa3ea9430d4fb09c878169a8af1e7fd4be5e7926cb0b6a352b25f452454474107286edaa145c0a0573361522eacb618dd9c8b32bd1a8a5923f4c698cca0139dc640c1d5d557ce889bb69ce32d85853dfbb0f34da2cf18cc79472906b67f6bacbf287f31de0b9e7a01a356ec9b64653cb922501ea1eda940089ba0f293b667f482e92438805cd6851776cea0920cdefc4062c9b4e51f5aa1d7ff909cc2608b6f28ccf28d574bf67ce80d4ddcce28f2ade0162cb66894b5b2da0eb975cd95ee7fe72fda2736616c8b571fac94bf8c64acd1642d9431118f08a62328d99b2b9d90bbc915db764c4935951a59c369c72060cd9f4273bdca0c295294008c0ac3a149e8ca5e8bf21042f5f21c067147f3bb52b13975026a9df7246afb1d053670982ab316509f2850342913e1322758ed89da02dd79126726b1c5566c1831ccb1d62b3e271875e62cde0df0715d404f95f580b63923f362d416f83fe5ad98eed584717fbc2cb7d1b00101200f4eb4ca5\",\n        \"signing_randomness\": \"72560d4af60a2d3f9f644d3d90b2cf16bfbe93708b9aaba4d5180c1f10ad9679\",\n        \"sha3_256_hash_of_signature\": \"4336fd5277453b321f1df6dbf2450c4e4ad252280641780702ccc7164b2b848d\"\n    },\n    {\n        \"key_generation_seed\": \"df4853f482cc1d0b3a2d71e9eaca064e57c5d100df79bd004ba81b43eacec401\",\n        \"sha3_256_hash_of_verification_key\": \"037e1b782ab5515a3911723bc426bcf20df5056eaa6899eddd7896541ab8109d\",\n        \"sha3_256_hash_of_signing_key\": \"df53fbfc8be782a7bba6db3186b07e170cbf3d4c3a22417d2879228836fc4f79\",\n        \"message\": \"acb414eb55ae5e49107bd0ac5975544f83104f7264495ae0bf0a6d9594c422c16b99469eccdfe8b8000875b469309891ea42586a615d146de64fe59277a61631b2c7f7379cd52fab3871bade120ee9558d1479a91925634578cf14d35df3b5672f8b5f9f956fa9f7489d6e37e207fe556017736f6b147a8cf664d0e0521d94737e18188a1b7c30296ccc9067e7b55d6e0f2fbd875f42fefecac49510e324968b07372deb10a31c585457e0c48879ce44bc78898ecefac7bcee90d0f8925df2b52d5ac81692e0160f8fd5808645498428260f592e29bb90fcb07d0424ec79fb081840cb827caa4a9d562183d10ee41d281e26ce3ec0069c83e1e446ef82e2e30debe3f409e0a9e6d1550e224db15dbdda44341e4ed6f8b8984716ca87233197528547d090058607ca141424a13145f1e896555288c5e2877ab3b51c7f9248d2d56a8521975bc4eae3d009988cbd73c66931bada0725fb8a3448d43e0c7364e9494fc4e295a700e79972e1ffd626d1cbe0199917851638b192ef9f5c03223f2bbd67eb59a5e8baec3db40616938274201dea1ae640f6ee7e047cc4c13f80dc65e3fcb5c62386015f4ef1bfec561e121f9bfa9b2075bc1c4730503fdd5debce8a535eca01b9d5b021c290854b5f3d49effb263dda34c4e96aeae9e71a686c009b205994b46cfdf1f76727ca67d415b9d21d54312cdc6a8ed0aeab96b580d0b419e2058e5d843c17c96d156549962f81c266233ed2b795fac40b1992b626457f211f08106ad86f5702b9deb9323a0970ad86125eca836e0a3d6ccbc380d474049bd96ea246b8bd9542793a66e15b319aece6bee17adbba7db337d25f8f642774030a2ff969cb5671f59901cb109e661e55fd5e75eb2a96dc37fec76a82eb89d020b4916271cfb0cb3342494fdb62ea0d253fb8ff2e91357b33d96d41530b8b5e9550fe9b3f9f34fd5a2a1a6a8beb93ccc322622f3b5e8487de19af57cbd1481ace02779ad928b17a9b05cbeb722c783b088b5912c2d67ce5073f1801c23170deb1eb6ddffc4c33dd25f94f4fbe59d704e478fb49dd2142801c37ed8f539ec1782ebd2f3253bbe19c5a048b9ef41824a811119f3a6ad2a0d4b77338e001358c61a9794572b0c46eb1e0e575d4da141a415829ba8712b791b625b1b0ea840ee745d9ffe1e99efd782ba25859351f443654995102cbefad7e59d03c9a502ed7b77144d0566e4bfac086a7dea356cb9e5ac02dbf7e81d6ceed4a33da8d801d61bab5c01f259ee3a99ff7f6d7bf8f2160c4bc3f890736074b000c4c58fa4615880f93fad43d5657c76045d7c414e6b85f63aac91f04a616184e04ff9aad513ba767215fb0331a369d36c0ae9b1ec1268f1d0b43c42b786db23dd66465b3af17ffc68c67964c2fc9e41eabc45db68cd2c3d95b8bec787d994bb8e9cf1dd7d4c563fca5d80b3f1fe8e3c7bfb7d171f5b9023bfbcc0cf4371b63c856edbda154b4313c47983f4027f9e61e86da1e8cd787e3e6b50e1dfc9201b9ab92059f8b6d1bf7856cd55c5b1d6c4e6ebf818d481c56f66c79444f5a6544a64a7d78ead33eb805a6ac4310cd46a2331e707b9b0950ca12092402d68c1cc5c3f269dfdb13ab34b97eab50b0745be72bb0fd2d73bea5dd37802393b635e42a0def8544a96e7f40a8d9d06b64e38dc406bd59ac5c4e218591d20b8dba2125978096517ec5c03f9bc6f96cb255e216ef82d7c7c873029f9e1d98ebc0d8e1312b84b8d02e8d680aa56a506c8668b5b9c56d04cf68e37c7cb1b9377c867240cd42fc7fbde0ac44e3dccfd3f877c9923ae9cece0cbdab00ca530f434a33f1c939fb88adef4d12acbd8b2b5a139a3fb776d8223a9846465c0372b8c3233fb5280e936bbe9fd49058961463a4419d939f4f1fea705eb63114f0a3533638dc4d3efd620147770ad877e2354299cec6e5c18924e78dd661697adf89a77c7365522d3e8fc0855187139f7e43e9a0629ee321b2cbd9f007b05c22eff56fe48045686b36c5bac2267f37a2e3d4e03e19b1e422acea31c2e9f3e7541976d4e2fa03119df9c4cc2d5418f0fc7a467cd98e290695b9530b91d5df8c626c7236a5c0fba73578b9a47491ca0ad26a144b0f23ec23d2c5b2daa03bf40130f14b9a427cdff1f232c9cf02426228c570cf1fa7c00a773bc0d70858588542bbf8f581540870897bfac8387cbba3416a846cf9f4f5d3f9dcedd080cc0de9f71b93828b835430898e82896cd3f30fe2af8349db294fb2a8ffc0848692a0b9e8a66ebbfc0f896f8d03e3c6a0c27e0f2177b85a2f6fe31e8aaf14ea5c1fdc54e80cde47ae27a161264680107023cffa961e913c4e6af96c0be37ad859c334cdb8bbeecb5443662739d027ef1b9535a5a46e2169933e419454025623fd6779f54c622ef81ab9289b50758ea34f868ec85aee589b08962b85cf537bc733f62aafa95fd81a60d5c2e38d6ea0df7d1390bc5050e2463e3e2e3a769de2a94abdedfa0ed67cc0ffafc5a05a3b0fd37bbe6967bed8debf02a42cdc80bdc62158e184fdb6672f7947505e2c0a6c7762b1145c4baf30e3d32434d22707044dc99d2cf2d38f15c43abc8632382bbbc9e0f106565906f7d4948d30fb19edcc3748100397f71e1548e58a5a01876d0a12dcc80000224221c4abd98a5022506d24bf4d9b9108991ad3421d4ab9cc393dcb8d744f97822f95cbb2640e73e401f044fe20253acb8b32a75feda640e190454bab695a23b14ae3ef60b00491ab22f622daa89b6b2e6d18e735672fe0eb2de269e4e386c926e23b865e1ba22dda688293de144102f7030fde6df653e4106c08c2467ad7c54d1df0dc5981004876c6baa8720f70942700a154a376c8d45dae1be74910148ee3f2733e591e1965fe763b58c8b28af25e9b3c633abd83f1c0a4f68da2e0b85083bf97d4e919340c0437a604416c4f629b33039bbf2a1f561548321780411d2e8ac0edae76fc3a19f3c84c3be902a1e84fdf69b11a12dc8b78ef257b5fbb5d923ffd548451a52c6a3af31c70266ae8a957b2bd72a51a034a2921b8e19321108ac303b0d2e269d032c3db13f21d558c82ba4158962f2210e1c5fdd96c98d6639aa844f34e40c1b9c909cc6af1e97a8dc83b78c72b30b7ae400f44ca60af37770b3d9147f7d6f5a327f34df7cb8891e71d41d723cb18e0dd324e5cd22ae0d9f2b1d2bfced0288b7aa73af4fe0a8181ba1aa7eae966d0a240e10fe5735d98326a106d16dc49f3fdb19d3a8449c56a74153655600e4c9e38d302c6d4080017d93c628388df94860329baa289efa4587f079c6f03fa03c54540a0ab4b067ee46a5a346f2fbbff6570ed0166a55c258eabd62ad90f060fade84e8fac799f7928285f58557a72e055b535d00bd9a4880d10c05c07cfe7a6feadfcded880521803e339f6eae3ff28a0a471a003358f952320f41a0aef9d28\",\n        \"signing_randomness\": \"d69ab8dc675f01cda87b86f4b9b0371ceb1f1e861100d21bd22186263d4e0e6e\",\n        \"sha3_256_hash_of_signature\": \"af8ed6a96fd9b506c1147be7e5dc3f44f961552f9d7628995592cb7b65015779\"\n    },\n    {\n        \"key_generation_seed\": \"95da16b844baf559c2cd6e68b237614bb9927d90811106347b5849fee2f48640\",\n        \"sha3_256_hash_of_verification_key\": \"1b4696b07a8ec6dd8451b1f22aeeecf803a4d08bf74fae86621e6b1f5741392f\",\n        \"sha3_256_hash_of_signing_key\": \"b57b5bf6331566dd2f9e5bb000205f3d99f41f07d1fee779422dc6e61745a9ab\",\n        \"message\": \"5f7522ce6bd0ce6321c27b9eaa6f572616201f283c5ec171d0ba47662c2320897805e1551ed438f3fcbdaf9de6f3a19dc16fe9c167a65b6e52bcf512c919561b548496a4a80af7ce25458a62eae92ebf677872482d8647c30c12bb1f080c6b9a56560d64fab73db17487bbb007c66661ea9dda14601ab27a100ef4cf4b7447e51418651c03211f8fb884be91f3980fe13e00ea4ecfe6d54882059a436c90bcad80e4101cc6c0754417545f2d167629f80a3c5ffe45c00ab2baf0494d6c065872b03a987a5ee818b3ef11e47fe1747f49e2db6a14410f0b1f9610a2d6114395ef6ebb231fdf71d595cc1171db9c89d6cf202e42d4fb968ab8105fddb2aacb15fab8014b534cf468d77ecde2072623b7002620b7ac3e78b62ad673feef9f8e97e91acdab171fd415b2d15605dde00d074a770e36f2218f7130f13e91fa4c88deea7e854bcaa01b8458d40625a33e982f0955b83080a926ec240e31f0d9bf477ee3a016e146a3909683410d4d09ecdf32eaef580402f0d416dfc082cf1362e8b79158bd57739aee56dc41a549e534c7ccf3620c7d7d95b92994a747d5efb8ec43cfa8189baa9b75fd54694e512fca388b71a5b9ea591ae9cfa34183de59d284ab16b2effa4b26a24a0e615b38b83088a9827eeb5c29b419bc061b033e0e3fc809afdd3de948412677e0bb5136854532639f3ccb176d54ea1961b5c527ef66f4b3286a583e86208aeeb8ed07d9e6bf1beb33995f76ca480039a6130775895f19e3cd4873abe3bf2fa9de81bf0cb04575dd6ae282720b152cf0ec6a4a04016db0f3543d8272ae56b1152b02eaf22131420cb194021f97060d5ce52eb21b57cc93964dd21344786e3888617152d2abd829799ce47d20158aa93f7da85ca6146c5bb94b512da053c35bfa8840ca43f6509a1477603fd50f5e4f9a7cf8d2369156989ad638d35d345bdc859c52688211bf7ef3f4ad4944657289406bf01dcbb49d560a11840ef35dbc0c7f9c96dbea76300cf61997a87d70f5ff8c51aeca2cf0680b6fe8c4025e1e25b62103d248cdee335f4fcd67597103362003206c507970ea6d78cff4b68b44244019152dbf812675cf667e5e13c8596eb6fea3903bfb25ed08f902722a37f8e460e37a03a2d6adbdf79da20052de658390484b83bbab28d039a303d7376bf555181680b7966c798a1c6cb215257e37739de7b9706cd1cf3ab031f68c82d6ecfa507c104115040744d74a40c49245215639d0cf4a5a7a10098e9ce3564ac3c44f0683ae9d3094784d354db1af439bddf63d5cca668d8180264efeceeac0be1b8e1c6418e45f9ed6c779ecf169143b034cd9f332989d445c83a8786398c507b9171b4d95728575539cbb29c5b804268d88f2b39af1f9572b8daa9feeef69c4a77dc64bf2dbb5e57f8b33ab151769b2d00010d67a2d6f188d6d5b35e5e1873fe2b327e42afb8885a842d26c246f7c18e6bcdd6fa49b300c65a3822121e95004928104017cbce2ab95acadb9802bf4bb049b8e96468353d649654c6f69d774380a5a387d6414dc3000540bab6eccbaa088c1068ccef20036e5c8342fd512f55e6794bf85fe15721d99a1bfeedc218617a940c8c25d4dfafec677d2a719b2cddcd302294b7fa41aeab5606f859cc0d638ac94b99ac3ea48c687d278eebeb396dc5bf2d2e89e880f76b533fa54efd30d8ee38b34dc5f8ae62c637e9a7e85d99e011f62d261ab4d3dceb98a8972d3482cf817eff476b873ac56963bd60183b359713385ba82f6e24be2d6cfea6dbb4ad2e1b5b790ee54d23f64e740502e887629b346fc8fccc3338d0f2921131b84590b32c7cb82cba8bb3b81ef7bc5cb12f0aa0b3c6a5b2878dc4f868057c68460c71d40d4263ac5c8b8317d2d0b63403c7549439a9ef227268372ec3a54cf8ee97714bc4b55007f92b1a32238659ec1ee27d6f2987ab06fee84c3afdfa73240963f076a955bf3c19410e1da6a19b3ea3ae2dd8766082d3295d35436597783dafdadb905465d05fc21fa8ac2737a52fa8aaefbd2ed83f12545c1fa3198ff225d37070694c9392738e89467edb2da3cd1734ce398e32bcb1fea2e4fe1260a2d9f9edc3607a8ac8a51d5da36e99b31903025e0cb157fd2ff5b51c9191cc16a9ccb870b4060cfb0fd900aef62738a58c5726f5164417f084ef14fc0953e3c6036b818c21ca3476b8cc5f8ebaace257a0315031a03e64e7f749b9df99bb56ceebbaa4333bc7270edee90fa2715bddc38d44898a41998b2374b6ee3b8524d3a385c03868ee9479355092c4d20ec32deb51497f4ff34ae7e7ea4828c288f46e5148de28a8c660ee132e5b5489833dc66205ec968b60dab96c2a4452a7019bba9fe3d19d5829129e2a9c75c39416ac8695145f2b62eb9468198cbd48d7670ddc6af2f99f77e7acd01a34ea8e0e974206fbc22656867d09807b980563e06a559b0c3a7e6f43cf8db75b18c0f90c12ff3bd43abce7df75d17e631c08c974322010648fe2e2bc940e6510fb8835df8384eff3fe6a264687256c6bc0a5f9d2ddf208171db55c4446b03cf27796bc77e3c68d8f1252be21877d7c53747404420302ca5ae1ab57e43b158be8b707360a2f59d6a473f98b816fde2ccedd92385202c419278e8b840dba4c05e9bb65f68ae2a635a29110329e8c0c02f6fb5eee41ed225051ee975f92da52f93eb1fd7c0a098f6d1421701537298651313514ad31cb333e9c5da719bba95e73878ba41f9e2512862a80602aa2de1e1d086576531330cc7bb8f0cec38050b3cfae5c8b1d6cb849a579f2294f8ce80fde5405bfa3e6ecb01d5117203a4523591ac4030397de9ff81d5cc91af3002590f5854e852b88667638b2d052f2a7852425c8ec026e48d9ef5e73d1993d7f3fd7f704760562c36d2278c9ce131ec6aa444d7b2eaca3ee888d9b2ae122688dcb35455e7de31562ba618f1183308b30d07a5c34020546218101ad42ac5054d4703587ff60e860a60375fab12734912058d5b0b06430fabbfe0c0b43c22814f56dae9e2713325a31c682c13f008b9a3d4ffa8a454f0f64a9213ff2d557a4cbc64ec6e4eca0a976cd9f27497ba544dbaa3e2eca0f54c2634c719b9c3a2ce37bcc8158a880baa72780f8b1d3494f589e2af3044b4fdd86f4db2df0843ebd9f3518870f55488f41e234ce94e907a69d28bd83347702750db1ae2eb1454cdca37a8b5fc90091f548babf489e57c8919646e977274fc972088a522fff9f9306d2f0ed6c01ff92cae8440d7f3526b8c186d5b96942cb08032886051da2a9fe77e38beb18f4fb25f1152edf9d61347a00a844929976a327be46ffd3e2ee0b6ab1014294ec5d40cf7071c36b11127ff90720596c1b3065e7de8010aea469bb4f4ac5a6efd20591cefb7b94b2006d85ca475fee556f24cc41237c631b75eb594f8342deb4f976d73aa46563c1aa6d0b605a16152315626ba08807daa6025cf62b29176f3a85e4bca483effea7e5939\",\n        \"signing_randomness\": \"88dfff7851225e63b200f8ca04c7df429f671c2f1799907ec4e04f6aa295fa75\",\n        \"sha3_256_hash_of_signature\": \"2c4f6a9be83260150dc14346cc598f1a9353539e63836376de8e8e58a845aa47\"\n    },\n    {\n        \"key_generation_seed\": \"f258ff1178cc42a3cebe238c8418b4974812a05f43b8fa95639cc46bc0738bc5\",\n        \"sha3_256_hash_of_verification_key\": \"94452f3db47d1ba284033e9b8b6d5861fae398049bfe8749f1de5f9ebb4c7e4a\",\n        \"sha3_256_hash_of_signing_key\": \"76db4e34f28ad0de94e76f48d90356795485a5eefbcb0c5f5e9457f67dd3c53a\",\n        \"message\": \"9ffa507328b2129c9f05a22b81a597fd1b8c27d554b36fd3eb150bc5fa0c6ed967ec5be6f1e52d3bed1508dc3c841360020cfc2ca1b0713076251f2935efa8500573cb4634c78a1d0f87d994e8e2b0bd265a877023b54d9a33282c12397dc74caab07ac2efd140df907651bcd1b37cab2d03f77cc28872291f1cb28fd4bbb5331c2a18e02120bfd2d9ec0c8938a6d43681dc03527fc2bf59703b5160d8e25d08534eb5aa5cc9c10572257d9e4db29235683bfe1776a2d9edacfba1adaf66587bc451d32c524c7934556f94776f91cdda96d2e5caf91a39503d3a742dc5a0efef7c1a13666e200c5e3fd7652d200adef51fc5136281570b7832e0c6e7552972e43291f202e6f916c916dc3fa48858f3d92b1b7efd42de140d43648aedd7c7379d7a4b71751a3348b6bba3b0db71b4c99c41e085e5536a3f0d2bddaa88069249e21e2d9906191bbb5c8b45353de72e00270431847aeb4ff6230cebd1969a0fb68d6e302b78da39adf6c0e681117c8432e24820b9ebf38838545e95cf7aefcf1e9436cf48e87b6c5181cb418132c7bc050b9498720d7d534792e0585f05da2735b7e68fe35dec358da1bf1681f7f62329bedfea3d12bfb26ad9403f3ac1db96d828050f39dce4017b45c5dae4d7de9e9f687a9d7fad1ae0e7197184142f6818a63d5617be9d8d82334a12e68f2eef88a0da3a915de63629550d8a64df591eecdbd1b89eb40ae9f9d65815271693c85f2ca41bf45e4fa16ef8b17d945ec61e757c6c609d8afaee32b3ca628842db255b619f6562e656f6125fb27195ec82fbeb9c14330dab649cdb74f523f5a98244194581503356b5b7ec51e2b35ae889452d3457ead713c0715aa7382dcc510b16e771b3a5a91949faf5e29223c8f1f861bc3b4e77e095bb61aba00eb29c065d6f9da9b4413d61b2202547fb6e34671930ebcdce4c541b3e2dc90073867a47197e08c96f74ed81de5f10c37c062e8d82364d67eb185cd098cac1bc3c522e4fabdf2fbefb66b9ec6e848f732a737fa7b935ef2848c29b1fb94044996eef006e251bceb5be356f286f0fc85e5cba627b67398cbfd6c0f520c6f896353fe75ba323d8ecd9d3ed2997580e7e1e49eecd91982c5da650d6b128068b8d3d72c1ec4bf1fbf121ba96e1cf5f247f9fda7018cb609329b1c95e59e112c393c45ef7138905902227cd21a39ce30397ff017495bc98a968fb497e03de5843e64923683f2e402da63cc25ad0ba13b85e3e379b08deb39542c06a268bbf44990447190a1f8adf0d3ed9ed9917886210864cad84e7c4d1282c4d3bff9dc23e4fa68ef6b0480e76459d1b5e0a7cc0cfc17f59531c4c1cb1d416b7d009ab50173f706289dbb68201c305e39fefad87929ef933006598ce0f0242a2c60955ae487115b4c367a7e49488491a6f044fa8b7afd81f6da09d29d4befe1b3c9eafda4f17d22eaae0b2d1646906d1cee65614640b53479e23831c56ebe12b92997d5fea725d78ca75f4509eebd3df4f741d6b2770521be2ae63ca365fe1518cfdcd5088d58cdfb8d3dba76731f74760a47c9d619a31b7e318e957194ac5acc6867cf8c9c235043d5c09240f346fea840ae0bb16094883fc801da0befac64a021f6f871413249e9c7f5cca92f4eab5713b0f2cd6c950f34ba6fb1cfaad541bd5faea45ea5fb37258301a49d7bc4657e3e986d707213c0f836b030c21593f11518eae3a8a95a2efc8b9839e79cd8cb0e6de59d5a43ff8f81fd35392f0c0659b7679542136782d559897fbcc0129c22f43a30cfb27e899a8ca52453f5459a281d0cc21f902403a596c7f69cbf9a64d97b935ab384fbea5851d831e8420066826d7e11e34047d18cf08283be8f29a8a79b0f477c27bc41b8ea4aa010ecf8ece0d37389ff13e235a4526070f96f415d41af2e053fd4440ddffd69799456e7335cc6d9f4370008803f7babb6c58b6996dc5a52649e25463b5267c188e2dc39b3258636ed8689e5c02e00574988b3af881d30e9eb38ac51c1e00e1c0a411ecf37e314276221d7d8713f7a449e38371854ea26520addb58082287faa1f77fc04095499a3c3a331a38852a287b24040c1ccc054086964fb1ee2b328f3de21a986507cd20b4de4898dfd15045324b93fdf85e5392de0f32c3badd04784012e97cb9ba19472b0c20eb0a71c89149ebb601abaa4a853f2c75dd2622235ac30d97b9d7b1216089b9cc8e879660e40ebcd15203404a8decadc42114715f4d8a6a10511bacc4ddc23520445a95fa3945bc95878bff18728e64de8b7767cfbbaa21f3ef2d92f3d7dfda792bbe4e5b3381077658bfbef8db95b64f9f2a44917b38df6f9391118978544369c882b218e7a7a31afc3eb9a75a28095c4478dc81f9cfa127bb749cc53898409365170823d65a0b46bcfba0e47cc0c5f6ecbee09131f134edd254f4f58b50c486dada13195b1a35739420a45be6558401f64c3b6ac94b73397925c20545621c7ecdc7da9f71a755f84d27f2c6d8415d37f2bf1966a76845216e41764ab96dc2e14c12df3684f7683fdaf5ec771db7050f81a4b3e516c7d5c955201a18f436962476c1284531764a9397e0edbffa8c3699929daeaf968b4524bd98ee62f9a0db9cbf99fda80cc6c57a5ee1099b1eb29799a5b5bf5593cda26ce2c66dea3d40545465c1d21f5b9373556b9ed0ae30e90b836003ca83f78e29bd8d49550286dc2de6407860e9a9cc5eaf3e1b1c73fc2d248b81b1cc8f59dabfb5daade6f2a0b38e76d9e6d0125955d08de7f334a56a8f362cc5d883d56bf7babae6d9e425376d34a05ab863a0d9adf7c6fda574fa8dc60965e021532c25ed4d568412d4143fbf2c4ec2f230d08337a4e546e01f7c1bff4c97f2f27af400caa57bcf398aa5bffe155b0f29a085d5053dfbedc3423818de8fc597eeab2c1663d8c81c71cb876f73ac854286063a2e8bd8614d06b80f3bf56381179342143f4c89b8cefe9168b6a96f416dc617b9f544f9df65ca6f4f7a84a327909666b70cffe889c86aca706a0a1365e248d6b341a004a27d4ee344f03ce6e85d3573e272d48210df7c3178efb7bfbef7765d24754673c9eec14c7513fd8de6386b0829ef0980b826ec9c77c81d1e3b8caa65992db9c2f8dd691c520fa6f233afaaedbf287a57a9a66d2330f4636f02ea3148c4bcd2c8b114d48a1027fb3bd5008d732c427adedec9969aead451e166954fdc207c1a4ec409cac60e42383385187af44f136f91a8461e62eafe6fcadd1e491162e46cfbbadddb72e5b54b7c655cb9489e7f4f7e55c93d3ad50cf84e1f47a706fedf818a5246bc755d6d18ef18702f5a90ce51812a67227c5e5a051133576e9ebc18afa18c1b05c854d343727b25bb10e3b9a3645d789287858fa43734d66ad831e8646fe604286544238dc99acfe3c8285230fc784bb73360f72ed34795b1c46edbe32a346bfa7f534b500c6c9d3ec26ad7ed20d1500e3dedf141df3c2f92e981472f0010a48f25429329ae92cbbb918246f5a53212703c75dfa15d014801a830deb75baa36\",\n        \"signing_randomness\": \"865525fe521f48e2591933a56a03988713ee151a81f6952d4640cfec738a74b5\",\n        \"sha3_256_hash_of_signature\": \"3bc1888069915574f01c31c4c2f55595c54af80511dae00e8a81dafcae9562d7\"\n    },\n    {\n        \"key_generation_seed\": \"5efbbbe99cf5c2b6830fb8e990250be308e662200526889ea973c8d33823ec19\",\n        \"sha3_256_hash_of_verification_key\": \"d7ecde4cf8e75b051fc15383856bf36d33a957c3b0c6512e4cc838125036f6ba\",\n        \"sha3_256_hash_of_signing_key\": \"7f62cda485681a08b0aed83a92d308bddd8bc1ae394415c9d5b373889f7d9fa0\",\n        \"message\": \"e7e845902e852b331ef9923416e492c1641236e4e72408d800fd70774ba32b6b4be04b6e82237a247d26f9a33afc4745c16ce0554774c68b33cfc6e67ae34e42038fc6c324972642338daea75982c71720f1ec9542df94b38434da34a2003fabd9daea1950b7751da6c81aff7d03390f5d63455d417f5d12a510337a16197ebaf921b6a7a9a9a58f9696418eced6b27cb8efc8ecbd9b68714f721561af8553a0d84e30e009a8985d011cb994eeaaf88c76f7f3261b47fc174155c138db2eadb09a06073b211fc0d27113e8fea0da56e181cf532ba8207f5d80d6a30d8bacba540d49a81a0763a0467dba7883766ed6358e809261aa3d8b757c839b532f272c5767671a3a8bf3391b14f5e97bf2668a4e98847f1abfa21e2370870ddf24504f89b3db71e210c46d66ea7296d65c926e2c955d899ac830cd9d06808a68e9b3722b86e878cf21a5e5d41d7f3cd95d23a6344c259859735ae1a953ade13ca103692b33af90ed0345c7b038d938f8f494d90cbd3933b2a80fedc2be57960db23ad018bac63017a04fcc510553226cd86c74ab90e13c72a1be12e4d751dc670a98ec4f81e9f8954a693fc7175ba7e50d340ff7f15d568d0abded0bb1fc557b1e55971b4c4ce8cc1b4d9e239c73b1133c9e1672dee36a2d9527f315c21764648643d866b0e2ab6d2dee61d838bc5dac183fc511c4501b6e535ecc54f3edad6e8edbf0de7cb70bee861b2bff0d41bb87ffc0ebcaee9a6dfb98d31d35cfb6dc0442fc285ad0879e7b218b6e66453fe04207fe814c5f72e49406b48fcb1db145753dc2a2d3e9793594f7ef1a1a6339619e1040cde605648234a51b2f6774b31c7f9a77c2ce3b98819132bb725d288c65901f7001e05fe5326b6f701c337d41c8cf8748ff9c276ecd398c725c36c11857605f58c0b154dd9f3c1b4649ae677533eb0338b7475254e273b786c2fe7db4c13468caf0aa2aecd55dc1a5f868c8edffd8be8deec20a9faa621c4680f3eef4dfe4a79794fcbc5f8c56eedcc3e1963569a36525d4f6a5bdbba5d12966fd8a0fcc70783fd9f61613842f80d000c9281cbdf28c01c6f6aeac10df1ddcd0322e00c4e3cc801ef091d9c1b01e84dce725d57c800d38990251aa1d1206ad93a7dda40f27726d6a03d973150f7a88703724e314c0953d56da6eac442a70c2a08bc66bfa2b0ee11e185131e352d10dd714dde502097af0ad155aeeec2a6b93b149b75dbb898b2b3a7c5fef2f48d9b12a580f54c4eef3ff83a4f13f2f194af551d4800ae86aad6efc82ce460d325cbcfee3400ae939431ab4070d7a7cc005f270896051e32b1051e58941530e250f05af19ff416e65ce40655fda31d2e7a6158e07da08fa61afd5319b682de44afae146129a8b769c1708a5d3479b6c910b2ff0fc872a4a41aa8bf3ee16f80011d163b599d18501335a2be10cf117dda094fe01596c404c14580a7075d04ceef68bd8f813d7de6599f478f3de9ce60b294cb7ce5284a61e078939d08f3d4fd998add3b92532aa54e0c31087cf14bf4ec964ebaad53bd15d04e37948e94917dde181ee3bb2346335ffb403b000f5669019c5281d88a0e771176e49dd0ba22e719c0b731ec2aae9c898e74b2967bcbdce0d7d73057e004bd62269f4e7f3823dcc18cd6c551104b9b896b0ad138dde7c3d761138641bd3eff3df1552659fd97bdadfc59a05cbc622a4492a1b22cff72ac197d61a4c5a949aa9ac09d4c1112f4c1b1cae353c70278a21663e11f27e9ec66ecd4ad56f2179a3fcec37ac3a3f4b33c06bbbd4c8ce8e74825bbda3e58a2e2d928c2c6e6d886274bc0e2175ab03d8721c664fbd6455db2960e3aef0bb25afd3cb0bafb71a2bd18a89adaee00aadbc7e4ae70ed4b534aeeab88559194755f9656b43bc83e3952000d9e2295bf3391904218a015c786de0144868ee4aed203b261fe743b7168788a0680f7484792a3f64782b2b1ed9217b09ae9845dd71ed363f18e8aaecd51a4f5913aab33fea3fc5f1e37e0cd6333d2a8347cf45eb7c4ad967fe6fcfff3565743435ef09a646e75c7e968ecf4202a9b2c23aa8118a1683219b1155c2cabc95c696704f5b270c6d213332649363ae13ec811e9a1090d1603eff745e2fa83379dfc6da5efeced556e46a8a5ff1f2a5c0d911b95c20ec2465ad0c96ae7e16fc36143762bbc0734cf4d6134dcb0d739f7822470e0abf66a0ab15ce0d6096d3abba2ca4c81c1c68bdc252a8a4ba609b7c05ccd913ea56126f418fc0b06de8f76ef651f8085604c16e5910f3b8651ab78296b56b78326e41ac15774e442017fe5b291e5227ef5a4b78ccfa96d6921c8542a8a984bc87e2678903869c52c2568fee4e23ef3cc466ce270614e6472244a4294b31f9438f7e43437fc9c9c5f3efb0f4f0af2110a613661dc24a1c7f7a7f8cd14a943821f16f94bd874f1a32e305db4776cdf6633446724ccbb2488b1b06f0177819d53885127e6eb717c0d6718366a8b8a089aa6ab17cb2581a75ec748123b7d0383f3900efcff77d2e022e90aa41491117758221a0b149c8ebc23cc01c17b9fd39118dad413a391cfa0a5c614208060a61646c7cf1dfad4abc3a9cc5cd566db2ac8faf392c9d8e7da0f84b941d792a8493fbebad30d0daa0d683dcc1583f0c9019622eb6c92fbc475babc8b626319be2264ed873ac063f84b7f83688ac99d732a1e3fc12281bfb1e1e63d48bfbfca619bf4b95f899c50ad0f5fe4673347df2bbf2ca21bef49c7f8440d95a83299960f1e42b457addccce236946de80fd4862baf36387e041deaac3c9751ae345512bb1f423a3b4ca8d3a5e3796d289641d3424ff22670a46552ec68d7d095e8636441d777dbe2e9dbf6b5fede5318516c3886b943f6adf17d8b7cd40b20a48233c9fd981145b45a5cb8f6a88eaa36c270e93e1d876d7781bb92a1fd99727d8e0ae34c73398ab8781bb342f5aacf4081459ea5ec20c30cbb6122344c457f92b20448f78e1a2a291202003781ebda1747061c6ce1f8bf882fea4fb50bfe638685cd638eec15bc24252567025fc5c16ed1f5d98dd90c76e720ef7b4e25a20d262e339c5e5bb5a9cf051bf5fd1f63e93452a179277b57956821cdd901f1c01e634ae18485708a6ed8f592ae2ef3a9d54c9734ffbadc6f0b86d0398aece9374f9acafef38d4b97be9b932b9852f97aeec435311a67ae344ac1985738c72f52b3d8b71f64a916240477fddc5faf02f8224eb35d310fea03fd2c5933047355a438676d92eadf70df662d97c2f5e00cb293053699d51d302b78145c77ab03f34eaf170eda5215436faf0238a4b0d41d29f36052a5278c7d8af9a6ffc6e2b6ffc4c5d524f7640a7170957f3de2451ac75589ce328b61ea7179fd990da1698f5c73bb8639a4da2ad67d364db04771ca118c4055c25f1120a0643158c07cd22b375d5c1dfa26ffcda44921f41d4a504b2279dff03421cad19960f87c6b6dd8c29981cb66c9731f931e43b0d97c6ac9862e2cf711df0ded8e4d06f3957fff9085a95d9fcc95610fde22856b229a3121d8b81ee83dee4a6a9fa3fe8c75351574cb000bf7f3746ca1cc5414aeb23a2\",\n        \"signing_randomness\": \"74de74032fcd57139698e7b190efc6fdabb2fe369a05cfe73074321fe0491018\",\n        \"sha3_256_hash_of_signature\": \"79201e52cffb4aaa35f03d9e421cac0f0b04410152786fad3c6119eafca6ff01\"\n    },\n    {\n        \"key_generation_seed\": \"47a048d8799784f6ec385eb984e70c62ce7c8a107232871b69b99f7bf4c3dbb5\",\n        \"sha3_256_hash_of_verification_key\": \"87d2a85cfe2d0f7566566984ac429b879e64b4d31450d508b486efc8991c5944\",\n        \"sha3_256_hash_of_signing_key\": \"9a2f7e1a7d106b5854aaa55c0fd4ff1358ac1bb1bf35d81564cafc5df91e42b9\",\n        \"message\": \"34fcf4626248b979a7a8d306cb9ed69c4ccb5cc3729d2692e0ba679d5c2feaac54a4e06d4efcedf78e19357dae263e1b5d107fb09618a9c34f54f19a738a66b95e6f88e20e01f879f53e8f4c371b571e1438ff70e0a8cd00d608976e24501b2ddd323efe6c1302a318cad821c6ffe641672bb80ac62286c69fcffd93422911c46d43dc9a1f00a73e19ebe6cc09a9801f2a1da708f0f1f98e7f1a18529010823230279f487911cef1e784a229d9e311bce5e2d368e6d613f791ddd617d0f37f604b786ca2bab754e8bc4bd3da37e66a54df1d3b268a5a80379a30a52b1532e8cfabe24168d83cbfd61e2346f901c361f771e0be3e03dae8cc30614c10fb8dccdcaa5b9a25ddd8d61e61f60f22308e12adc137d3d8c53cf7b31984cb813758baa19ac178f2f0cd2155ed674a7509a3cfa7ff66d2d9b1e60be50fe7fb79591c500f66bb1d35edb80263f4b696a3dda0b9b2911d01e76e9070d99db93d1d0c3874cffa776ba24424a6b453526f7c44eafabe13c0750f9df33e82105930139e70b5cf1b09dc3913d6bf4a4859f67fe814ff038f0fdab93522a35e7f81002a395989d68b8b7e4235a09837cc6402a5338da08e7c73dc63c43bac42054c694f4931b80140d6b104edec995cebcc5629f85d09ded8257626f9fa4079adef81d044c18bf2277daaa41931b62a6028f89f95f06d8a8fdeb95eb2eb1e90c0d8523e0b476b158e3040f212390ab2503021e8d6fc0733b963cc6188fb2532829925b59c8255d89f10b657053d0fa1d8e76c84826a4609284503d3a101ebfe7af93edc423ef5303cd946c8b570511e38eb04bee0060e678d03e4134f84f279a570aad0332417fb2099e3f1f279ce7d6ddb080c5d83064d107bb560b21183ae165cbb54cc75313de72d40d1cf5173455aa55c5c356d7c40a2a7023dd95d3f89b515d7598f800dcb7bf68b707978ecaf55b794a17559bd1e913f4472b1830783bbbab5f23a760c78c46157fd1b429c445494cdf92fec8bf9fc217d3ce2697bb6c671baa793cd0c1c84f579f0daec400beada799a9f417fe4744145f21c6f8559afa7a514a0e951f03e5e68c17a8e5816f3fcf41774d26be2edc11fc3a42cfcf00f817c3d0fbf474fd7f30c9c3c6be7f74fcc79fa6ab07cab037eea7d83866673a74c087b5f7542804071d53ce348d2e836749e35af0fb884d5d53abb195ae1ee6e9ae35dc91be359bcd510a7801fc243c07dee92373918aa4f8a89eda3895a52456f7244d1ff007cc7b1a52cbef4c1ade1c2c0ac189ab24b3f260475e1d08e7c5bfa30a1cdd71de5ace80d5fbd1d0f17198b79c8eea0365d139f2ae73cab6fbc9a79786896de0ce7fc747d68fa4abab662a09e0e409f7e652153352bb92f5da1836b0e92b0b644c821b2dd2bd0af193ac0f8cf5b8d88432f0248dab09b46fbef2ef1899b5981e9b33de4e9927ae50890fefc35f681e075d8b0169a2e16feda6392ab9858db87ed18acba25575afd1feda9fb3fd01ecac13c245df6972f65087513f505187c4e8ea54b6433fa092b6cd3af13f4718693904435c55d273060fbb5fda76074691269493e86f287922d074e54eff04209b2fdd3417d8436d1395e638d57db75d68f4f819141b6daf4d13a9a18629cf5f84b0cd02e7a397715dde5476bdc467218d11aacd6ce399d9d54645bb27ca43076b7e4e57fb4f7c4f4b8d0aa949719d731c3a927fdef1533d773cf1bb562d5ea43817a5acefe9eb7e51029dea143e8a1d5f76f9bfd74a26c6d38f54194319a1aaabc4daf45efbae770b9e9d834c09fe45c15d4bbc0251d3df2f2f23387dcabce6ca7a59625e18fd997770d164c338d0692af97c749fb746c0d3944ca4b2da6d3ad7b8c3aa922fc029cf9ac5580cfeaff50cb2e9044211ea522bb5769beb7a7bba0743f345feea9aa9da6ec5f0579cf7a5aa4dedc832fe3f65185a31fd49c0d259e3b7f8fa96e110d130f588cdec30d0fd4860ca6673c46d961fc68a4020fb03ae24b1ae12967ec1ed19abec0808a7ef89521152033f70f406a7005819d28dfc556c79de18584088f40be40a555eaefa78e3fa3d9360a7cebd963555cf208dc408a07ccc1369f98bd840f5c940721064e6c7cb241ed0697af0facf36f05632a504870abf90134a01af00d340f7a5d548a8078c2049600ee454d15eb8ce58c26b3c8185cf9dfcdca7d4b6dcdeb82230f993d51e701d8387b06bd45b4b61dc9da6d3b4356f50c1d4ad2b467d36ac092442fa90d1deb014475ac7ce90c974063459dc951decfa30d2de4c70fba39a8b6931217d0924ffa783c8c3daf048908e4aaeaaa3b7c98846278afdd1753252f39caed7d334d8575ce3ecfb2edec31afeb2bbe67fa929a267376293c2b2f295cd8dbd66106e1d9518be1798949f3315e0454d018c2b706fe836fb37ab908d9d698af495bd285a74e4cfc7612d42121f43fdaa7dcf44da82897b820514d66b92983a3ec819d2ce208d688b6f0aacadc0cdd619d815cd231ad8dd9b6dbad9c47e16fac098d0f4279ab52055d2ff765af6e3618c4509fae6ab00fa23980efb19a26e0a6ea4c9a7dc699121388748449c429b28ad2779f5642f05ff58b68ba3e289f90eb27ce06392616c080d659338caf274d46a90d58f2bfed25e8d4a8c62030a5e89f6b1a5f6112a38661e2f2b5a37bcbf050812dcdce9c0a939adf929c921e7da0c30815da318eb2f350f286441cc92060c970077623eee68b8c6fec9fffe780a6fc85fd7af90172951337af57339e98049132a4cf58874a7418fb7aba0628b6192bb2c43102ee6b1d7e824725d9c75d34a8b69df4a6bcb1f96b57767046c99ec6352751e2fe1075bb4092672379b3518ddc884fead5bd062b0336ea88bcbe0d22e066566347feb617a322bec561e9aa9d2177eef0dfeeaf6231ad56d0cd9e300709c9317b3d334d8d2ac97f96cf2f45b8582c4128d95da8ca207ae34d3daaccdb128c11694eee6d3e8e6ab767b6886b1f7235d85a4d9c7c831c5db8ad8323f63927a638e19497cfb308285a03ca2c1fe2ac4d919ad11511ecc6f28e7d0e0a614fe21b57bccdf83535c7e2c40840ba0014247190c580378454751eb3f2361d7193e160b9516f7ee1d683b336b873c8ba22e97480a61f002a73844c78309c0a3b31be30a192a62bdcc3d33a7a5ba1f6ae0404a8558740cae46e5fd15971b41c0bc39665a9b92eeb3328c328b073ed5b3720d37a1c097af8a6fddc3b2b067680e6caa760368b0e1c052e804e9f80f26b52596202ff2e0af7215999eaf7d3ee3e8916744e40aa1154322dd068aa15960dc38671a4f5889fbe709ce1deccfa80b9d33ad2fd963fe0581a2ed7718a27ca62819d05baa3212ec7cc1c5472bcf579ad52d5e1b2bee637d9827851c419a4cb91db57b2a6cb4433c1bd209648f1fe170abb964b272bcf0a263ce28cfa3a9d1449cffdf643e37ad97182f0031cb334a1eead23d63a5c2d0a675d0ed000f37fd2153e1afc4ac01692701014927601203ed2b8a477ccec45c1f43190e4fbaf2295e32a9383fc7915aa76950a301abe47bffaa9c294292126934ccfc173115a6ca96f3945fd5f924a5017125ad5aac705106eb852ef3190a24420196ecd37f7c67b57162cbeb97dfa\",\n        \"signing_randomness\": \"f76224f0024cc75ca18d75487e0edd88518965dc6dee53b98341db6894165a91\",\n        \"sha3_256_hash_of_signature\": \"b3db75251e97f98c83f1de20a8311018dbc38c571e18dddf638f012bd16354eb\"\n    },\n    {\n        \"key_generation_seed\": \"1d9e243a35118bc7c50a50746e1cf19c9fc310c7d54181fb95f44753eab1b94a\",\n        \"sha3_256_hash_of_verification_key\": \"8be87ca63bd1de72d9c1e031a2fa2a5458059cbdb1c051db033078ecdd1ecac3\",\n        \"sha3_256_hash_of_signing_key\": \"9642731178df47e306d40e0f15d70bd62f281a9a01746541d45684896f547111\",\n        \"message\": \"96ad5faef409b8a4c21acb1acb596badf387d26656be3eb17987af59737e324b7bf8412a306b0e706aef73d79af753d9b0064ba9ced8dcea966543fe748e2611709ecd1ce6e4dd8fa812d485e91809a225936675369574b0d104a258e3353ee0e021683615ca5c7c531fb29a5025cc7f7323860443dc19c9858f741eb9d24a9f6f04fc839b67153214116e8b7fa982f338445830f915f7c85c88c23ba2a3ce8e2020a9d8dd7b18efe95563e3924d2a341826af51a8584cd026b1c433ef0221145ba8bdc8f73a467b33a9eb3e8cd2a4d671c17d7c28aaa539d1c5bf2f4138639afb89ce791daf0ef0281d52598f4c13d210974cfa1f099a0fc70b1dc120e5c00c33a2bd360bed57cce069060d6380be2204852d8bcfff4918ba0b70b0bd1e1d55dc1d68db1d20ae713b0093eaefa1e33d40d9bd95cff17568393e9bbf5cc1287325d2668f65dfcf44ace2f6c6cebb62f1433e69cd19e6c6532ea93682b22c4c4a62c6abcfaed08ee64f32723e56205222e4ae0831ab8fca8c265fea0cfc66aab1e367201752aec11f752b963792c071e42a8a1ab80658a0c6960147ed740cd07f307cf6a644a98e1d2e56c625acf458d0bdf6216a4f1b9c78ec3f14850c803a4207c894e61a8aa88840a27f2b439fa7cbaabbc789102a95323e06e2c324859db92c6ceaefdca389f677082180fe3d6202ff60dab9f87e3b84841c0a4eb5974d893333f7f1513e54ea4ae0731ec409f69b77089fafb121300042880ea59b7927e9435eabfdcc1019a96e145d5d157998d620e7bc6945dbd6cd78e94c2d89589f8dc8a01cf1b295a26b091847f034937f764adfd811f52b3aa187f3f49273eae5949ff34b64bc86ff11eefe378825d526509483e7191b33333e5465ffb025b269f898ce1f83ea549f1864b556c729f510118921b69594f67b8c229236ad3aee55bd7082e027b5d342c976a549e01618288944de0b2c77473a25201b61034b334968178afab7f8cd1feb6a25cf8dce3586ffaaa861471e2ee7f0c22538fb3c95d2145965c4673e6489764ae24b4f048ded77fe3487ae175f6d4898f69f9fff276470a93daf986a75f685919d98c9c609c795d4785ae941c782b551ef382f47209aadea19066ae5d3eba7bbd99e91943f1e62754a42ffc8048f7b87f128ccf6c96bd760b45f07f740e94491874b06cc3450aaf55bc664b407c57369cabd2708a9c478dff64d292d96ab71eb997f8b71cdd6ba02f52c5035ec26e8111ebf8268cb00df9ecd63bc0d557e2d2e77a6363b00daf25237e77dad03f929e5e9b39447a70d4e5f4b90958f312c80d594e1b1f3d0d23f2b0d9753bf3544061cf0c0f841c440319e74f9b9d15b91eba1e680ed6aab7d63a97b48c0a4aaf314e8e77e2ea6be9dcfc7b5557fec1b996a37c86cf6941325ec356ee75671726bced7d2157be8d4c62cf4bd0420baf2c4223597c0ef75f7a7c9533d14be0d21c37f06faa53ed5ee0ddb025862417f98d2f188895395cf2fe72185acbea952f55cad7ec2d684a5ab94b1257d7abb565b8c07b88c6335ffb9d2fc6f6779cc24fc3cdf92bb3b12ec54360a7cf3579632a2a65c518e57015df1c616c857f83f5f1aaff693acff210dd1e95ce04cca9a0bf385ed6ea2aed894e79d5133799393469b666209371e708d4d279e1ac5ace28985d0db2765d547c2902b715baed5a4fa3e7aa42645f3bbe1e9f3cdb87b1dd8dbb5aab08626591921cb49e552f8ebafcbcf428470719ae40b9ca847f31848f39e4d42049c5d40b0bff036e5409a6a12e7924148e60b64bb83386079b54486ffc8187302893b8bf826578d9ca03a1291983f21de7f6e65458f8942dc1b135c6c8c1fef4f3863a58db17112419590ae57b9425592ff22e596191e5ba7c513ec315ec3476c95a149f6a5ec1cf24870400fdf46217a23f42e0b61157c3cee23e7916b4475a94b96b917c171b1a34db13ad98833e457343f94a76ee226fa5b9f3066c2fd69f14d3aaed1b31f5114780442ebbc88d0de5f689cd910e7464d73423b9d4e03718c5c51871250d11e27e28df1268166e3af328a80d9d335f2d27d2e91dc61cddc7f733e345d56c11b6130875d93d527f93542fb352407185e7ac07051af7f642e34fa06b1376ba15a35d837c1bfe090ba67a89fc1e307dff3f02a988ecd48fd229733f641f2609ec8db14b1a5ac170b104f03c2509d2ee6844c716766d06a6a25d957530fd68a8de6f1753f83ec19ea2deb1a4f9c7986f20ff60a7508ded6547a85baba70577062e8144ba0496777a5218595e021937febad4bfdecac29e3fff2efe7d598fcb86f93a734e4c573e1496a6282a3b40e817dd3c9d631939aab350adc703899ee3bcb1b5eaf6ea8420dd6eb2d4f64a1818aafa97b73c75610b6005f1edc1ec7d8f8db1e5d3e9666c1292515105037d26f2c8d83fee1f4ef5deeb287cd7c1e11960218c1b8bb50453488bab019435065aedfecd8d218bd1e751fe736442e8d09ce7176a71c06415a30b070693a68bdaa5cdf62351ae665f37fefda9481e62ec181ed24f0d0649ad01c89ac422f1b7e27895e55dcc2fd817346d361fa559094b37894c0b478c68a1d7564d089d9d4417d5c7372a33ba475a81fc129f3259c5407bc7435825b415782cc84d85e69d9b44b32d78fa255a895cfd55319dae677ff89d93a3884ce9401775563ff1788cf3ac11cf96daa199e7f4579a0264378a323fda64fad2349c09465fb23ba09069c7fbc79e7288a82f9165268f6842e0aff0e250c21bbaeefb4347d4ef1cd51161dfd29bfaffbedf71dec93f4157a5c18995379ade8d15db59ec4a8b308c2eade1b7ddab55ce2220f3b3ae8cba7c8211cccb3846a225b438f4b37df54363a987c5c4e6b9d20ec3c0096317d11f982184b75d8effd168b7b41317d40f903a23a2649999db36caae31ba5d91998a684d30aaadbd3b1ec154bb6c92513bfc0c47c673254f42b1fa36b995cb737668cbdc2a0d1ba838e74e0e50b22fc22dd048f48b6d1e89e1ccce5a226f63ac7b8e6e9e8ce27050bf3dcd7d0f35f47bbec1caabd4d619cd77302ab4ff6f56dfbe9f5821aff2d72ee6a628daaae4440edcc070473bdaa54ccd775331ac2812fc5b9884915da582eb36f85c7923f06d961594753802efc5883ca484fc64face42de6c3105e23cb90663a3b381d0c6a7265b740bff0a1a017058f06e39a74bb07b63f883cf914fe675e7e5ad5ad44c9f90ddbe23a125d9be02264edc13972ff22ba48ece8890a223ec13addbe055a8b4e03882677fc0d94c9053da6ced34e132fd83810a793350446d60ae5dd0d174b534a3b6f5bc1b497f9406b5cdd414401b6dd881ceabab12cc51425e88a81bd9e14bda18273583cce0849aa48dba1cfc49cdf29242c73c99c87f063b8b739aa787570459c098405dccef78d6d97c21545f2959df9cd62f9c38ad9a849507c23a51714565642dd76c9103154327985f7dcc701b795a7af8625f06367adc11a7fd7b6abbda5b2ff6a825dd43b64a48ede4eff8603a82159a6011f9e626171e4593c0e963595a6e068ad05feb12378c71ae515a82c293eb7d2b01b333cbc7991b44685aa7513b3a58342ba5d094b773e6a27f8582f3dabf54def59974cb8a2499369b5b64c7ac08d32d75fe37371c578073dc83b82a828dfc325976ff282d3f6\",\n        \"signing_randomness\": \"070ea4fd2436b311dbee24426f43a86f263cfb8706873a4454bc5a75c5575b29\",\n        \"sha3_256_hash_of_signature\": \"0792719c4a597b3c874ca110be62be9128e54c76243a91f32b9e40094f8e446e\"\n    },\n    {\n        \"key_generation_seed\": \"0a46fda6ba71125f3415e8bb6c2d8c00601107fa563e7f6386486a88f87701fb\",\n        \"sha3_256_hash_of_verification_key\": \"ad6ff6dad23c86e77f2480b2b0b265a521886988877fb9110cd1dd63348903a3\",\n        \"sha3_256_hash_of_signing_key\": \"26557114c4bd9ba162f9d3f588ff290e7a28b7711d68a0539282f937f3f1a66f\",\n        \"message\": \"2447d338bf1a375b66b77fb96cbe7742508b57dff4d33a368ebb8451c2c67b980d3576e6588d8678b285ef288a8b5c9c2726c4a550e764e47fffa2a128533a7653e480288447509e10013ae1944fffafbd9e2baca0b3c7069c07a4186c056fd3857caddadd5f891512daeeb26865f5c89ffa63a64c85a08e41ebe7bd8786a8add571a4267d5a9e426840a0b988e197a09f3770b5b0d80d65515cd4d8390af40e6150062dc4b8661a8238f232692c152c97b8cd5bfe7b5ad863dc92d99744d769087b3edd81d2e475f5cf0224b10cde6fae8dfc3519efdbe66805ad4468d84d3dd93430363677360da8f56cb58a6b775ff6417c1f324380b15c9ba668eb0f25fc2a690b483e856f3327b2d79fa6259e30d7f76199cfd21152b7c6ffc3fc113f70d3930c08b3c1eb1bf25c100c5a930eec2c52664f092b89614943d9d85ed86a2ef666a94f9826c3d116a2bbe49443e2c11748c977716381d9463da8d09612b80a6760e5a6fc5f59425eaaad6c8342c1ea4beedd5d73151ce213c0b155286ff22cd28e3bb88e0cee39cb859900d1e0fc19f6a7237bda8e51476f4844a316752fb347492a928eeb07aa39abdcc0164d1921b61352ed4ac94b82c410a56505633bad53a3e649acaf64c43c1acfcd4715fc594af6fb9e85b0b7ddd6e8621bd12a2bee48223a97ec8502c16b550b03087b6e87c1a860d36322064f8febc52f2b7c31dae7430870259bdaa5889852e3ae6f61013f5ad0d38727cf9d90c67bd7bb3b82d303c6c35383ed86fd5b7ddec824ea198ef780be830a1f2679d24ea6e2feefb979563f511d188f409f0cfd0050fd418414d01e46db3d23b3a90b24f4e96edd4f863bfb333d6a826d29eed167738bbe22c516c59fdf81b032bb55473a5ea2a1defe71c95a1eeb5c028435ad0379896cbbc76877501b054cf1fd2f6d7a9deccd70d0c07111147ef568dce514de96eed61600029c8d103b31c8b344a700de630276ba2c5633419c59e66577659538a6381e45584c7e1d6ed978ab0af89067ac83bb70deb6f2c58e339a5a66176a54d985da6e02002948c62be6f12314240fe18b09aacbce82ea462586b8316c3e0aea00f9998922f8d956120e53b4178223f4d2934a20976fd5a72027c8f4cb33e9bbcc0abd15395151266b6cd5b4a9e2fc1725d8e9ab2cbda47b507bb25ac995edd51ebda5fd19caf68fad8eac57cb5ef0c6fc861a73e64648ee3255db4c3394438f49377cc4ac2fce1b6bc812e5d282f122678713c6c6d452a33c632c0aa47686588752d72b0586fe5ec2464a6db40662fd2106a19f67dccc45692fca03685251d512642b0cee436c78d94c6f5f25bbcb41fc7e5b1aecd52b846a0b70eac93579603e9870f942ad4c1cfc9d49b1132777c6f1c184c1537178e5029067257a2da2827a2ec44d323d13dc6e4e1b9edf5949d4324228687fd54f02ccc3c4dda635fa546a5a6783959b1c48aa9d9c9f6381ebccd979253460857d3cb1c70893ee6f04709e35923883ee3c71c7f33b8cc28b9136b3ebe5f52b9a76817f2f74fdc2f12b459dff32d5a295be374b3fe507a0995bcacf1e7b24f4501b29f1e8b4f2a8cb394b3e459a4296f6439ba59ec88305ab045ff40b1dab4f672f878de1f9e46b9326cb3e2f3457b83ead8dec28dd079af0e984a69ed882e1cf21036578485dfc2debc9cfe82fce0383b4039d147c4c7e31e315fb57b9093daa811f4ee4568e32e5625abe76c5a1ae42a03441dbe766d0ef4df607406f7d489275e8c5d4470866f9049a4ad5c428b843dec3702e86e177e4b60181d2b5f099bebcb25f04c93d087c72436e87a9b3afce78fa31e2b892400b5c1071f8ae0f78ef6f7d71859a97c17ec0912d5ea27afeace739fcf66f489ec6355a3318f79649881cd6c7e96a881ecc4ff6934c3d10d99f1dfd00592cb037749b025bd4bc2832e206c1407e600fc2170c0bb57e5c7af0756830c2a6913e2b9c60575cd4a394f2a65c50e40a43cf5ebca6a8a32335707ddf4633bac7375dd53e24df20af30203b514d3793392e38fa8429b050f58b28cad0146f385809cc7faeff8b71b2bc93d2c6f72e31ae2d07cbb3cb7f43540894e01654edc71ccf4f361a847ec5b1d23c2d4680e29f0e1f992eda3ac41ecfe614fc010a2eed1bad87a7d17468d6fa5356edb25e9008a9bb328225f85202246816e1a542e1dd746a5fd3e064faa1248579d31cd3d65f8fff36f782622402db328c7850d82d8d8a52b897353a2f8b95624d2d958fc1c3ae6466eacca2a6a5e6add4a582d27e07633ccf697fa02e243a4fbb3dc727b718b5ac0fa6aab217e241627e69ca46f05ed6b496a739a29edaeef76992a507130715be555c68a7eead6e8ff3a378d8f4b7bafdee3edb9ec094440e31bba717a9c82a117d05edca2370003dfabfb2efb29510466f74e76ceccfc41709fac4cd8eaa998357170a7a293209eb0bb83dfe5e2f6d73c28d5409c55e95068d647bec42db8098f0089ef8a5fc5976bac421c37dda6c4227bc1ae5ae229f067515cea3d794c8d85564af208ae0fcf836b6c0af41477f99c8773d9dd1923c5c07e1fd508c7436ea93383797f372ef3103546a5278a4f59614a5d182344f0431d065c35620d63d4d001d7f626993241362e67d1bf41419858eecc2626537d44e2e23619381e96cfa91b3d8054681d298509d9b99e7aa99cf8742e37637b24136f8e1b487e9571e4c24ae5df307e4c7c62e55c47132ae404b33e5367c6f24d6680be32d20bc58370145486fd5eacbcf98eb7e7fb6293044067af11879e91444025fe52e24617269be192bb71bd9f95356edbed9df352ab56a854f9f531889a88689d3f161fe6155c6c1e8011d60a46f59c7d08c477fa652b559a80567076b4eac29a85d54c66b35d6960dff75a696cdb17ec9a7b74dc6c3652dae866e8758170d055c4bf60fa1238448cc9e29160df50160c4b0dfb36bca40af0bc5f7d490e7dbca49535742eecb90098a0a0fbbbbc7af25c0ca9bc039dfb555dd8431af188f7c1d0ff786d627c058a0b9a15f26b58aa2a5992bc8fc5aa14025ff95f294203b45ea081e28f094d0d4ad671c885e67b2e9e800f10048158698d56648f67bfa8cc73dd5afa15c1e48936b2596dee34459b484336c20cd77e58bf682479f9aef2fcda86e4f3a2fed7046e5a3828a9b3c0dbffc25fe699f25629a2045a51242e310cb369b730a5e81167758d7fe843261a598e4541b02d0db4bf5616ba07a440665f7fea6213114b6b1b38bc033d70e845445dcd18e23d34d3d6f4a52f5f904ac5d8feca5af1123658d09613209ee19954174a1ac7a8c7f9ea288bbe5a0705f3ce38f30ed5ee69cf5208d461efad51c456507c3729eb338ce15c4c253be21e81f082b0847c6871ca0fc8b3e80115fe2bb8cd8afae69a3c1429d21f149b7446888bb4dcb639819efee665b6d6f69e61452b9328b4887a7c04e9949390980a2609a667267035b11bf862c1131533ddafa518221627e0ee7e4009cd48e4aa9d0753a9ae82aa0257b69d569b4c53f05a75a521b327322c60398db0947d205d2a33ae51cf2cea8c9162dd604f8edbe91f5199d19efbf9896a46389e7bcba54b4aa57cba0d4f9da117f288133ad01a9a9b2a824d54f74d4172be2b1e5f0d3de60c13aa5b668ee6a45397c2e39573ebfabaaba48d1ddb2ab6453fbbac8dcc05349404889c7de23a16eafac8d5e541457c32cdce80cbc\",\n        \"signing_randomness\": \"5d6c5adca2bc4003ff2a26a67c7b7627c67ccda8cc493cf2d0f782b5e25bec3d\",\n        \"sha3_256_hash_of_signature\": \"2084e015df7e0e1397226d5902d0bb11341925cc874427559c7a02d8b26369e3\"\n    },\n    {\n        \"key_generation_seed\": \"5229dfe11090effbe94ee161054cd5ff58b31e23f567b282db42eb1fe42e44aa\",\n        \"sha3_256_hash_of_verification_key\": \"ba527f9bb898f35079db43a401efe30bb6f6e1b76cab72a41314d37d5d457311\",\n        \"sha3_256_hash_of_signing_key\": \"152087095d32881b8d2bd0bf0605c7e53055586abf3cc7d7158b3eb8c78931a4\",\n        \"message\": \"aafa792bff719a3b794b2f8198ebd1556889c8c61ee6a51470ac9b274cb162af44a26e2ba5ea7663c4c78b4b66b322ecaca8f2ebb6a610b51d7c4399f4a64a870c038797cac80f709ca5c3c9faff7d797963e60983b584130c1b99328aadb2d261217cb95a535b8518a78a6d2f6cb8400c2aaa2daf451391f7b8ab0277a3af88e1ce6f1d3dbc386cbaff15308f073d29838692e645f566d4b3db4186c259bc84606855ea88938cec4f7211bc9b461e39dfbb9e44cbc273e02d4314a037e0a26d60985ef5a35f069d8b51f86e9b6801ca067ab75565d73581ebbbbd98ecb5af47509c8729d82ea0b35f0a376ebe6d90108cd61fbd0cec966c17264f6a87864457f41162ff7210049e6ce2b5354f8f19161e0866d6bc3935815d9267c600dc529521fd092b126ec440d49b8e3a166587657b52ae9e2923644f72876ee94a61d2db0ef4dab33abec0c47a6a725d4cdabd06d4f6a30bd7c90db3778c17b7d8ce82a5123b798d8b47c7f3e968c9e9f82a6eb3c2bdd8fc06d282f5cbf3050f6ff71e2edf7a109f23ab47f427bd75163162c37722bf70a6bbebebe8fd9c39152afeb78c37d718014f739f20baad1597b1f9c4e0b59fd82b834d83daffc935de4a3272d7c2454508c07502943e90fdb56128d6e6009ed09ce80a9b60d51aa2e4e162f7f0c362f6886bbcabe29ef6c7f38b742000b9d152ff709082fafe809c5dc9bcbc6f300b0a7840d0d36f39567d14d8227e7145f7ca670efe917e0f18b0570da3e05dde56883ff12bc0c76c2a1e9feffbb728d991769b7d0b0d34853c76fc0655ae200501c28755f57934bb9f46a3c6ab1dd8e0161c698133f4f2d7caf3392576b4bd2b6f8735d80bcf60656e132442bb7fcfdae160a2dfe3f3fb8209b5c933201785a7e8206096b84a222a68e62501846273f6a9145820f87f450d12c64ff79a843e897c8394ad54aaf4f3b886fb00a6c37b2efd0f6d4dd639c9989e7ca30e4f12eef440946b61d7a28904e1d74009b6d1aedf2fda8b5991cb37795a8ee51bbdaaea34a4c7040944761b9b4b4c12f455c536992a0852f7f07a9aeda8e522591cb4831b0c79fa977ab6bc49c9730186855986035d2c6e5a6d93da43e8825753721978aaeb433ce2f2a7d67c1ffebfea6f6059474d3022817a7329d9dd0e4a292302e4a57174b9c5346e4b6d75d65882ca7339a48c6e7af776a8515014a20e4390f6b4f4a19990fa725f5a69b9c3bd4e8bbaeae49979ac19600a3cec6de154985e236c3d0684269974bfc82301ac7196675f618182d7cf15ee5ce3b7abee0deea5c72f54cafef203d556b31327089a0c0de94f74458cfecb481adfe3cbb5da422bd3626b00c4572b4c2bd7584acd9129a76c616aae51f944becc4682aacafb8e3bb1a42a6a8e5fe7bdeb43305a34a98308ef2d49ede4f41361446a9ae4dfc1ee13d12821be0b01e55b865b563633e5a19dfb6425cb60159c147b18a6419f5085c5d0882656ed533eedf97674d0babb6cf32f696dec0f9921cb3dc9e6021fa198d554b1d83c42a0bf214fe4c0431547384f45aed9190cbcf98ed8278e8a03d551fa284c8a26218f0b0b58d99879db98449cc99b6b399dddad9924e6a7eb20a0f1fdad2f8138bdc7b445bc01503c509066b1603cda76fe41727ab5e027dcb15032e8f66bfa84544d22c501aa6f62b02c0f8764387163ccadbf1ed7238e7f16c80e6c37afec2e10ffb95ab0a39784f9fccd8ae263758abe392727e9ad442a44738d77cb61a6b1540ade751130489015ae5917c927232eed27bbf88481f3ca0c5ed2c31dfa943b2ead4a8c80b4946e3c138a61baf43a72c7a25e16874cbae254d3f14c154f7c60ccf665b566799a01e0f769b60f73c17c840e0018c6fbc10eeda3e35a77586b3a5936b363b2d5cb25c78a3e3aabbb84f1e64df47f97ae1645650fe1751a724ea9bf80744d0f33da6f313a3cc17d8f261585b62a75c167126d899219a26210dc55ab6db2b94e6993849b4986f988efb07478d6621cbf4b8ed772e61b0246a5582242fa20339b2d6cb89ba1b9210a318eb4697fd21efcfd230de9680514a442a13b29d8cb2627a6970bb97bf09c79c6ed7a27247662b25f39c8d675b0747f1a6d9ebbf7cfa7bc51a7ea3a7307ea4fa2a463bf53a645fe701fbf26628731cbc18636567ae633a49e59f6f049447803fa3d4f1f79f38026de9b07d8610c9f01befb7054aa46e523e001c1ec3a4e7084de0cce596dc63d9c1f1dc03f35f9b1918e62acb2640102e1d520e900969d53e83d2dbddc80d1dc54bee99531faa5a8d2dbf8346c7ed123587353dd63823453de350545c176446845bb3522a862f5d675419da901cf7d2d1f7050abfa3237d42753203be251b0364379232d2d9d8642d52a60f6f4cb09ef29fa1e6069f97a1175f8447fe98a813cc182e33ffd8b8cad93bf32a60f1a9e63a79a7f7fb9162783b89bb57f3e73155ced1d0084d5ba967f76c89c61c1a3e944f3b6f78d6cd3d1139a315c5276493481f3fff9b6a6b40c920eeed9efc74108c6bba5a15da736680a23db5672c5a32abda24b49f2011f44fa8ff9c73609ec195025f0456d753c848dc6296920fc32dde2174d37bfbcb86cf618aa0d486ee46c5e1ea14a3bae4952af5d4837f9b8122a19d1e59b909aceba6c849c8b452cd6cef877a65fd83e6d0c6ee35886688f1d877612cb8e671d83216a1f76693d6a4d6a2ec13eb6ca2005328b3c91f51b352a707ef8180f320d6e1685c1ef4d87e3cb77fa549bc12727e59c11bdf8a9631cc272998253028cecee8a2914182b90f586d80e7ece370979bde683f37123090012ab9243a4c145d6349c2791dc44e54956c5e9b59fad017d3ea27d85b48a896671a0ac14a73b5ab9145d8ba6aebf9ea25ac2e8e2c4d16c5009a83d0e84ceb80e95df2cec4cbefc7f5b90a84d408e8c4855f9aa2987d9fc9d8a451f32b367bb1de5271ed35ea153b5d400a6d8050ee82f519bd930245a96c9727fd24d8b94dc53d4b4f00d03172cd6b7f2be163b6d16fd6247b01988a6ee6ce7bfeaff78e983b8ddfba4242730e52b57876e3719d1f9f6cbcc81620f848d23c31e3fff7ebf2afe5011e6466b1889e7ef6281faf8b18a012ceb96796fca9b28e78335dfcb85bbeafaebb0fa75ee2d0d391ca97e05f0fe43475135b13613206a0d88438f17ec8e604b007afdcb9fa1378b7cb96675e0b19dc6fb02508e05a7fdaaf09297a3884aa051b6389a52f921f8ff31970fb082df554226c2613b80cc1adff770024d6bf011c0f028a012597ae56f36eb6b3e864d79639810b8ba7258b18192b5caa80dea4b140d3c6f1d707acd2256d676ae90980ba80e10b44109211aba830ee96e1bbd248315c804d391a86ab7d4b3a4a37fed90d9867da4b93fc32e79403e5d78ae99af1cd2acce65d4f3384d9ceab71b1e93b99704c64caf17b999234361e378b9362d14be3fd9e6c268013cb1fa2ea8361749d635c0429f796eb15a685e31dfe7a76ae870eba120331ac830f8c486f6c0c4f07b658ebb9274a463e0eea101481dd6b58835a303ace802ae79ebef51add98a67b7ff7968815acf4504b9d360f7c0120a00aba1fc558e6cbd8324ec35e0985294563a8d7eccccd9e3d1557a09885770836eccc7aee0f18b81e30f85d695440b5bce29945cbf60ff402b281942d38ea33a4b03e9fcbbbefaac2c455e8a03ff3f35154132c538ea16f0605efb788c3ca8435f6d595f776433585094abc75ba581ec59af701f66dd6091623e4676d167\",\n        \"signing_randomness\": \"ebd1c6baebec97f440195e3be0f8d98ea95b323dd3ac532accc676f6aac784d0\",\n        \"sha3_256_hash_of_signature\": \"3f314de412aaed511ba8d7b4120a8ea79f8b5a9668c4ae904886bb1bc379e7b5\"\n    },\n    {\n        \"key_generation_seed\": \"18aa77795aa6d7ade8b6cdced81a1959a8329677f042283dc8ca71e13eb3adee\",\n        \"sha3_256_hash_of_verification_key\": \"bd09e4b8a16535a3b8a3f153bb8ff24100a48844bc95aac7ab7f112651b6d031\",\n        \"sha3_256_hash_of_signing_key\": \"37c3aa1e4c0b5bfcce2452c5c8cfdf312ab5a4c487d7b27ff6406b8cec5ee537\",\n        \"message\": \"63ec08b711ddf5c66036a13f574bb7be76445a1d1f83c7732b9f4c25fb9e799d4afa55817bcb39b974af92f3730767ce7d863b6a3406450dcbc5e0145d10b7d532da6e80196157c38d1b6d3c173f74d67ad8df24ecad4d9b59921418863a38270b982c4392225edd1845aed2199e2c38b36c7e0e5d2f3cc7f6803926d977c59ecdac67ca290658e72bad633358fcdde2a4b9c40169a0c7cccfdd93e4da3c3838e9308533bd468a9128c5a141c4842840e45bc8e4610a7c5e7535834c5ec73312a50197c76ae984b3521883f549be04e27d97580e6d85d0ee84cd0b8c65bfb1aa005c607de82da70021f8f90b7912c67dc5657e1882cfa6da3de1ba4ed823789c052649debc9085c74528162243133a6ae5c1c6bca3f730525b167d816485e40c208affa8706e3d74631eb4413032730a7647548b77579323eb03d36c2ec37d2389d4a17305f607c78f3073a2f4b4395bbc94af163acbe3c990306ba3f89af9affe785c3f6d102fb2bd55f0c1044034d6a871293b31a1b38e383cb926baf3ab4b5f79a47e9fa7b77bcd58aa35a7f16ddd11ff642069a8a327dfa800049babaab4afbeec9fa98adb9796fbee925bb70ee9e96540436e1473e3ae4c56d7099d8dbdde755a7e101bcceb596b9415f52374c8a3a73ec66b229dfd8cd7ee7d2cf1c5e7f490c7d9381d9321b15f84f640017851eced1dc80d32da3a0a57adc3ef37e021031866e278c7d51ff5ca8e9ecea1082423b41d772c5adc61a8c71c3d4caaaa3433928d7931ee715875bde2bfacaa0a7f799b45241c21bd2ece4a5944fb6890bf24908de58dd3c76173373254a36b0b2ac7d67926948cc0136dd9a5079d776c297fb6a585c290d5dae1c45e91153299eedb731e527f0f62e83c1e93c75fc74f9c7e63311562b0a55459a0d41e034c3af637eb29bc789e5920daadf265f42f2707dd1ad490b5f8a8d24a9968bff11a0c364a779ec385a9a33edb9cfc7dbc672ba60ce5f421b40634270b982d619f8e7960d32e1b8a76cecd13a3b0214dd34214cb5bb7fd530058d5de1fb9e4e88adca05926ce1f5597100f55dcbf64d47fc177ff87c4bd9f6ed7670fa7b7d339edcce6fc1eae069e0c303138689ddfd23396c145b79afcf68125989c8477bfc318cdbd69d1aa6d3ee41f4b1f9be4be9fa58a072412078cb9196556ee56fb7b2a2761dd04120fcd9ae9736f599c8b96bf8f964b305530a6df1f94874f36f07962f87acc0b285eda64d2e4857e26bed40e9a5dc0327f1d91259292c608d6c6d59804dc23a34d1f9f1b69331d68771e41542fc5d669cbc3cd7f8310f87e8fe8f6201e57b475de2318ea6ef9f7d32a728a44334cc9df28df77038c37cba62ea8cc5ee80e571879ad111f35b6a154fdf8d40fc93360d547d02f0743a37ebc4af178c6ce36c92ce6b80b6350202d2978621684a19afe1474155bb962014587b1f5a477092f42bc446d7811c0eb439a6829e538077abbbf03f515f1e6ac018efb05af79069c2569d2cd7140c4b1b47886064dac695d59fde2d8fddb35318d33edad94ad4fd988095b1156fd59551f0658ee666186369bfa84e30672e4659bfbf7963c377f0039e08de2c2d9803fc12d97b5e67ce9536af12daeb3b9903d8d95f336ff53286284bfe8d7ad13ec21c2a9ba93c9a97bd7f6148de7c8cb41ca75a9ecc8f9cc68d888faf6b3e75376b5b16f41e7e6b76a686eb365365e2074fb1d7efb1b285a2357b020fd3e47b89943fbc1596f3fa8289ad844386a691f33daed4b7a6a6729526160f2d32ba7f68ae6678564fca05bd811f208a8fa62f6731f23d46027008246fd4bf3c454a39ee225245e74da5910e7937b36661548a55a2270a9d27114ddc94dd9b9d4122289df0a5700222a977f15fd8e36afa1c4870bd3ce9b658e2d83882aac5f3db814346240ff8c8fba3f36e52ac9b441c76b6f104a0931bc45e202addcaccfb93a486a7734a6d82b9f6ca911448f988626846d413d987c5ac860fcc0d5f734269aef88d41a055794dce832babb7e306f622e5eaefdbe1cf195e320a1aceb4834b3e70061ec2d624c12eb35b16e5aae73053a3290d4bb1f51ffdf48c1a7218d365db7fec15bf0f710954cdec54917600014bde3a901dab1dec0844d7ff148eded9788cc85c0cff26e5895d91c56ba6950c0ba8fc6c773ab4a6091a5de3ac335ddc2110eb0144fd89b3d815ef4a26f718c1acb5723af1da5515442a03cfb9d90623fb21d78daf441000e285e9e7c235c0f31e258e6b3feac048db652b83e07848d2e9357649372b1a55975b2ec7fcfed19d0b6613bfdbb4b5b01a9aa3128ae137bdc1d8ffc3a38b597578042cf183ba8383c289c3d92f6b70aa9b3364e9fc5d43f3cd3f310d229912e91d5806c2a11e0bdd208a2af438be77b43680e2de67918fd414338a763910e1316965bf96bbf7df639266d075e90ee9c073011f6783750764fbe4906ecdd94ee9fb7e4aedb23ee88ebfb018c44fc8bafc66e6b454a3d0e332c7a6b34c2e8d1d26416ff43d768cc36ca9d3168355f1a281a6b2eaaeac7b64aabbad2156a1d781a78a896248c56f3491a5dda8c22c231aa7ae14bd558f66e6280fa65f20b246d815bff1d3c6cee6df9b4aa7f750307a7bf73850e6bcd22ca0ad74b4afc13cd4aa2fb7e7b588adb3a46a23ec88a34f13214b261a283ae8fbce8007c6ef6be255c33218aebecd3ec27edafd252994b70bd67407620d26e8567f4c7f6d636803b6a27eacc3b853706a8d57adbf7f7e142ff149c35119a6172d5884ede7c71e6c34d1b485a684dd56c9d670576b75cacb870a68ea7ff2bb461d9e2fdbf500b2f200110265a3cf24370a3f480da66f98fb5327b4cd796eaf0e559a5519f3c643b59e3b89d05d2a9f9da6732cdc2996408b7fab5a734310fcd73fa3fa5cacaf31ab04ec0b9734407c6dc575350212239ac9092da5812137bfc40f7735bfdf9827f768fc0363fc8c5739c7df828075ea2bbe6321d5a8ea2eb7e397c3d58a953c7f0baa69a96ac8110b125ee2e9701f43eeb87fdf58a6e6266be1136437599e26e8e6e853dbb6ed9df3931c5f402fd09b7e203ab36eaa6eeae72e908bd2b9cfd379bc9b407f0c882807bbd2e91f920eb24137002a48f1aaa0cbdf89fde5c51079f1d8cf7a014207f1b40773321ad952d77ce18ec7b48f2ca054e65420c1132ab67c832ee22ffd8672803cce3de7e9fd0690e55fa1af5f11611e3e2c71ced55e3e347f4cbeb9c93bec2b98e48495585392471af0ae589257ed8d01792112c798bca5107030f207ce567594b8433490d8ff1811f21b03a42ad0678927183321355e3d6908dc1125cdce038cd0469d72458b6cc5e67eb0d78c20819c6f3c4518b15cc63754ff8679915e329dd46feaefda5249ed7e754e7bd55c75cb764b6cc36bc06267b2479cafbb3f0bae32a93558190b65c85dcdc080cd56d51d4105c5b0717691d4db1893ef8ad550f55855b4123a38d18fd67b588a3a4c2a6604e874d721359352b235c17ab1da2758712af8179ff433211b93078735f909f985f557d0de52cb9203ddc67bf9dc8632acd8d4f90196af6bd2e79834371c5e9fdf5992adb04aea186af36f56271f763acffbf94df4b0512ca6b7ca8ff486504e565bda367e044fcd0f25fbc2a6c720867f95bfd92109780d2e6dd60ce90a4ca8eeb8c4cab289dcf99e687b017b37695c3b99b4fe97d7e5d52bb9813c04d03c9ad71770fe0986c7f3a3ffd3a261ac771de88c7acdef253e5ce2b50bc5c576d132b68ccc694ba883770b80f5ed7d527cee816527f69ca2c101747a0088879c3663037db5b\",\n        \"signing_randomness\": \"9f62a11e9b25ed3d43cc846b3f45629e99688cfcf09af0a673676bd209806b51\",\n        \"sha3_256_hash_of_signature\": \"4b5fd5766b0ac02fcc57be08d0b1395273dd77949f39758e495df462b1beea1f\"\n    },\n    {\n        \"key_generation_seed\": \"4b2d6ec32be9c5d8fa11f3fc0008f4f26b945064d98362ad912f452692ac383d\",\n        \"sha3_256_hash_of_verification_key\": \"f68e1a59fc40fe15a32a574b795c8ac4e2229aa943b7ae7669ab8bccc9fddfe0\",\n        \"sha3_256_hash_of_signing_key\": \"a2d0919196ef925812873cdea2a29491a25bdac91d8ae52a020ddc24483f297f\",\n        \"message\": \"7785a08a3892c97d5ebfe52475298ba444674086d63e17e1faec96f6b10723447fc1b8cc758d1724a33e26518798183a4b3c99a7da54038b86473dfab8e626eb3bf54de5581e04450b2821f5020c466505990b173db9f030cfcfa505aa04b37cf0a063876843a042f17aeb1728787187428f8d1010d532c94c7ab2e1193994bff0cb56415fcd2a96be7f7fc2c57c8313e795367a22b6a17ce3b803083a74fdbcf030d91c957128099d6199686f2bea618cee111aa9d55a6f9e8966c102d849ade596a1b576924de0e92dd91fbb01cd93e24aa71eef219a78430d84965672fe6af091d46dcfa9ab906f6240913c1286ee0a152666ecfe2c154cd3fb14dc0f9c173e30fc9958a75aa6dd74822af7acad243fdfb743e47e48280990c2870904ef1c902261d0bd6bcfda91412bdee9a28c628f218e7648aa0027d918b48ef30a9b18390331805c6739bf6a2cb69a0de8766a7b3a448910d181f6449565a363430ba1c0fa8b11e1a151f6cefa3870c3b1d8cd800983ebd41b48c5624269efb440df23ff9bcb31a4b02f6505dc862b2103f76137fc6560f893577bc3fce92ada27f291305f2345ac82a846854f172131b042735d4b76c6ab2dcfd32bb6258b23ac790af2af7624451172fa7a29e0c5fdb3dc3b719b274b2838ff7a8b25f272ac8ea90fa3c8010ac7f65633eb43ff7a0a95ce99717f35d3c416b0e0da30470b5aa20eb9e2b66315b9407a4753df8bf505b8066c5d57ec4ccdd2236b9c58bd7337925191ed7b75b92c9cee626f13eaddecb07173c8160540fb9f6a4d43a1e9ab263b300c08966c247514647dfab3b420202529e963a51f8d23bd0f689bbc4d67d5a603b876e8cd3ec0770f0d9694dfc30083991cf3989db1812b4ac5452358075534190f012f7c0e47734c3ba748e04910783c0b845484461dcea67a1ec731354b902557486b484f67183fc711d10f906c68cd01f46481d040f084271dd784e5b958ae05b65bf5d207efbb5fdeb25366d6ff4161ca3a1cb71b2b9f90f86a315d800935ac0086d85d907a036c4333ea347000a0755550b68fe3dd7686e416483781b563680146697d6fae8333c24adc8a2436852ddadf6061e2b16fd3829c0b55c2e9c2c89f64cb8da02a6706498cf0330742083e9ac4593a1762d32dc4e6cc2d9f4310014fb15debbea324ebc2ea1e1660782559b9b39fbcf34c85fda9ad350d195ad7587aab621ef7ffb63277ce35ab43b01977c9f8dd6c2ae7b34fa7b35d5fa37d8b3719e736f18734cb3a2468be9ca0832dde0b958925a377fe6751c4eb8ff1ad295355302f0a5ed4e8f8c33fd5162542b8ed7cd985dbe3c84401830f6a7eb9d955ec74c7f98b02388b4e1353317cdb5eadaac9025038cc01f8655c7fb9aee940fc4b282748b39d277a7fef462038833a9a8eb50a8719f68b3e858825911f294a80faede9d4c1815844c2632dd20387950003dab80b1a58e541a5e6658af7d4cdd91fd1c08735b584f5c69c5ca94f6b7f97a4761b127db394ac72e902db9eb4b3e0b884c448ff2763ff9add530753263688cf92bb746181c17294bffc2a0b3969a7bba429a481c425b24745cead66286f5df04f1e4421c56acaa668e87ba58e3b07a062d1da60cc6b411667bde6f466b72c9169965bc7781da78a818f779a9b3d7a577f71a1df49aac865a0d6f2668cfd2c77cfa8d306a14dbbde4d3a3818b07dc89d5f51e117f7bfd007d60f32bb1b6bb01e76862398371fb91e0a3d4b39fd9146c47f627a066618cf83c32e5c82592b418bd2f5dcd8d42234625974f988a6f729c60ba5eaf18c77b611dfb187a581e3a10268a965f650fe242ce2fe08aa71515b59a6edfc9cbdae22df3aeb22e773cc2eb373619e9cda23c236ca3f7845c2136e93849d9f6aa1477f4513358cd8cb4e21444c9e5709818801eadfca23f2c23ddfd5b4ebb6089daedd14a21ebf3f7a8c1c80bbf7d37973bd156ac5c4462d29dccb7eeffa22a8b6ce433b600532f33999adc39196f01230614767285089fb262d8469dc66d24ae0b77fd05c3ec02fbc5ee328319409b8e2d7b0ac6801c1c8ba86f793c2037c71e2a25f114e9ee0edb3b83076eabfdafedefa0548dae91e62cb7c29c03413235b8c6eb9f46be29de8f5d30e8d97db6f45687dc4719b1024e48b7dffd0d2b474b2032b4e69b6382e603d4777f3450e2e467c6d9ab2782c0ae266c320d36bf67bd6b86ea9721b22741684d9c0ccc774335430071a5410c1e34b4bc1a823a93a38f5ab4781cc593b13a593867fb634c0c705107cd278c6ccee6d842748bfbd2ffd205c6bdfb3ac87f693c25c832c86d96b00bba0af88dcfbc8ca4328765de27fbf1389c4ede28317bd0ee447f030990e957d223a5ec66ced9d16400af6da8663c4e4111b4584f8f0066cdf8258d90c5d7b439503e3ab3fcc55fdf933e06d704416187aaf86e6c39695dea8b8189ec1299670be03b6a636889cb7f10f04ccd67278e77886cf3f6e2a05ba8d25ab8664ea817642acf5db4d9b3ef80e169463edb6bfdf67172e88d233609b091bbd085b970db8ae0daa5048ca42d6a54042f42445bab03f9bf1accef341b7349109ba0073d3715a9073ad9bed258268aee9dd5202e0edfa5720a317ea5cb41706c0d235465becdc8e3ff0d628ee5eea6aaf1bbd3e18fe9217516893df115e979c4cffec494988b6f9b86026610898c44ab1547c5f8ed5cbf3c3a837ddb6a444bd3e803e1824e6ab931310fe86b36587f1b34b0b48d358f4b97e9774213de7d92571380be2199e703119c5b9836dadfc826b71d588250ac37de0ec05c5823573c102bce44c9f044507671c4e1723950a3c0e14968cbabbfeeb049eb723db9b23cdf0273525c29cc5165530a1f1cf830d3551dd6bded53954947d5c334dc9c71907cdbfa109ebc52d6305477c14159257af8c51c6f09d76fc0085c3d969ec60fb09145e66a8a7489611db3fdefc35202b8aae82d3cdf666034beff49fe49a45c5ec438f4118f338545532ced916de78e3bf82b4e55907474386b9c172f393efe895334f7323cbb2aa7ce7718bef5e7a23af734bd4963fbc7889aa5c50f3955b904b5e577d71b21a293d766865e3f8c212de5ea084a9d22748a8009a7d1858328a1bdf7ba0f4e3b83be9707629252b3339cef796696855a574b4a4896ca68c3d6a6824e3f593069ec0a571e61282f8a29beb8bd788f7b351a8939cdad9e257587a77804f2704f49db3305514b85b449aee56ee40cb2a75d51690194284aacd0855b02893f8dcd3091629dc548705a1085e5cc33de7726a0f521c149003df380abdae96bcda55c44bf9bfa1103150f049563e848a8750625dcfdd9bfe02e1e57489b5b3aa28beaa80f4daa562deabb4bb6a27125369415885020d237a92ccc3a23593fe2183225bfa2ff39b0bef9cb0425375e256bcd572175483f713bd38f937f2b3d4c1f686c5af60061e0b05cc3ebaab0ae8ba21e47a8318bee4a01516046363d152936a1344e17a65e08030522ec667233145a56001b8d065dc2fed0d2a9f02c981a8962f984916314805dab644a5112caa1564895121d8b1fd046f547be282cf979752883ec79af70cf59a88d960f3336f0ae61357877aaaa34699a876144b65ca5b77a684d850d09b3d42cdbfc4539ea103f8377cfe5f9e5432403fab416662c4c83226191eeb7f82b01e0819c081fc40e7b978669c7856067e8b582832dd0b92588103c2616ba2c7774c46840318ca2b1a3798ff7ed9fec087f01798ea2445b92e67e2446126a7406e82ff8d3711311be16e9171531a95c966e6befea34938e6f5fa660f7c7cb533a119377f1d26ae6ae51d805ab96a64c8b80d6ee137f634b384c2e377\",\n        \"signing_randomness\": \"fc6d0cf3c569484851b938f5ac018b833460575e28b2cb84f11b91ce8682e088\",\n        \"sha3_256_hash_of_signature\": \"a39094f5c3d19942694cc7d9b09d47ac9315ea9f5d711be9ff5a94790e073141\"\n    },\n    {\n        \"key_generation_seed\": \"196b8144dfbfb47ec01e96a6b8443211d6c9c4aa7853a8131b5218349bd6d953\",\n        \"sha3_256_hash_of_verification_key\": \"75562961949e7f4f1a7598b281fcd521b771b53152a09ed56bf38053a6f74aa9\",\n        \"sha3_256_hash_of_signing_key\": \"204214d34408d5bc4c16ef9bec0cc6668ccde4dae6600f88fda0fcc9c1fefe98\",\n        \"message\": \"ae3dde9e33719040345df8ea7e4c0b5e2cbc5cb80b34fddb959e2da1d67d74d2fbe5aab07c6357a9f3e5f6ef5379b4c75008e9077a1eb025f9023fe32fcd9076c8d2b291d0becf2dc624f9e752b1eea2cf0755fc9d4b2e4320dfd042c68577d58e61dad075bc1c3931aba78b473c0726ed495150d6a11a81dbbd1c840f5f1faacd54e3470e0d994deaca7e6e324a9fb4e581ab447a4ea026da3dc3c7e6ad55e88cb841e069eca63404cace0e3d4c8b9cec33bff6aa6341aa1eb69ad799c6cce358ca94555287d01b0192b1b49eb6f705e54fbc86465c4ba70134afc9a53c1c3a732e21b010002b49b7cc6f5237b794bc1d1f1e30a7f1eb95d195d5f26b46a704f77f80b092117ede1c340622ff32302dca7e7e43c2a4d8852cb508403b1aa8aca27a86936350264811550dfef05d72542c74d6243ab9d259202295a63f54c836cbf610e40eb85e9704041a51bf68578b10f7985c752dc35788e7b7754358082afec9e4b271d36974eb90a46f7d703b0cce941c3cd072a88f931a4ffd098634be0921d089e46637f88f9625b7df900a276b4bb75fc75921c8a8b6668df9946290e11fce4565a76d39d8fa55f324253ffbbf81536581621dee664a9e9e4f4fcd3a9765706b8ea833125a825b1cb30314b7c6c78b301638ead4311932fd4611d78572180ee441648f8bfab869874611c153feeff88a45f7a98206d0b2d97cb7ec2144f045225af5a9925ae7fd3db017e37259b7a2ff6c66820ddaac5651b2ec2e5767ddbbe18256b1d0d0f96cf5ee04266b8adb29b0ac5d55b73e1eca8fe724ee174b76ea1c0a54896e2bb565075f1669d3cca171657b66f343a634f4250287f853b52182b9be50df29021673db1841aca45e7263dce653f0dd84338e49ff5c6e3bb42f1a3c7164704a2a000149114d36bb9231606eda06c712a904c1e323c4aa3eee0bce6062a9cb956e004407014adb58eeabf486b38570955c30f2b5c28179f86cd5ffd603cd441a1fb06519368886bff9c2c127abd079346d762e51c311f196d5f825b45eddd4a48c7c2123e10a3d369d772750987edb96968c59441fb2f47f8e33fa4ced3006766c06bb6b339ed94b8fe57b20d96f1a27a61966289d8ff5072fd11d7ee53defe0014a11667d0a6c988bd16629fb53f269130b22a13aaba2e9f70dcc93d3bf6e611efb006ba585fb8e8720357e25df69c6df388fac792f87cce801fa49a8cbead1698c11b82c4f85fdb4d52a2a808483dca7334295bb3b2658aac18857878730831622124f5a254a464de459f3528c5194220e5bb1779c8f5e3866b0d60931a1a47502d99e2b186785658def57aba676626f9ccaaaf449609b07af7b57c78fa5bd06b2ad2927ab491ee461a94ac37a079d9bfa02203b09f7ef180c1c1c430518ff2d3f2a3582eaeb6668060a2b544e973e8a2b88733a902a0a80f8e4f30ac5d0223c1076482eb2ca5ae67039597514a4866061d5fbdd99694a060d0d0ee43a1b7290ffd7d796a9f1a2142db6e0f154aba8720396b6de939e668447c81cc828ff9d2a014fe001ca718c1d6acf4c08bc7796d344a29fd8913e4ce71e986c46bb66c2610fa797c9e1639df423c338d7192638f621d83a6802e72e38bee3aab064fb606962329997fe908597e7407cef098d4591e5e6011caca701994e4acf572f7c91057d3da06058a7dffd3248ee3333208bff27473e6f1ea3914c5b2056aecd7aee07f8dd26b3c2b8b9656ea4260d38e8d5f23c925a4476754240d0702c5859aec2329e1cc3e426bd7665b2a4ee2e75b41b561fce79690f64d1068dd35a294a8e8cb43a6aaa901109f0e09d985b6e323c30a017e75bf01d0aaa739102c1a6667ed48e60dd4499eab862851558dfd17229878f5bef0cc29fd19f59835579f3cdd4f85684e0d46d9618a205de3b29b0bfa5fbb36745b989211e2ba711527d32cbb5e35830df4549fea652377ebbac6d52787f9ebc3cb687ebb641bf51d3e22e98fca48f99584fb1f3bed3f97f33ebf656c5795055268f49985cea00819a07b8f4b0ecd7beda95eaf11e3498fa7aa414c54c38a08a841b012ae91763be911daef803e2ca385c9d4cdc642a0b343db6534c10d9e1755b7b2de543afe1d3c90981a7bd907e9cb14367243d9fdcaa8776aee5f65ed6dc02f633bcf9f57dae39e8e8261dc10029df7b7124beb67dd753b36892481ea7cc54ddc3a60ef8d4dcec4d5796dde0e7453bbf0fd93fcace97ce5048d75ed1f34b69a392e1734e262b2b2a1e246331a373b5cf1fee7bb46096c76349b0f19be63fe539dcd33a8450be894c2dc21beff0de6a841a533f4c9949289037d161bb97dce31cdff4c1e0ae36b4192594dec3b021e8f3d5b500c244cb122974f8cadf125de0cf832a920dec3a6f7150585d0209651b0faae0f74a36fc8779115b96136805ddd4f6f3a69c06af472f369f481359ff834a0fd2f9ae899ea36b9b061b63d07c1d4ed7a373acc40ead808564b05fb0c6e656a80fa3865aabe483848d14d1dfd66d7ab1f353642ee3417869da21622f6af551659d07e6c827c18ea36e2c5e806a9571a7b05bbc1ba283a8984bfabc555aacaeab2453573f782a4087f0f903af34596e83282a2e54773ac33543bd353a3f855bc46810930c3635a9b70ba7ffbeea95a129ccf9e9538eb11e119a072f806130d831af7e57d332ac889d7d9e6bbd1c65d64e089722f6954f126e64ea939d98084d434ee74b55c549bed21d11264f8b5e023277db52b03d7b8a8e75b12b11d62052e474e435707272d72d00d92288ceddcd1abf8e63a8a9963a48b54f492487b309f69cd90c9ff54b9c5a55cd2bad4a2e0a6b00b188fd6c527a8184bb63670bf626a995815810cc0f280131f5f652ec20609c7d3b910e4168fe273626bf0e2cbf05bc9ccd178ad91bc25cdf178b387dff0b6b40a46fdb6c975349b6cd8ad103cdc5dab8d09d9a5b55622e74564c1e789c5c185cac04fa0ed6065b9ccadb1d5dc80e90ab244ce1aac516b346adaebaf7a030d66fb90fd070ed062a41e0b70bee3b07f1c03887de5f79d70f9955b25b8c8201602784ef8a60147260d1bde8e152e8d3f992cb8255adace9d5dd2e9c856c47537742094190aa867459d20989db11841ae44824979c0a2093d7edcaa13c9de25e6eecbc5124055f17466467e123e39034502ba966cea873997ee25e52de2dbba874dc9ac222b49967b7bedb5c81be09827cab782f458795b2903d72ab16f4423964f82dc69c138eefa3273bc10376939e544964150d9df09e14be08cfca06c10bb2c315b1b676c40762f8209c0ef13cfe5fad76cfc17fe462d8330f78bab072c5465f7a26d047fec4bd3b918c9c761b91b02d820ed7ef345e79a66fba61ae13d3050a27488cbdbe693b800f1e76c188ebd8118c9432eb9e7124d35a1a038d237918f1db83304d10ab5dedf58c6951a92aab1a1a40e180254e730eb43b566a83cc71fb6b9749bfcd3a90b964966cae90fad7406a8a89b1e48c885bfe2db41c1996f20dc9a8dfcba1a6f2f307ef8fba5eeae9631c2d6328d90f17679dd9e8e9660d6bd4c8a1d79c47a5fd46bd2accaca2d5c6407b0f7f31d093ceef0342c67dde3f1ba5067ed1500dc45161b8636255924bf007c4c870990c5dce098c5a26386ad84d0f0ce4860349a147a4e7ab80151fa63882590b91c6ad3e70a68e6fec1a2cf65881a6dc38048fc14de71c702c934c5d3c4cf4c474f906c3400364bc400a7da087f94f1accb68439a9a6ffa8c6439b2cc5c0b17a7d649033798429f211d9de12b24d117583e1c425c2c0348c625cc44e9b976d319e72d4e09d5d6f36ee243f5fbcb190e84de56eb680dec8566f5a2c7d5f595116c628ca09401d561bd78356c634419225fb01cb637c46a627f6026d39ec1c62e9a3e85fae\",\n        \"signing_randomness\": \"1e6d32286c66aee9b6e0d5971669989bde85591faf4ebb36b343a4ec4f8eb765\",\n        \"sha3_256_hash_of_signature\": \"b44979d0b6d98ae328f9ac301a63592738f66025161655c39694e86510b4d77e\"\n    },\n    {\n        \"key_generation_seed\": \"c171793029d0cbaf8d2661a823243ad50d67f2619533180f25b50c94b1310389\",\n        \"sha3_256_hash_of_verification_key\": \"bb5c997d081dcdcd514e31960226cb0379d583dcfaf714d4e25d47b172a538ae\",\n        \"sha3_256_hash_of_signing_key\": \"9468f2168985efcfda3f7940d252c55f47f5f3fcbfecbc95be088efde88e58e3\",\n        \"message\": \"a7e941d3c14e2ddb4f971c9955868aca753a73e8ec6845ed6e9d3b444c826480f03ac771f92e94380bca7e50303fb79cba608e351a1a67bf217b9816e2af9f89be8a79f661470ca16bfb2c99efde97859ad1d217848289eaf543005f5c231599ff74299ec2a7c737ff94b7465de11f80e17d4fda264de568d8767ce822b3ab9642d95bc89533ce05fb331b86e3c5a296e4ea4c637ea458bced1f89355c0270d083d4920e72112ca1ed486191748b4f730ed52f9803d05a0f2f065be03b2603d6cdb154dd7765847d656b919b08969e41b23f9d376135bd5d924529410392aceb004849550e6cf2903181c9a395fd469b7de2c5060ed22922aa4d7c782a33330714a0af206b29b4fcbe0f12c18948f6634ffd7f2710138020e273cb0dfa735bdcde9bd6cec898c5e564ec71aa7880d97cc711412f28603de293cd5e904e9156d4f6bfe2be15347b9ff7848eb51cd0785d6a649ea3514e02695c7e3c4f021a9992d67bea1d68e5b17db2e0dc061ccb5ababa49d110055467f9dee61aba8f3e5c713e94a8a96c3a8afb698887c1fa4abc5157ced33a834dbf0f5af9eecbb5f2ad7b63b4c2ca94a117c2b92f3d51900926e26b101fbe6207ab0884cbfcb15f9f98f95b0d08e29390977f4d3dc710eea3ae7433d5ea87a5f710f1fceab26d516fc19fd272f6b0f01ee167f06e6c33273481f280ca64fda0549c8db884fdd467b93998360766d4cac4c8de783752fb6c6d7b1e47df23ceeca572f2ad3e2b628e31984b9054448ed1d90658bc658a9caec0485512ce084a535e7c8196b8bbca5d26c105c41e083f8d56f1530a8c1b36a7f3e41fccbac7f342b2d026064b304444192d4873fc57978e44151896ea6c0f13d017f683b203ba1de677ed00f2b737c4c69e53ecf16ab918939e120e9fe14b2243eff0116b24c6654be09c582f1e62e75efd8593e62e45ac36f717815b854b47a4ddcfc91fc533fa85bcecb6e560cf11e46d2f334b396d68b275e7404a70f2a805a64cd458a8e5f114a89124ba1866f917749ff32e59ee71948bd97f2d4128beab8bb0b6b06d84c6d466bfa30fd8100e48d951d0b3e787ef9611a56ffd64d970dbacfb1b4df064b1cb5da9918f5c58a10f0903b64286b1c1ae5cbd00eb8b363bdd7a7aaf2111c0c6e86e15abf6c1e761fbf027425968cdc19522b44ff3f56335c59760fae6d9028e76b284330f7510f2b55b6f46adf90311cc785d35c2bb49272be514cfbbd7a2b7b2e8c0b6dc28cb683d3d581f547f83bbd3b8c7b76925e44e6da89d5eef17ab0bf4213ef9c05b7b473901d483c647f416b98478c7100919c28515b617a27321841baa174c1a2d3494395294cebd48eea14bc3106ca9c69d9f6485d6abf1c2b1111a8bc602454685ca61ab4ee4db9f413caf8f0f204f04d40cd36fa5dab629cb53876db3e16372e626b6bc892c63c6b6c503c9d22efe113927395206bdaa4b83d4fef4feb42fa7a71f7ce2197fe282a02d0fe50f96b1f917a67e50eb79cd3ffef064542f7beb51ab05b56afd7aea5f4164cc9ba37d8fdb35a3deacf0cfb555161e7e41eb798160798be9d01e3de0c4288e0bab19ae398e94353adbe9a43524ace35830b82fcfd4b1dc2800ca4c38a56b7cd28bc3e2f69a0ac4655cd79b5789a2b72eaf93b018d4d6f4c983d08932b22c85af6fb07df0a786d98820e1b06bc17f62d6e39739790a13049252f1b9102dc692ceb20c270ffe9b902ab7ec5a4eaaf47f7e2d31b2195f5f48ad18d099c33384141da14e151ba57f6b1bb97901457202cdb83b5c713bd8a13f6e3e276c7d6c130ae287ca8931d9eece06ab7cca124d6d02d497d55ea9151a95e8a4dccda72d3f51a7db3f2879918753683b01ba1b154da83e6d84ddc9492f2dd8c128a30c75174ed1a6b8d93d08645270bde247782e882418ea158b2a2153b2d8f75c09932f324ec199d26e9f3c4c4cecd807367e3981e137858b98bd1268d2c894541ec99bbbad19a6856ea16a1e56b7b193baf79ab89d4e76327405658c4ecb5a8626302b3a4618aeac7e11a1199c4bb08c60ad78fea4827b59cc883b2ca7038d7845106de9174b2b8c17267273d23418af560265000543ed9886884912b4160fbd372fcdf706ef642cf1829493884b6cfe946ecf6140106dcbe11b3746e33fbd4b5852b732230b9047004f4fafa0d4bd7043c7d6595accd1b2771aaa76fe05a0c80b7b221dbef79950fc69147816cad0e52c05e72ceccf55fb4dabd81ecdb476417dbfdaf3b555cc90573cbed9474266c89fc55ff0bcc55602a51a1b5f91e425a1a58dcd4abd09bbc63933fb4279b9e21298f9fe0cf1a93c4a19695240e8978d604047abc7239f5053ea650d781307c50dec4d5e2360adeb9aa02c0f6fec5784784a271169ce456e1c32bf984c3323656ccc588c97e0ece5a40fc7b4ddbdddb764edc512de63270f07891bd160f78b8ecd3a4d11ec4c68ea0a0fbd0f23af9ab261a110f431f926c4995b05462e0dabf29d9660abbc660c9a675628270cea7ec5ae9b6f298b17b2392263700b8ead9c845ad29ccf109a2ed66ed5baf9c935754aaa1b84be2b5339f9bf3cf5e80af16967863fa8dca64f5fe873da4a6d33e39a592749b721fec203c0cac527ca96de7a96ce9a540f5da1902c97f960a05ebf0c32934f9b81244c945a60fd3f176dd8c261690d8ec98d19607129a50edd51135ffbaebc04a0961acc5a32fd058ffdf2c6866bf90a3e177787e7061bd2011ec08ec118ef0451cad010b53c68d0bddc701d10920d697ea3439b1a0f96e6256b7712f59c746d1c74c20b17d461c3df635eec83e3b8e098034f119b9d9a79ada735158eac3f434e805444d5ea2ec85cc8ed8f5bccab7dbb6ecfc2e385781579af1263d9fd32bee32e01db94703b5c756b894def19783b12bce2a1a8d29d96f329cb0791d697be7e0f05dd5c9dada52e1b8c1e5f75a0fc90ed8c05bdff86644b1ee61989caaa271061d4222818c894ae9eca2da7326e5c24ca1eeebe3720d2127ba997b0c572ae30615f8bc4278057f4762d46a39b934ddb2a0903fe1568c1bcc6c37e1f7c145eb7cb20a6a4b3466a7aba58b48be94f7e14cd20c87b2768358d06e3f607fe5e9dd1aaa8477975660f1e379b9ea26cc00cea8cfd6420f2fdc7ee6393aa17cef88645b821f8f42fc7dd97b0e16c04631f86ecf1cb76a6502fd1c13917ceb26a83596b117d5336387ddbea56162e8a5bf2fa35e697245bc7210cec13bfa694ae884582924168bf8ee2f61a734e37876f363225e5ae19b7c65ca6afc31c8b37bccb308a9c27f3e9902de365e288e6cc46e329e78be914b85eb980c0bad932c164671ed395d5d8317c133e2e000a10e0d20d0f408019b33d9a87ed7725ea4c5abad67e0cafbff31dd236e59defab7ff2cb40f479b56b261a32656f016deca5302a336ca15d10e0afcd168a4b922b79c11cb21881220374492d64df21453b41346a85174a0a4a3c1e973845c856ca70d6d25bb854d0c6bd3c75cd73998c7f64e35a58dcf593c85c2440a6aba4e470f87e6f9b4abe127b30f8992d8aad0be38f008d9d937582eb3aafc68f516d5aaf2503acc96e59a151d2d4b072ab6b38c54928d6656441c709f1c1b770ce6efcece11f8b3602eab63e0c629bbd8a79a96be4cdb072780f3d287b091fc94ff2c0d347fe280bbac308644bdb15a3c653863edd945af0ae725507507b82c283dc9909ccacbcf357d7a19703401b6e4474b94a6cbae575b942501a281b8166fdc70e6b4b60c2f57a4d66fe1197d301d0e0c7bec12cedf9496bca2183d04632711a79c8374b6de35c2eecb0239391c2019c720894bc7a635df18fceeb9aae16b3ce92717e2c56903d20d0712ef80131b8c48635163e97efb1fabd1500d061c93ad935be9a65a45a92e4a4e885268e712efbe5337214701baad4c73e81e73bff19af131f0aba105baabe849f\",\n        \"signing_randomness\": \"0b0f308ad57477b710ca5e549115be1d4ec0d6c3509bffa0e662f441f7248779\",\n        \"sha3_256_hash_of_signature\": \"338e7f23e47a55b5f1b5629153e3f1f18561e951750a5277709468548a9dd4f9\"\n    },\n    {\n        \"key_generation_seed\": \"615fa91f3d206b908649399f216950ec7b2420eb04aec6abfcb7b4528e8e33e6\",\n        \"sha3_256_hash_of_verification_key\": \"0053e6abde4c5422ee3a08b197b8cc6de9e300c674fde49a1cfec84f5280066f\",\n        \"sha3_256_hash_of_signing_key\": \"1d50336430ed72c06178961a9befd4aa59241798b94c90b7d8ebcec6cbfca11b\",\n        \"message\": \"e43eebe157e43d9f54130c668a153907d65bb19856a1b7c2fd5e2c770fd6bacb13baef951eb758485c128ece4f3e9377a58a45eba1c3a9ca5c94b50714088700d6fda933ece3a6989ee77a824a9e99674748a90b7f227b589250c9e156a8e50b74a7f49de036fced86ca0d4c02e217eefcaef7234f651ce4380b86389d7331c7657ac283f58c781f904405acbb68661310ec6921c1fb7483e74116378086d4a0c9a52af9847bb3ce0fe97f5a7c2cf588db3b6fd725ca83391656cb38fcb6d79531e56f5d42fc0cc20d04ad7bbf57001bf2f8e6b335cc57ca2db23c247ef9b75bbba3159030975d65b9aa7c10e0fa4f615f77126d5271129d8839a3f8da30c79174373c4ba643e4c4f0cb26bd5b8b9f7ea56de459eda15037d8772478fd9f7f7e06f3b422df0b425dbf1e91d3893ce20f78cdf1910c5d4674efadf122f41d6c7d6290df59fa029bd82e792e758ad4388f9d352e9d2fbe3e58810c380d1cc5768865d24bdd92145dbd1ee0d4724c769ef5cee12db2ae2708b4c8c7865e70ca31386388d991d46c4dc4dafc5ce66cb24d455bee01488a7c764a308c7054572fca0cc74a01a2b1f191c54146fb1aaf55b834f998b50909f3d003271e6504985dc836b5c44655b938769639799f2575bcfa92f13d32b283a5bda11177ce1f66d6b30788415bef598773e87b4c8c41f0ce6633b6c945a3b4c46b74f30945efd99cf3709fdafaeb4bd4c6bf605f89c7a9b4eea1a6599f0a32ce3f2c58587ea8bb3fe6495d92f2feec52bea3de2047f5eea7ea1453c762201ff1291afa87923107f7ff586e00d07824ee021649abd2d6e9ef11a1d31726ea9277134341ec57d790949590a963d25d6fadfa9ca21e43acb7e5ed4cb6e8bb36377c2618997943cd100a927d395376871acb9619bde9b1ffd5e48e271952613875fa3acd3e1f2e872f1d672aae6e2a575a4fdc4fae2dc6a7196e7eba94ae5b49be41e7295433adf49a6d2d945f43699d444a726423cd9164b9e28b0aa4485b0c767a9398df5dc5f23d27889c14b1abe98880e7bd5df9ab3d1321d5493a0a8b91ea4827627a9b59308cb0104cd8da7d9def2d47b27074ba007401415e900df03f251c8aa425f0fa59d74c41ba7a9288c8e280141caaf6c6932ddc4184f81f5c33f0fda005bf3fb6a0a9169a709875ae475302d57ce96d3db332188202597ff29d1f9ebad2b0ffa27c14ce9cca58c923283ba10e9fa1689d6c2b8804225d706e09ff97ae9cedc27d256e8736daa54382040648f2f6bfbecd6c3a9bfaf5d1ed23ead00eab351f1e0bb4c719ae6a1f5d12e7f09ecea62a2f554b18397fe1400da1eb6694635d7c9c626e0fc82cf8df6aa4ca88b69f78cd065c53f929baa58507fd3e3d8124c4bf287d452af47af9f4d926dfdb529a8abb8bb57c5c7611a97053a0cb0b01c754cb479c6cd3a3e867bac33e45ea0bb6bf77e0b2ec2f136dac0e259fa309fb5f6d8e7005e1696ce203c5d054e5927a87a1b4e81e73f22fafe61d7d64cbfbe519d39e716bdcbb37657e71b9390ff04b3c01c6f6842684115cd7f5aac208eea48906890248e58d1615634cc1263cd3adc14b67f1a1a8ed2626e7237af5488f5d269973f11458e3e4fc2ee35a4bf49c2f5f2361939fa243fa8f33b54eeeba9b0453701e367a7bf4d698c62da64732652c68c20a956522826f8e29a764ba93dbc98fcc87e59a1423886694057e131333c5dcdff3be7a1f0d344a2debb90051721e0226178deed353a136f69481f83651be3281c562d6127914cd24c38ffb327786086b08ebe89d03a33bf7b5dccf90de9c4d907d308e08a616c5343c116a098786383009dc70787aafb4529cd27cf85f946b8b238ad2f00df109fc84cdb48bb52b73e1de066636176e8c6c76216105486c553511df1f0664ec1e04ee0b0bd74a08070207486b7f326c3ee73188ab5bb7f8f5643093916491d62f0db18675ba4ce90b2ab310bba4705b65a581fbc5e76842a99d4926ae5bf7b8eabce5fa30cb98c1bcf0e0708da970096234d47bfe23a4f9ade29be5a8b6bbb748ea1c13d00388ac90b65ee10be6a9ac422ebddaf5482422aece19e702f6d26ed954d4e489cc48b2e39a6f168e98e11c1dfcb4a843354f1afd447962e5090ccf51ddf6643ce0afafcf3e4363187e69c31ab796132eeb04f2d4976a576b9bc8d9b1d491b74613c1af32e3d2def408abebcc27e4a915c983e10b6090fb2de6ff9e60c96cf4f940b09aec048e7a174711798fd76db15dcae0e570be3ac147e2f8777a522555b0898bcd7b04abbf060fa72b04604c9a583fefd02b2af9fa035f97de4daa4ee777f9d6985149db6c2f0a33ee1a1436b38dfdff87f831e83399c6a884273e612433ee3958f37c99a748df151e3ea011f4df5f0050597685e0230da1b1c7095e1203ea7099ba5c43e58ab0eda60af65291c3cc9a07257d71ca6c9eab93cef41294853a67a5b11f9192c96a36c701f142dc36b046218bebad9904fb765550598f8e2f49f5f0ad2608117196751e7e4c5cc4c3ef425a921c1ee15f37a1f80df1e24163ca145edb0fc4d988b8c7167acf9cd94f919ac96e5469859fdaec54e1970007eb9699342a9aa044a8ee478a3ecf8b59b0109ea7640c218ecc1e8cbc5e2fb61a1748b7c038efdadc2d096bc29d95b1be770d097afd8b0fe02173a1b3d7110f80d6c849f1afd1b01a60894b16140f9b34d96071a753545159c4ffa4dbaa938bdec287c6b83751c5e699724ab355d1fa0e081db286ec83343877c520e856c4adc65322aeb39cd87b7d8e4ff9222e085ed84c58b7ff513ad77f8a9eff2760a03f69ae5dd14dd92dd3f2d3d98e97b1987086b3eef2f2e822c851b7add83903786c050f30c4a4f4ba9361e49acad503e2a07ea119752e12d4fa09dc83f7a48ee3dcc1f09475960b6839ca736e498a128f78e58279063d839aba88ac9e5bc24bc07bbd2de1cf2e1ccc5987e63f83780d0ecf07eae21c8c752529735b37c980eb320dc949468c69b17da8ad612825a84d0529eb97ff8c4cd225fdfd1563bb6c5360abdcb3339434a298ddcf5f36188f3ab501e505828e8d2fd6dda062ad415c56414fd7557170f0f57bc5a401fa648699f3c7f7fd8f1f058849b817fadddc24726df851d3644414f55cade30a5764914675d574ead4d4db8725866a6c51bf0eb23b12fba1e101a6f3bdb98a2884d0f2b8deb3f279e9c38ebd0209dd05c0fcc6ea715257355d0d6be2c8bc7835187cdaea43a8ef9c59e88af6aa667a697a3df8bde250eaf4341a835b5ef93cff97656133b49e13213949a3f368d985e0d6c793319f4284dfada383137dc5b000b7fdd85f27865dc633562949bbe4fbff75417ab109f03015bd0f67728969435efae791ac72c6aef99a385a3e8b4c35f58380149c653fd78391a7c3b26a3550d37f9639164979288beee99e36ac6f44d0fcbaf0d210839d563a6249059a30ce6f047f5d541fc8a90a18610a8befb9493c5ac804d34d40881ca82e673788870705bcd585044b11f1d9bbd6b17d8b82b7ccc0554d1e3aa7f2762fe01385571c9fa7a103d07c1a209504876189de4b3c5910c26c5f33ea725a7d57cc30a6ec8f3eecf2409f1234a094556c0f7941cfb30fe86f208feb73c8e8ea8623640afbdb1cc589768a714cf945731debf4519b70870fb3a50f1fb368ada3fb217704a5d46d879ceff9bb72667acc673cb196afaa0db1160cc2cd7b260deb791a94d0988ed54b7e45f33e7cdba0fa105f3af3cb1521ea382b1266df304c900bf53e195ced03871a22c50da166bb9441cec83607083195d6cfa17297b678abb5e03950160130b47e25713b0829f64d2552efcf404f65798a86d5899b72150a91ba00f7dfbffe82531497b60c31c28992377a2dfd5fac8a9c16c835ce4dc24d0389277e6355c655c8a33c89bd48f55c13ede24b9bb348dec89612f0905719743c95c0e8b5653855676ce171f812eca405b6f96f2212d1a5369a11379282ac0c5ac41d\",\n        \"signing_randomness\": \"8dd2a9abbd92d21f6962622708f696df6957961c0e80046a9c77a7cf9e3e364f\",\n        \"sha3_256_hash_of_signature\": \"e9552217cafec8c51547b87ecb65a00ca49aa4e382bc94fe26a635d671407a5d\"\n    },\n    {\n        \"key_generation_seed\": \"626c19b8553b2d9e5a47a758615d80b15be11fd016d3a1962d8de58ed5ca2219\",\n        \"sha3_256_hash_of_verification_key\": \"341d917532646e4ea27216fb932fd47d6dd4664f538ff6a0a27e2dd1f4e60e11\",\n        \"sha3_256_hash_of_signing_key\": \"1e1d51c0f5bad950ba5f7eca8daf1824dac2c4cf9f9a034633992f25aaf2d562\",\n        \"message\": \"c07185e0343df2a4201649ad5de4cffa20baf5dd43f5e4a6c81cd5143fe72865a7c036a2dfd617d96626995c12efad019ff44e0edd7028f29e3657ee3c0d02e9ce83ef0a648fd7cf183a7bf7c15095e0f9278b14fdf6c983cdcf2987dd0cc085400906dcd0d14aba60124f4b7494adbbae3a8d6052122575f99792f7240eb17864dc6d231721140e43f1110e73eb2e3c05049783b33aac4e4ca0a248775baf81fdb03d114508928bec3169a810296b5a4dac27e7c7f8d01cf5943cf4d8cf6ee6f9042bb300e50eea3224d35c9628e38c368ec3b42393fc820371db6557216a2c2d5a230fe3a7c6bcbdd89a2be5cdbe7f783ba379b6a4237db051e6256dce14dcf641190a956e8e85eb2638736b899ed045636ddb7a351f5a4f4108d9d6e0413f92b9d392495299128a5f4acce8c7747c675efe05ed7182db51c515b345029440ab61a904d2a390122680c951ed4575515144c5ca80d6f14d1cfdbb5373b78e09d04d0544151cfa1240790cd31165048d1484dc4d11d05057071db3433df071b367e00fd38c386dab689e4dff6fb421b2a95ff54dc29375c9d1c18a76c79acae3d3f35d4cfc385199a4ccaf6c9f0421bcf58d296ec7e0d1b95a6c4bcbac1271f94e438360a71a6440275591e41389b30caf2626a865b9e59552cb198a1d4453eba6d0f6fc491a8a7783b4a8baeb81e54f9189ce493efc1c5d830a4f637f2bf43cd86b91637611415c95685fe79966174312fdfbf33a646625f97521b5cb1f008135b824f1d6d8373006c7158e62b1f794ae34548a0c6dac8b60c559d81580ac0d84034a501516ee36cb4082732918365a5ab787face591ab02be6957ae4bb96b58e2b173da019d3e0cabebeba0af775779f14bfba8f595697731522df3c80cbdec16f6acc32659cf5daf193178307887ef1be1b48b5806d0fa9868a7fb853708b26873857786b974709c687d6597bcf6c7e476c1e47cafdbf30b6311ed434c0f998c4065399c59073c1f2bab1d46104e74ea6c976d416e58bdfd24ccd957cb431870de5da8763992ef68bb18075926b0e4e826095eb3b8cae086fb1759c94b873a1f4df477e0ee9eed8dfd7c77508b3f0c67f69be04355aba9344960639f6dd6b3a956dcd66370338617a365579c5993986b4f748cb7c990344b209785e22a40fdcf8f83061d37c9f1351b4473d6c74abe6b3eb2a7d62ca0f0c88a0aa8a46973f781df0126e8d55d3e9c41c2e3884f84fb0a06c484cfa0c9a0dfb8cfd573749c711c7c236b0f2f144e1ba4db2525c093deed29434fe43cb3040c5a374cfef33214fdd2d660398e91bf070a4f5f9746c2f08c41256fd5e955891146ffd38b155987e6a0fc47ac2a5950509b9e2c86b9dd9929378f43ef3935f1562672498c5640a22315be15b001d4b01418df8eb41dfe5c570e850582d8916c2e7fc2b728048e24bb9d1e8283615e039c16a2fc61011631bbd8f2beb24adf9552cf5797ce05d9d1a7e7f3f5455017b127d9bacd32bad0cdbd3991bbcaea5fc988ee7aec0b1003732f25489edb0a1f9897247cbc40e60f1dd276259ce19deccb90067f7293a68b683fb5232acd2217b8929859109d6852a43892098630a67d72b1cf4bd5d58e20c5c18b85d69df74ee8cc69baac7da48eb71a160f03b68c6be87a4919736f14363f004ea3f41dd37fd8e621bf433bca71e17565e060f3c0f889515d0a8c17fe0d6d734ff756256b0a62058b95422257780de000557df289f47910cc272a14bec737c0715f204c49f03150082dc904a5d170f7383f04f1e355f50f80d5461cba53490bb2e9484806d369d61fd00ed1ee5be518d04a24503b1c4c08c7ca084902a3942c04143807203287a985eb3fcae3c5309410cd9b9a548f54ded44321ce8c2a04679841daef7fbb6aa11091d240afbb467d9969c31c1cbf6b24f8cbfa20cb4cfa404b1310400271664763e9c1cd1b6fe5ff2a0fae22ab14efc016ccbb19c5dd5d047750db4addea3e7a193128a5f4d7bb6358f21b39a44259695904de3440bb28cf9466b562065c387189eac2f7522c9385dc2a607f6f9335ff8add47c7ba932659aff69b1f26ec8655bee4f97fbc846e48111cbe25524873d1db2f2282d0472a2aaa3cf491c26ddc5e1be77866a3b692e417e6717a4f4454c56f97f063b9e598865b6f71136d65ddb0f3cdec57decd5a57366ba96e4315a88b4ea3479321468ffff508d23b0701a62ce0cbc0fa37c91cff5c5a0433fd61ae11a922575f5baa714de46a58d6efc79bdb10c9af7e9950a61d44b3e17e3b5298501146485b562b1570ff5798b47641d67091cdf90902b2d762e3efe94c540de4a28269cc416edbddd4d43ac2fa82d638dd9bf11f3bf22fd81cc4bd4759d7d864eea0e8e8ab71796254b278cf9b650d1fef38b8437362b2d69ed84c54498331c6899e20c596fee7cad9ed8d83d86774afa6e56a4ed34b0b0842b21ccb67035406dedff0cecb0cd089929ed5ffa0ce210822444808bad99af603082bfe5c98ee4653349f8a43db64cf90190c96b0446cc9cd23e0d75b47f54a731e8bcb0a4c67401dee87876011033d2a526067fb73786fbc1ce696130fce5d5379cdac6788875d27c04783b1e2ef41063d57e3d6560d1ff48882c39131c95bae5a9c9392dab6cd17eefbcf61c464a4dbc08447443cbbf3fa80481f3bc1a5806042c07f7a7ad435875ddb1001565eb6b7b872cc6c853f771c1dd5d9c16bc27aceb3c7690125c1907c7ce904852108cafe76351269a3d3ea8812fae4fae35f0daec8e8b186f760005524998bb5de475e4df85209da915bdc972218ae7db7e2efa05a7d752ae61cf2f3dc26ca2d282c8e32b4838524be460971e077348290fa0043fb7616d821a71dda3a5fb76bfce0dc84aaea432df32b05133a26b46165297ebc45024777a868b8b1b0dd6f97658be799bd366cfdf99861e916f7cf06c034e4f79594f1bb6ecd9b7347911488928e1e473c4b8c73297f7ed845b9ec59020373eda57a436c1c9d1459c6114bb6258543d8f4f97b10aaef5a2e082ea173ee69702d83711fee6aee8f6b260d03ab74c3b5d8fddb81b208e16458511270dd1da295f25cde7e44a8349b60bf0c59d4b425c1fba60d2bcba47b906d2830d8d5c091dba756e61620d78b2dff28407fdc9da9113cbe82219bb2cc05e11c70d040bde821aa17b3e981558961ca571e5d5041f7de047a1727d9c904deebe561dc6dbd8876bc77c27322f512d6171bc03871eb0fdece70f119bacb41d1852220cff26110eb0eb78e39aa1b2a4c2e78679f53683520c5a57fea71a8e96e0aed33118dc4bdd035fd88f535b011d9c7deb6f406a072ae6c091016ed10a5a4ee9827882ee27c535262d1d745aa5231736f2deec8a6017bf0da36b416c98ab71c6824a6eeff3564665007c9e850fd02a1f5e201b534627b92d21a493df293db9f24de70c7b49a6e07acf2db6c90b448681666dcda318c08aad08d3e257af7e774c75debe3b3c07af683735e87f205b0fde07351849c5afd07d5722c6aa17b6ac2cc3551c305e6ac31e3601a236961f6618cd3a0f7dcf6f65b8ec82e27e44c8518cdc16ecf79374f796a3daabe2d5005b25576b35b021497c5a8f9b98da68d80e56a1cc1044c04dfb11d36cb147eabfdaafba0a93fced8675d7d6a9f999785c0e7346f4c68eb17c0a2409e2f5bd4ac5551ff66a9857c66f642f2a385131377b6372884c417e01bfbbe1ca748ac8969bf2c0bd8944767746d1d57d862795e8ecf9e8a5ca122d0259ffba822588c5eccd14cc6ff4b7354cb572f5bd695ed9d85de131fdd97dd5d6ce7844ddf9f3d112028b5125ae7a77a4aeb2ebb554682a26f457c43fe96d67c90be7e49ff443478e82d3a48680d737d1260b8210bbe962efae6505e496b1b6d4f1042a7b971605e2dc50be3bdfecc3010b9f5618d3a1b2c1f48888b859e4d6b63ca9d29990b6d502fc22b738b203a83d597b48d73c41860e4e99c57181f5b02f108ca193451025f3b368cf2741244f42b27cb9e57260d2e127ca166b32e0b9c927b247b31619b1d4\",\n        \"signing_randomness\": \"78becf9804af979bd36022bcdb8e2b5d5a5096a3f0a3fdd0e82b0d636cddd1f3\",\n        \"sha3_256_hash_of_signature\": \"51bc4ab5e0dd46fcef4409d25bd8dd2201a37d24a9b52dbacf422f533ac7c80f\"\n    },\n    {\n        \"key_generation_seed\": \"b0d4ba39adb4e8712b3a3e6495aba2f04a29e45c68671a960bc0d8d89900c97e\",\n        \"sha3_256_hash_of_verification_key\": \"2b8428ff7fe1ba35ade75d5113c1512787f6329e8f0957da33248477448bf6a3\",\n        \"sha3_256_hash_of_signing_key\": \"56ca33efa260f1cd77266d6e57655aa0a4fd2fdb8151cf13232a73ed6e9bd29e\",\n        \"message\": \"836254422c7d13f1120012fb9cc7cdaa1d8b72f6fa3943aa7de75263d3df814bbf2e80c3a204bc0f9ae33e4fa82ce893d35c57e41c7147602be12455b00b7949a3195264a3281cecc3fde34802b28c6e1f2b505ab6087d453bd6aa067b2370124840bcac4605ee4f14edfc4b4ff19a4d7a828e60156b49b4027ac18dccd20294f89ccf03d0cf47bb2f22d3749eee69ee17ab5d8e4dfccf36824d23e3f95e959d0494ffbc712ce3975e3a661b3f9e149a0234f691c2d820000de97cc016c43efe958da469f740610fd22b64d4bd2e30075e22bcfd4ab41d952d2394fc629f016ee1cd61aab4581f62a7b8648f8f8cf02462c81023cbe2755c91195a5917fe5a8b5058ecb8daff91dd3f73fe38665666dbf79cf6f203faf94a5ca3f3affaa2c2bd5f5dbc011daf46fd7ceb74b5875e4b5d80b6edb9817106b91865267e78731662218c8ede73e588256fb1ad57232aa5533d25bfc54452612f0c2aecae6de19355e1d508b888d18ff9f6d7d68199755cf5c210172f65342269ed96c77d80af8a244b43a99deb49b97a6f358aadfcff6aff72ab39540d375165185f31e0f1a6f97722ee365620bc5d642f8cdc59f7e84fd8615f4a336ed340be6ed8451997d87b7904c1b9a3a0bd1f8a01afd6a2d9f5b995e3fd0d44df8fbc8389b6cbb5537816c91f0efc3d2349f15eee747b254c5bbf9418bb979294423dd6de4d13484408362582a86d082350cc79ebcdcc05b70110a038736034ce4f3dc1d17e5d11c9c7620d40730b61437906933193d1272f7c89c701d495ed682f1335b7e1c42c994e090a67d932a8e825f4b9eda8f2a94b9a1f11f10e91396908a9d436dd01bae1d1de2c6acf458c0880e3f81adc2240a99e6083c9c188982713db243028ab07df407218ca6b3c4c93989ac96d92375834b915b724f2a105d6240e52b9d7003c67ff76f7a325d84abbc229266bb40d1dc8784ce1a4a6bd17972cdb26c274b06337d525f61b5bf952d23fa13757460b7b8a3b99eb023831f4fbef72d62931348622041ffd12634947579bc6e16bd1eaa8e8b2dfd54d74efced79ef4ff31ad42036debd0fda3b7f3f8e7a3f45955f82936a67122cd42e38af646cf565e294f422fac1e7d274185896f58e9d0fa1fcd3f4d379ecf5b566586246216556939bdf86d6a417c3bf77c64f95d7de8197ee25b44eef00209d33159710df001372c3e3d09f24b9b08b8938c522690674a7588933e1ca37d2c14df50777806ef6fd2285771a44f6de90475c6cc314df140c3962dd9d70c54e58cc5fa3302d69c80c6511d9d42a51b7cb7fd7fea8d8bd65a66fdb2ac80d945fb7ec72e138f5566ceb570968d84b60068df20c6cda2ad48372dc97424793fea8d2136923070c25f47c3d10839d1747b613b93530968d5e97a3fc0f563bffcde7b42c839efe66c3a8655d0ceb5af7a37d23dbbb52d05cf6fcbffa7c7491703349819ad94ce218912557d6c87937b2e7b0473856ec78713c29a02cf7b2b38e0dfe16804af6c2ba8607026892138011e06b4af179d63dbd97cb917b6507b798e58d74f485d3f063c044211e428fbffd5af2d7941900299602d3b15d5d600b435d9a21948b8d87a35205a3af9aa9ba491d56573a93c35af6683655e04a7a17f1b9709ed83e70d82a3df59a2fb7c051abe508601f322ffec089c49dc666ba04366c038ad59d397022f0f6344255f4d98bbb17120441cc75107005a74db35459c63770547a4afe59f2703894deb67612448ba7c4f6feadc1717f6ace410c6be62ac319cd33af285d17d55f500e364a0abe71d357ae0802af464b6d2732f3fb94bdb3baa497f2e44727bdcca5a4b65ae9df189ff1ac640940ff4d479a8072d34ecc523dc8fc7c87fc89a540485ae7bb3f29b041446ca427c0b48ca7515a1e31788e8b53e1122d372b6557f8d2a97cde893b20e60283954e2934af340a358a4376dd0cfcbfe305a2ce7b72dcfe2de105cf44833f548d1bce88d34b60bd29b69309dd87f4b91de10ebdd7d7f87d6231307d0ac784e0496db725ab97656c34e60b34b230f37e30fe326296c4e1bb88c0bac261df0e5f45e6e126103eed6b1ca146d58140a8893d847e92d9f3a0a883e8bf830147cedbdc7dd42c1a58a826a8a827f9ab26eccf64f68e9ca6b68261260b659b47e0dedbf5b077982b24ed9b36e8466dcb21ee69b5e2bccc49a163b4860ec2ccbd65032776dae601e18ecdab8e35c2760d5758592f6cc074298a97fc5e82e7da84036fd10e0725a0e4e58cc4db30499abec0c7d95d88bac2c58eb093312779bc1b8619ff2762fd1ff009273456d829394664c31ff6d7848b27174b36e59fb65d6bef6d974d5038a28f49ad465b28857cc12baaffabf3652c2e22b46b040e579fb040a0fb4b1daf0c157d35407c0b78e305ceeb232e7b7426c95639b1cf7b079e80521faa538e51e69255576650c3a16e143d0f815d2cc89eb00aa13af20394aa23cc6aa99a9f297d886ab9af2655d53816e066a02cf21c277daddef3d7d0825d094fd8fbd5386139757efd0b7f8501829725a4b70ff1dabf2958e07ed21db76266a88483ee7c51a7d215e1b41d2464911abbb1dc71f9613ed5446e4b0c97bdd47f22b372fb7662956fdcf3b108e0107f74301a054fb004925b041af354c04c20fd370ce1a014ebebd8311f3265a2f78b48124521a4aae240d3ba9f94fd33ca4a92d24a029e0754831869b58f670435a44dcdd7bf75ed9ff06dba52980dce49c1c26ba0965de3623f459e36127ac6afad4d5598fc45a95173d039cbbe2cdc7dab2865fb6bc0fa8dfd33c4a826cfc77bb7f45cb5aa73377a27271ae41630dd3d4e2722581537fcfb233e5af8f04ca824012b5c429ea498f4ad44afc249de2229fd7266fe84173a5ce44632b3650d6e1f278625d564b374c10c1afa3f17432cbe4b65327c6b6e0cd2f99b68ab043c5c6c99d7fe7fcf940f4887d309d7bc0ffaa5dc4b90c79266514f46ca2d5477f2b84b04e30dcafd0224170fa6d4ba9ad2a6dfa8ed73dff9d5d40d43f02610032719a7c5646ccd453cef409b4325f3fb6d9b9201fb115e4dfaa0b4d29959a44518774e94b2d4d6d06c7f065973becd203f5cf6cb59f869340ec6baf0121049db3e1146234cee4657c1b821af817da27bd4c9b1103c81f5b5161e6a9329d83d6e4dae1f3299858cd201222d34a85e2991bdcf32e9771f3e701897f647d62729c9805cbf118c9fa727b056a7271a23181b92f033de1ef113a856a884ad527b8deb92085af3db509fdb0265fba3376b31bf753dfa477dd5e247d939109f31cd430a692bcec4d9fc7c5b4630cab90c64b75496bc7ca54d5621fe3315ad03ebf1afd6d436bd2dbcbe707b35f916cfc147bbb5b8ad2e80abd692834e42e0724c8b901f5924212c4129f7451b9dd860a85855d1ac59f0b6b87a66b6a395dd81990aa3debf64c91cea6862b5793bafff81677fa2928e950d94a6333b0e77a15ae461e710be70afcb9fe6e0c21c5ad188e439a6e5138a2c5ad17126e759d48491e3f3f93f81eeb77b7b3a6add96917cf0beea202eea5adb3d5593a3dc9ff1f8f05dbf5a2707edbb6640eff5b65a0003cced2eb480942a13c1f1ccdf9994f1d11dbef0d3ba7c3801aa508c17bcf287a928b635f475195d88adf9f4c1ca7d3d1462dfd0f6939b89e5ed95f177bbb12253391876492bc01aff1c1daaf0a1c7821c2a4e33f52badf51987e010b391fc984328e020206ee98e9c8e6763120055f99725e48356fd800e11ce973d00c800c353a5df8b028e1e42f817c7433084c440e47532fc639172533df35f0ff43257841c3e4ec7dd7f601eaa81e9886fa3253844c195a62f89fa5d292536be8cacd80c94bbcd1a83c985936353c9233e512431a8863d7d8340e89307547bd10b16bf2c7e0bb01ab8093c70e4f4c8fd30608fa14ff072d81048391c07ddd82475a280d4edf81f739ad1a13bc6483c3c37bf52ed52ce8d568aa81864acabe225bc6467c79fbf43781f29b0c508e6825d4e56d25e45a8c0c6298765069fdcc66b2c5492fddfff69d6f5975fcd81041f30ffd7813ba3219b3139583eb588ddc57851e581fbd5e20127ebd\",\n        \"signing_randomness\": \"dbeaa87ff265e2594594bce653125b5235dbdabba4586bab30c34b5a3283aa26\",\n        \"sha3_256_hash_of_signature\": \"60aa16b39dd41eeb12dacb7e421f9fb6a863548e92c307f112d812a447f3e7b1\"\n    },\n    {\n        \"key_generation_seed\": \"e04328a783c10dacd96702d2e726bb11ce4ecc571564ce7cb10722d1c98c2842\",\n        \"sha3_256_hash_of_verification_key\": \"5b8eb91b534654f607d655e728bd5d00e87683762e095637b9ea651e82dee333\",\n        \"sha3_256_hash_of_signing_key\": \"f52d3e75233e3db45858d1f7e0e8bc9353acb89e3e66a73a5f569bbdc97fbdf6\",\n        \"message\": \"bd2b4058218a15c008a4bbba29592079583f684fead3e6b3f09abff0dbca23670ae4496077d47945e5f1ac3cd4add5763581285d80dfb43bba9c0730858293ff6a15915ab203fbe65c118b87ea37dfa1e06cbc0f24eba3f43a8be17ff1daf4277cda2cae8aa924e852c9d60524b98306927746c4eb26dc9475e8a0d0f920f33e1aff9d07ea5561e70865b2d8161b86fdd7638e7a72345dd72ee95bae1ebd2c24d2a5510abe3fc2ced397a067d215f6088d63fa63f2247427917e5c4fba14f0a22a04fd0ac1d948507751f3523be2b0a0cf2f96dc61f8187adf646d6914667759d49a6df9a327830effc9470cec6c82ea127a8b0c6510203879faac4323145931e146d962846bb1a6e84cb2c31bc686e388c853413ea7d3ebf7c752c6aec774637ee01f2817a5af133928af35f23fc3541fe7fa749a863a048efed2f8cc2ba86520b97fde0324c68d1ddde1e430c30ded0b25664ea676aac6b1f22925a40b319caa37dd5dedb99de4d963630a6fb0e8b00ad8f2a2b9bcc497a00099a70a9dc190a2ab2a058930e63fd6df342a625e9a095ee79137caeb8885117c7a9fb8df7a35d5a300d6f7eee40578a7507edc38a0d6522474e672f156fede7e1690c3bbdff40342f1f3ad3c34325bcdbff0a68249858c777551683a9f3af225163c9323a4ad5e666e0a9f44c6496269038aac5dc2767966c1560c5a09207406f3c47157d2fe5909346d8acbfddf3e3d19fe48b7c60e1c8cfb2eaab19e736b2595d33a0aa034726cb6146a01ebf5cc72eb1182b9a4bcef90a1aaf74079862cd775f8f773bcc490f6015b4d5469ee0bd95c1a32a1fbf283fce1fbf6f8cdcfc1884f4d2a899f3e7a95414de419d56462f502ee703cdba007c3bb78f20243c35b882c90cb7de3cae3f0468079c546645977347bc183fb0a6cd24481391cbdf9372e2d6765b6caf8eb0145bb269a47a1b4e2cdf9901d6aa284d919ba57163ab9929e715341bacd81f35bdbff36d59a1edabff3cad2c122386a6335348a3170337b94e4336b2b74e791981656cb5234a6f84db4142d3f323000fa98be61527f7548dab6e83928e9dd2e461f08a5bb52f241bb42254e5746fcce0f3620abc69a6e275b5e06a333360f9b809562ed116aa6cc2334694aaa4169310ed6af695678de22d3e551daf61c0a6c5f6c0f36fd3469a3b977f6d295e75abb804a43e1e7ac4708208a94e8368dca40856f1d43c9865d98f69f1c0ba9c8b33ac9ccd18d400d2559b1cdd82a0c875b5e136b97c02126c81a81eb5d1e421221564100450531dbd97bda77c1b0186527ecf526ce6bcd0add5668382d984af9277a21d40c06eb4bbbb0ccd6f64e90272fd632d47a388d301377ee745fbc9cb4c02e1f096ddf303bca4e1fb4b6df867676080cdfa6a29cedd15003ee636db8c74e7e293a087b1a5f62334585369d12d9876ed0f334c6711146643fd598f0d69bb3475d219d1f89066644897a9cc5630bc84c0cb5844087216038c8fb6750d0968d3d3e2d29d93639486c76dc045900ae1a13529e74beceb3338684402bbc3eb36870e0b37584e9f309bfb0dd9b966f0be1298dfe55d1a94a6767cae5eb3120133b7d7b71c9f2a538a97f8548fb176b0e8923b14af28ae26306214f1d392ae63c3736b9f9374ca10ebe93370c11bebeb45d066477f374866c8a7208ce6dcec404194bb1f833de0aa4700ca29681fa0f72d98679dc3e1e142852347b01daa08e5cbbfd242f7223600804e066fb5c98c8358370f5d390898fa44023a30f824f1c6a95b8e23308b4be474d03e34cf72be65f90d698dfe0d2828a797bbf8397ec87ab9ee00c76a1c7b3ced0100d3a1030136cab9a69f05cbe58a4a56a9c700bc591b87783de59369f2e62d5b885da09f25835a6dc06f954c19b347724244fda69e3356a4ef60f6a41cff3bb7cb22ecb128415cd1b89a9aec12b66f1ec23b14e7d7fd601ef7b000a0c96f386216f75710eb2c12817daba1d1295e7535331cb90a9b0d8f7542e73de2d93fe554063f57274df27bfb39bc4b78b72a88473408086d8df531e53b5be018e076032d1f8ef86d7afb8e8867b9d7728a25acfb6856d83592cada4494977678a9f4d134f49a8598a8e0f23d3b7a09b5308243410ca6f47e0bf8c43871600817460bdeb74e7d32c2ff7c40ea4bf924e795516ff7c7bc8e5fd5d64cc489f1894c6bcf0e9c312b1ee7e2bc68739372e7402e6aa2ecdca39c18d7441f0ff373946559c475e37d4ada64b98283e5a64be7bc2d1a1c148d2cdb4eda35f591d3a7e7ce15162f50ff1b025f87cbb82289fbe7f9c32db8f23012cccb87aca7d758d42019b9a8c15f508cac9284928f46f0dc1c1b6c6b4da030db9286ff8d3762ea4a83d096ae04f98e9416d3dac59e04f9e4e4359ad76926bbd9570a3d5811f69a1c4345b646bd946d0168ed62a7a431d920d707d8cc7e840bb9cf13d8abae8196d9177e8c28ce0dd9ef647eaaf0d3c97e52cb31b560ea7067b45aefb5ec2b7c7bdfa3996d1c7e467636bfa1bbe11d1ccf86b64ade9faf9287a23502e9ff711ca97d6cc09de814a67ba6123a8e4e67cf6e8cb6f7b36621bc6192ecee94d61860703ac8411b16e19644a6ab01813402629af52301c9d76a94cee22b1dca49f13b130028991c8ab383c8461433383da92ab34f1ebb4124b24c6c391ea44ee6e736bbc7a2d4660a878a600ae39b7dccaa51adbe90bd705ea51ad13c05e611749d43de336d396352cb0673abce7473decb0fc708ef28dcbe18c85ee0068fef64685acc3a7d0da9a21dd0afb10b95d81f6ae437022218b6094ce35d01248ea85a9ec6fb56a7a2a8453eb03e6ccbea0f2eadb015d8be3d09739eac07ad9e3f17d13e5f71cadfa220ecae90ea50bea87b19ca6fc5df31874d51723becc80c8845c9ea718454d2817ef8afd99b63090cba6c8089afa78770222fadee3b3b829cf36a8153efaf2cf28dc4651ff37a8921e402ef81a0f457fc1802ab06a759bf4071f082bfdc100ab612a4584b5ae19354854101ab0173d7d6a5a0637ccb58ae58978a8befd5a2c51d3d53150c336c0c0c2a27b442e2bce120c4ccf8d97ea4584434a6f48c0245b63b2255bc52adad4eda9279412d70be457f7dcac492fe53c06edeed766b46ebc3419e6da2a2847251f75c62a5fe7ae74f0dd5af50a447da6356dcc828c5f1a2c0c873e57041eb1158296c038b91f2e13d3d4b2887b284384a9ecb8bb378bb311f4abb19e1b90eb3a399c03bfb4ccb29aad80c55c1636559fc79a6c894b5bad8d529bf680631541a45eb0e57ba5b458a05f456c60fbb593dae90ae549416af96642a486f10843482afc3989bbd1e8e4ddf0791204f4b720abd2d8995c87c8a388ecb14860cf83b7a4406fb6c8c9393475082d24e516c5f1af91ceba444d8e460d0695746be057ea8d76f8c0c80358f3db2ae5b996272737516ef5e4ef5a1fe5967304cb6d00090c9623d29f0d4bce8ca3cbd54a30f9597e01e5845c1cdd8777e18c5d5d86492fdd0606f623d11a28dd9f02032e3a378c71b757b52021dce6ceec63792cea24d6dd7150ac8fcfca6554f7b08a5529d59628d0f35122504dd1542f6291bedbee09f81aa744a0f6c6dfca6207fbfab6b9e17e8a4040741f6508471e72d227d0fdc50c13f444310245ad17bf819ffbbc4e0485fa68cf1f0a4423f251538f25da989abcd008c803d368f626438432569f12d1612370e4c6c971079371081b37d8df7ee709198aaa2fcbd443b96732aaa4e6924a461b60ca4f4cb13e88d539aad709a3db84d2d6d26671a9f3877125b7a358389bbeea846a32e949db9a7853dbc7d5add92729ce1b5c00680974f3ddc6a8235c7319b6cd1ce5e0b66fe7c2f1115206c42b4c02990d79efa8be94927543c19ee93d0ec8811f9330693696c878cfadaa2d56e877d42a3680ab2f6a576fda7bf7957f781655cc664a0a4a0d16ce34d04d7c98a9e0c93d2e6d42870fe66864660b564ed4f881693d466bd68b6470af03a5a6e703dbb40515af5dca7142c4c8d79f5be4bb01a1b56be9d0936396a7eed9a84da86a4f00dcf676b4942d5df6e1378ea26d9118a54e17fc623b83aadb417ec82f9afcaceabbdcfe2f0b6ad4bc1601b4e24f547d61d1c1737adbcb46d98287372c\",\n        \"signing_randomness\": \"e5d67df73bb08e2c77720037ee0b4b671d14efbd493cf3f935880dedbb2edb7e\",\n        \"sha3_256_hash_of_signature\": \"956956288a8c6ee9eeb93f8195e8193e7ee745783a25ded0b8f2dcf3476ecff0\"\n    },\n    {\n        \"key_generation_seed\": \"cee2e53099d8cb576f8f76c5c155470f87a6ec5f7d73256a0a2aee62cbc53597\",\n        \"sha3_256_hash_of_verification_key\": \"77ce5e3c7f7bab0c4702070ccfdb2bfaff64e958ad98a392f4918697d64ecf14\",\n        \"sha3_256_hash_of_signing_key\": \"38720a77b43964c6abaac74875030bd408594f68707f97cf6884097ca3f41e8c\",\n        \"message\": \"4d83349dd620dc2cc0e9ada524b9be9b195973a839a042f4342d69e6b38918507a9747fcdd8b751d7c75abce2b482b3313d4c74ea4e7a4a91f2e08a059536b651508307b7f4c3aff5cf1579f90f32ba1e847778673e3956713c14661afa2d11ccf61fd8f9bc914d4b6e6d09c52aff7fefae325c180147153c9ae1924c9a2b8de4900bfbbc6797558b000c5adb9a8dc4cafb458ad328f19a2c55d5434bbfa7be5057e56511529709992bd6527e913b46abe38dbff90d4ab3c024a66fc0f8fb34afb96e22535a0ea8f313a087aa65355d7d5989c486e103fd526a7a6d812c0e4d8c081bcce4dcfbc64b68436739451be0c4b67bfca71be955ba9f9a23c223c7d0ffb1b2196c9c9845b6af341a363951e2008bdc4f3296dd0e1e3f480f2e4b0ec77a002eccfdabcc58d24cb0baa26eace96decaa0f6bf1cde0175afa65ad5c23c5e71b50df778208edbe426aa6e876c12440d7c4fccb42d039a14509092784baad37d9b8edf186cd4fcb3d9f8b0397e951777d602b8af613060fdab6b358302b3fd28437a06694f36ce12a035f09d677e48d077cefd1676d8fe51541bc19e3a6d6a5d879c4f9eb4713b7c0f3a652f3a05d74dabff79a302fdaf147531fdd57924f49e52b298219b03d6df166b481f232fc85c7cf52838969ced2dcfc18dd8c95891c498fb49289d1a982922a0fc02c849ac3bb7fa92cf43a64464d5bd919f75ada287fe657bf61dc07b3808c0fd0d71ea24de5353268b2c17c989c29465ba49111cc479f51a8cc623cfb6ff68149e52c77a7d85b5ecce66c05900ab9957bc7ed39e03649a103b5b6bfeeb168b7c1f30dca84aea509fec2b215dd95558a2708839396552f517a8fda28c3ed61f84e1b2e0dcdfa708de50d44bfc65bd4e70260c437c8b5b7158ec7e2301d9c7aaa68e0adef89fdb601711ad2998379145b29ce3681b513dc3ba9b2eb668c1b53697833670466e21e767361c0a4362e5b8ddc38ee6a9c4dc5205eb808b93c72ffafb635b4254e4f4496bacc753c8ed0bcaa88db683ce77c8165e8ddde665392cccd57bc07573d83cb3aa10648281efb08f92aacd8ab6f9b5d7fc66d29526bd57e421220ffe375b26c61a0ddbd9807022eb3b4b681a43e7719f5ec255c1e19ae6c542d6deef3b94b6960c18d0d7c8110b88f995826073b874042faf97f1ff034b8257418ca269f5ca588223393b0179f9817e08e7212d0d410ea259ea66bc4a00e7fb1190a732bfdbf7adea0e4550be90c3e37bf33baf436955742a2632aede259235702ea2e079d99a22c9755ed34c1e3ccbe746e728a932b1852f692b103112b303033ad3ce1172aa066860df570d21ebba51fab72d5afc4ae8995f532ae384cccc3c4a295af76a803fe076ccc920a80d82a9b614760ec43208579ef5dee164356d62ea33953e55195eee9b2e2018e6fd9d19a9f49258702dbaf6edbfd093919917b1b6734f012e2beb4f758dd481fb8a8d7796e755c6647501e28862b9f5b16ffa1c5d80dcb07141806fc348881a5a8891bb632a4ae4292a102d71504d0fc12c79d15bcd0799d30c7b9e72625a7df7dbc7ecf9eacc627ca9ae5d71e264f2f2a9d5db8593f3a90f3915ce480adf800c99fc2c8692f2b57b492bf9d84171f8c29af8d5549f82d3730927096ca18ff0b0c0c0b8b800508c44d5749b92d7d48f7fbd5c86e408ece0eae639af475073df5ca2cd5083bc4ff8852ddf5c399946a6b21b0841d137f583e0dda3a6046f082872b783eca3e14b21a2af61bb150847026f2371812b1a2be72024226f4613da860ac2ffc578dcb171dc27b896eefe49f885f9be4cc8766f37038e01cf20dbb661f507b2ecf2b023203a6259b0a018fc00b2ca9b3107b605f04388d5493ae7cc4bdd093ce761a92847c2a167739e0750b427b2aceb3abc5ff751a5f32d36b589787d4da509c85ead751353ab2c68a9c14b8b2c8166aeb6f27c7f101221c306aac74aab6b4e795525fe12038725d7af3d2a6d60e1ea85f2b94ea24f1b72fed9ddad4c8e5da484e80a2150de22e6adef41153d7b4331e8f011a3cd48dab02876b067312d0dc736e465f99ac3c9c56321507e79accf652e3857c749ad92dad15350a6b4b67229a3905db18ab2053e2d4f92f156a1d76d0aa891364002c991e632b53fa217aac1709f37f3402f43b0753361eb2f595f9fae3d7d96ff050dca0b9657f4c3ab49ebdbfe8816051c4e0aff32c5137749d53b062cb61f7201171b5dd716e9ccb38d00e50955596845dff602200b30d375a854ca4e9a7276ca1a1d9ee92a04bcd78854be251f7080aba6d8325d40b37054596ad80211a50afcc1dbc177600a70e648d8beb4fcb8919214894cddaa6d63b6f6c445469a6866721d4bf1117f25dff9d65fc8fbe5b0acc8b9039c7f94b2a5cc6068a0489e2e13a731dbe1094fa8558a601addb9e4dab04fa744cd5b95a9d57c52c8124ad950a5944dee2c55e5c8540dbee5823daa624f57fd5be994bab3ad4e74ea9443f8b6024bd6b49adf3972442d88e61e04fe8478ff28916584ccb65fb15686991d5781cb7eda067745258ea671e0a2665f94fea1b5490669d1ee8711518bb911094957586c8075e3bbedc47be059053a7658adfa0aceabdd46e0dd9647b34eba32e56b6305653ed386c50e79e15084f00f003b1d12504fdd8e47d03d9f7572276047bd22b82b8e81f87c86e6f20d2a756b16f291179a97b010f993c0f839c9a1238cfc9bde8074405cf1b35df423c7566ce965681f21c969e4f3f8fdca72a18d5daa80287f53b5f8429fea81612cf63ccf1b7a13512db4d1dd2678fe1189398032eaeb4368332972c728ad726b7290302c3c5acab6e73432e825b9046f846adca9d93780a36095aa5c51e354cc6e9a910cabbe59130e98f4acb3cb6d4efda9e2f78748ed58465937fc81c548ad038fdc32aec46b078cc5a7207658a9706f1c9653359de6c4457dbfa71d300f98f9bc5daa14dbdd5ef20dcede7e9d3f7da5c932ac3338ba40e46b17d89fe38f725129991983d4a81321b394f2d7b20d66e3deaaeb6fefc8cff0b68a766e27ccfba66deddb1f541deb3c1892ed2ad5d073162f0dd06b82e8878477bc96e03101c9b5d9d0ada10ec060b45e144b31e6b4de283fd43538b47178398fdd15b01ed421ee2c65847f7a4e9aece2f1d13971ffc0157040782ad4b591dea0906370820dde1000490ab1c27c03d02a0f4b4bfab0e56d7257288441cea63175cd6bd11382e6c873154332e627ce82e37c63889efbd8537ac35c21ad7a09c986cfebf13b19d5677c1104b373f3b55198d075aac608145ff9d0c4c12c83bb41036ab32227629eeb4922f172281a66c23c35b8a3e92de0a10d5e8c18b9a54d6c30230f3a8263986ac535b6bf63eddaf6a02c9100b712ec4bd49851a22af0e647f259c2e19b9acaeb6147c476c90745a353f6252ade8212a9f7c215c0b3053bf2b4e0ad225e8b344ec14c1b839877349c3743e8337d9c1eb128b06939c5a08f60a46fa700723eb6652fc26440d9bda3c99c10ad0742c2f039be6b66749b77e14f8223509365053e87ed870fe3906a16da6c62945dd2112c96a23942b1e14431aeca7dfce3fd4d6633e0b661fb34b0bf05c4d21e689cac9b6abd9f507f08e4aab94bbef1c629c0e1cf344e66d3a3e100b615bf762dff0cefc5e4cce0dd908f46c94e7411a151e713fe0c18ed33c4c03e55e12c0ac366da5c757c7090e0f94e2c34d93ea3b226adb2979d23e071f18c2eff33bcf41baaf52f4b44e38675dddec89c7bfe858bfd1ae70d96d0487972d70f8d8681982656ff734bb6323aa91ea14c6330c71783d235d9f094cb111abc4990319bbf163891535aa5f870164da65fff395db68b390084d4f2448b98cd56103e49caaeb6cd040c3aba8290284e9b2bc423117f4104d89b1b1607c6d34ac30aa9e79d8753b97cae90ecada6cafc6100d3d6d91e20393e0dc95b981fe0edbcf88e046f74184a96705ac226fd26089468e432d525643293bda781b64bacbdfd6c7301ac42aed7dbbce7abb9d67af315bcc3509cf03523fc887e27edcbd7c74dadfd0f126cdb49e28ecad38080f18a775e6d824c18359935d921744ea72fe293f299b530d9dc9285ef174ee60e2ddffccffe89960baba90d955cd2c96672513c758142d29a1ad79ca9291bc6782b64717f11a71e6d65a1a71d\",\n        \"signing_randomness\": \"608d2f9e284f6aad9a362af4a3b89cd2abee755a0a286e8efe4f973f6f24659f\",\n        \"sha3_256_hash_of_signature\": \"58d890927a7831fa6e376fbd047f136e6ca33890cf764ea352f33bbefb0f9391\"\n    },\n    {\n        \"key_generation_seed\": \"02d9755c369932e7f99a2e1614b03e2c86d713563785965e008ba987a6c89f49\",\n        \"sha3_256_hash_of_verification_key\": \"69e9507bb47377ad482ab87790f346263abd9fe9293116a4305333e1ff95c6b6\",\n        \"sha3_256_hash_of_signing_key\": \"4424aca6e188f24fd7510bb9a2c7544dbfd217e947763087d54cf6c53b797be2\",\n        \"message\": \"e0f434dfa04ec225ff6b6db802a047e221bc064e5be89a5fc13937ae9d3f22b4439bb1c1bba01547a64ab3e810bbb09706d01959e2e906a69ffddf0c56726bdb58fb039d66ac5d77c7f0e9a8617b0c69176770da328d38171f39b5220279186250139922c0dd0f7c3f96d48615fc66db7568810931d257b230258ffe9cb35f87859e08139ebf7432e948ee3f962bb9015cacb8499bc69597abae4b841b606657e2e3c51ff5a8961ad42177a9e73950e3fa150439e2063b6555624a6d8e3af4fd5710fbe722b8c6267ba5df56846a085c56444573d692d5412cb70e443761751e58c41953bb9faa3ce1f4564c825a02f0e1339cd659ab1480804dd2e90e3086aaa292db39c6e2aaf1b001b47a21cc721c0c502c46ef0479bb7d8cbdf8e9c136397febc2d83c0fdbb3ed4fa6868068477206a26d2b7e0d20507aecb2756b888fcf5b446217de14ee6a20cf7e7b732fab22ca3abbe81b2be18463acaa3132773acd7476460536111cdcac98b1cc9b2c36aeb3fb318340f7397b4b4ad6aa87eac94ab7d98cc12ea5606162877465fa2cad276cbb5d36c40a0b014c53d2d3a96825e237342dfefaa6b9456b5ff1dca859c5976f77c3d3cbc9df355237ee9b4b4c90a9dd941294431db76dbb539dc48669e7aad21808332c8a4fe98b8f043fb756b526890452fa3c3527fcd584cd33e38ff9ff783538d39a184b7b3eb649e1c04c289fb65998f6cf5d5bbb0609fc3403d85c6df269017032cd24ac540e1b294bdd3c3a0c7117cab02b1a0063a174ff26fcda687433a667322320c0dec1ea3963f3b14375882b3478aed43c2c74debfe3a734f8b1a5cf92007f8fb627cc3aad5c6ae4c31846b72e7573041270ff40e762c0f8dbceb7512d44dc260a97d5ca7d60699981ed8476d8651c35c8ed498fc2961d1e38af46f3653630773209a63838a9222b813c23db0cf4196d6654126ba2b1840a7180e653b3d6e10c4c7ac3cee93b0399d918a52e59f0215b09a119e634e6e8a9886c877f157bf7b7dd827adedbaf03c718ae037c0b262588171839e952721de72180f8eed00b01f53e098b82165199c53129576036fc753a3d33aec92060dd19aa078a496a2b214b1bfbb747a1ec64071b0a078d74d0212e6203c9698c7449326a42bcbbe8d9501db916c64307d5f1083bcc36c0ffa18c0e4410b0b17d443481c3673d17bbd7a366a5fd1c3c5b3391a02eda7596b4f869a91a32b5a02a05611371231be035edc716f534724b5225e1a72a2b2cd357f4c326f1dee963fab680721d40dd70b750a019e70885515f43946a0dd3dd042969139f61eca0e9ee3107d3d28ac606ad53f236303e1fe986c38825318b7c4597b14e1a83b81295fef49fd0f2c1e14a0b146540d853db9706cd224b376343317bf7330b0c2721a409b856304fffe60c24c441d5e2797d4696c0fe046d305aee93cc6a2d89a81eb19643636a8b424b310034612105df16516ce9607cc0a2bac5835642c6ff9572191bc45e44d9b40da36b607f570ae8c39d490342786f31ce6764f3f7a764665b6cb93e54922c6d89db566f494e0ee069811ac82e8132f2f388d68490cb1c2172d2979fce3659d7076b4f457232eb839172963f8c342e2cd18969f086f451d33bb774f3d00e6fa2be02292f2e5cad3adf5dec28932bd784801e69364962bf39e25455303e1f289052d2f0cd4964e0ffcde29e7c074e5d57e43739dfa42aad636c352d363e3a23bdd134baabc7cd1621ca638ded7db7051f0456641ca872ecdb4d3c2603ddbbce16637010e782c4bd5230992e2ee7dd904f8a83ebaa7b4c3cee15b10794ace894118304bcda9e9b1376331d2248b802557aabcf913e95f783715bb5e90a4436e4bde7d651397a70a24257c39e0516bb1f548da36c1f1f92a416dc1114107cd863f3bfcb360286e774b21296259756ea6040cb61738eefe29a67895ac69797c640e03f0e9e731647c2da93373920341fdfbd50eb6b737bb0d9fda8ec8784920407d4f41486d8fc616430768d6431ccd789deff332b239ffd1900800cedd9661a55d6d96089007e9089a117f03d7858eb4c3fe2d07e91d8cab88d2ba5421846069fa6d4e5c9161a140cc3a288100bfbe61c3b0f0e820ab12d8fc54b054a0f4c777052495b45a7d1a883e67663dcf50c2230ca5319ab31cd76435dae41ce1ee25ecd3fa0c7e83b0168852b2cab674127cd7bc9ddf9dd4b57eb40128988c7c8994dc6a5fc939ff957f06c70a4056e63331f9aad254ebf2b8fccd580285bea486d91a0c2dbd5823ac8f6846ddabcde25a2252f8da1aeb32e6969276bd2a7f94cd7dd3143f3181489272b1589fd385ba844f90e35982b53141daeaed413054cdb935f3412e31d99c1147079cb487feee85e3906daed18106b8c407bbcb7716ef9d4d34e2ff04709c7457997ad6fadc55a8fa70bc907815805578a11a012c521a1325754cae2e3f7c9e1fffdbd4be31dc534961c318d1a894838e0c33806735dd11e408e500995b86b6ecd20d325347f792a3381d2a45587d9b6ae0aa27533732a6c421ca621aac42335848d9c0dd89f14eadf2f92ec532756cd5697ad752b6260c598ec9f0e9976a950b22daea8b74fcc87f28b5e9ed83c0339e566259ecf06e5ce209065de87feee5d1e9c466004b34583d6ae89b590ead6a96cd2951705ac764f329e28c996ad6db05f6c69ad2a39d3ee230f6501f1760aa41ffd936c9dbf20de3996917322d32b946062a3c27d8bf35ecda22403ab684cdc680dd166562d018d943369caefb9133a4bc4515cd5f9c08e7c22d153f0a7733eb4eb2cd8a74a4c85e40dadef6858c5927b6eeb2b01e9b7ab02f7048c8869991068b00fc19b9545ab42181dd5cb5488222a402e827f60a8d87b09ecc88350032f998e3c10a88d4733227334812ec97c5e5fa85faee1a1e28a58641531b139aa58bef49780dceaa408986cf3c40e226c60531945a20f91e5dc31ec86c9f9a0545e5fcb79a13b9afe9b133867ba7a38152abc6d9f8ee10090bb71e6adc6a6c2513b066f2565138bada60b0bd339f9be1aaddfc90dd272b4146d0f5830c6a53e295c849c15d001176e7774fcd7619d6ef1a30ba93cfe278ab4806bbf25ce4a4e94163f614e81dff7efcb015997f5138e22b80b2b00ad7579cd84db5d1c7fb16e9e8c5d9a5ba0ad0e0a7de79c18839d673632f3d2c7da2062eae844faccaf23590b2fbf1861405ac347eb9d723ecbde54cc96bc4d8ee2178f353310e5d69230c5db2841d2a06a3a4e03e054d99defc6004a6e405fa89b198a901ea1ae9f3112a29f3aec5698a42794e04d74d761e4aa5ad23de271969baf124450f4796da1eb1c01480436ab0f5d0b1b2e6717dd87eebf137420961f978896077e40b2d2ebb5664fd8ad89bb9333fdf46c33ef3bed21bcb5b4697451bdacf364f85462f5cb9f546657b4744edf757daaa4d3a9a2a6f281184c3576b1db0b540f3b36310020bc6ac0c6454a7cc8ec1182422b17bda202729c270194cd6044210d2b98731565812339edfe5a0dad79ba826d8c566c7d25dea9bff0badf1e4e5da2b884966e03fadc51c6d9bcfe877511157201dab48aed1ab038999e5cc3fe58ccd37d40050dee92e0bd5332413a7f0118724084ee5545fb51942df1ef399f734fb9592555b5f32290c53d7e5017efa2b61e29fdce90cc3e7c1b0e545425b1d3e1acb9089daa786cb0122db3ff27ea0367751a5462230f0f248147ebccba2e16d214e9a0baebe989bba020f95b623cb14acaf2be6f157dfdb1e32627133f0d26c7b65a189f39955ee31d9b507b43126b06b9e4524732c8621d2274438db7ecaf736ab7257ced950eb68bb868581649232793ec83379a16f40781e76f5cc57c48c3f5c2989bea803e1b63768436d39ad19bb77db46aae6e8473ed5dfec983f49e4b8e7ca6bf476ab2f0272c0c2dbef1bcb064d7400bfe1b9ecce13578a20b1d5b48133a74c5c59cae0115bc3b50574580bfa99d58bcad336ee2cca5b7994c784bb90cc8f1b9a0e21b39d5eba464de34d46ac0bbe436c2f419d60d8ab13786f9a841b52710d1b49bec290de317b66b6855abe156c07619a4b998cc582e3f54a7f457f1d2839bc3ebac937ad3ebc6a9e6e845379cf1d66d7c59000e3f6cf6823b005728a95bfb0acd044eb35d5adbe8933a3637887cf91ee74bb910fdcbe797b0c6b1b056500542bd39781bdf13ebfbfe949d7ba0b7f31102e63bfc6e22693f97\",\n        \"signing_randomness\": \"3564fa8a5675b141d97e6e832cb5ba14a8472437d7b64514b7a9440b88e3675a\",\n        \"sha3_256_hash_of_signature\": \"f0be9e932fe810b8cc0992b49b168623d9bd3ee6309470620cd6630c2cfbcc7b\"\n    },\n    {\n        \"key_generation_seed\": \"2b2bf7cbb0957a86bbec97001b60c7c6ad98a56e94542ff561f78fed211da755\",\n        \"sha3_256_hash_of_verification_key\": \"8280c3ee838607a95a4086ecc042eba315e63566731f19617d3fc70d81d9ebbc\",\n        \"sha3_256_hash_of_signing_key\": \"0d20865ff21083b769388b0cee5dd6f49a28bbfb7948b0fbc81c7518090eeb81\",\n        \"message\": \"2601a39b6d7d91de539ef11c3b67ae3eb1607716f587bad5f60d311a9f4fe7f04350ca085eda6d41c4bb6c6e13e376bf8a314ddf791ae18be2ec0544afd3cc27bdf270c4550e9e78d497b92349ac07755bf9167b2958bde919123439d6f49c3408e8d88021e668a0a5fb6799330188e35ec5939b77097e3737c4f664d01d85faad0f583b3e95ede125587e2a79991750d5cf804325c72dc8ddf3471ee8fde02519d2d0ca7edd651eee30b3be335ccf7fb02059bc3a47ee3c056d4929ead4fcd82c8cf49625d5da460daa299718556bf0f77cc5cbadb99b64c8ead4474601fd5c79309d4e63aac392853072619efd7b958f0ebde5cbd40acd57df269a8810776d6dff2e637ea57adbfaa08df8d2581c38cb262dbb4d1f3c65a4fa068539d2056e08dcf03baff006edc688023a20728b227a99fed3b8f2bcbed2e3e6ecd8b8665a2e4d233b78d7c33f6e3bd9d0a24d13c8eacccb53a21dda9e7a34f9a0f031091e65f749c9ebccf3ddc4097a121d8c68eb7883405ee34f6a8b0208ea8d5a3fab53fe2cad1110bfa6e094f78d5314880bb67bfdfbc2df8aa250f1d7200ff9a3247c4976dbd1bbe99df02a3f246e5d466f85ed2f68e0b2de06b0f2448a7b98fbcbf5872bcae71bf0db4e70105b020ff130141e8de86dbe05b7d2a234ce2ea83a38e23a262e46ffbc837e8a71f657e443052e9a49dea4e344d497dd2de2afb4009d681f232bff4feeb173546cbcc4c80c9f85b1ce125be678e5ec62ef04433d55d4b8829b01ac165a440fcd6594f2c0cb456c8a47444ab05a0f0717b8185930d9738e885d24dab98e11ecff7d7a48a4527f94fc4c9d1b9d71f5e6bb39cf92b1a6d0509fffd42e77ac9ad6f50f8fc649b96b8ac08673f78ae8d0ba2b7243452b33aac44b06a2b9be1ad6a12583d3590a3f9af0e0dc35da88a257170d315f32f3a889601d6729433b7ade0f719386723eb2a008634749f5253cb7d9b2fc99a1ae1bbbe7f00a536cd38f8a7237d3992c3897df412f5b1d45e1ef5b5dc974d49cf8dbf785160bc527543458fd9378b3d4d3124214ae5676185794209ad0ee73b063cbd5b7830d00f817ca0d5cbb597c44d28e4885d935b7bf426c1339c500daf4f2033fa6a27a4196f233256650472f205d2c5e00e7087fb73027b0c6c9ac5c1d928ccd190b8a6bb33f512ca8e2369dae6111156de47a24469683f4721a25652ff87474dfd92a028b3ec5bcfc244ce442752a7da1da6c33fc22573bf0b13e371ca9fcc86c76fcf7a1654eef4442e47399835a06336e62952770c6e61c573cfd07b3ab631b8831fe3f5dd2c6df68ebf2f8e02ec9f6b90a371ed5e62c8463780ac453ab6f72d38c8f5212c8b650f63b98e3c0886b6a85ae8e7256c1efb30969532cdbf72184aecbde2a17b9811dd4222d080049c5d36c532cc0e910779d64af93d750ee96bda87562ebd3830fead07a3960cd6de7146603199563693392d3cce1332df35c2c8a2c251911d38e95815ce5a4ce5596e2d77711d87cdd54d22e8f0ab431bf8b24ce9c7bd6d077e436543c70b02f338841af0fb86b5ea4b6a47e27c1d83e1ab06801044f546adada437f3ce7d788a1c92a74ba540664658e70d4f2711979153ff1589792859c3bf122628479c7c35eee951dab8cdb0d4d150c2da338346988d34f8c5e589b231b5e00849611ba09711bd3a0516fd515e6c4ae1e8a3657c282c8120c97aa7a2e3baa22b6eabb8d8212a9a48e7759a9daaa51b538f662a05fb897067b7cf9d2ceb47a1897214ccfc225ce47cd60e86f7dea49e220f7ddd6894b30b66460decbbcb2e42b31f4adf0aacdde544b9124ea5ecb04b03c448b17e8094d489f516d23164d2317d3a1332e0500f1423136c8535d69065e880af34cf7e36db5ff2c18122e41880585b4d188411e86b370a024bd6e28143ea2eae52eb46be334a21a02e21c6755c0182b9a055a7d4c7b056e4930ce63edc79c9fb4e2fbffc58f776086f3487f02f8d1e7c8519c7f452e75ce5686a037b3642b95d7526acd4a81a47112cf96a8da7548016a22e9359198e871dbcc5852fbe14eecf3ccc5eb2fb5ec31d10474df7d63482a03e11f4aaa2eaedb714786e21d03af1cd644d06bb05ff7b3959601580bf50e5f7f82ff42e9cf2ffca0c67ffc52cedc53c7a5c9efb6c21092dda374d1cccbc78bbd9f5ee0fdf6da6ac60c95f7c2e96f17e3c379a52d5dbd1a92dd76d1f5dfa19ea0408e0e7f7867445445cfa60bcefc016e68872fbac9098fd6a8e84731c285570b1beacca6f4728958e7924f7a7b7730b9bdc9aaebd9e045f464071843c650d06c96d487cf8397286f81d93d0cc2008a62ee32421e5231998140909474f6d98541d899ea53714aefe652a3d792e4c72533332c3133707a49293e3b2e06ae18f2f81d601aaddaf2fd09ec59350e0979a5ae2b721771682a1bfb5748d000f9736031ca971288f34993df10fc06a16a6dbeed8cdaaa8127f3b71432e723558f0281459820a0f4a75a3b2716f976bdeb88be9c73f31623050d7c1a96c84988b01d847309e1b6d7b815883f83c9bdb7fcdaefa8ba69e25b824812b7d54530a3ecc96611897661158dae1b4aac112e9ac13d07fdc03dc7d5af23c08c5e4bbff737238fd3f1c06f94215bf2351dce9cae14b4dd4745ac0cd626054469c6a5286ff821ba192706d47ccebc443dd67fddb76797a8b78dd0daf850cb5d181c82298616e1d3a92f7fc82fd256857915773c7ad97cbb9710373299ae8516b8a1d647a13c7be848e0269ed6c8a91dc50d0cad21430a3bc9e718a13d1966a0182d9a24fff7ecbc7876c868af2baf2d8b782172c6719cf140e8cb877fe6d78779e1bb31c70c6c9a6a77529c51cf78a5e4fbd7ff6153b5195817f80603e5c5810c38cf43ca812eca52f73f045e33df4e3d04ec8c5f8b4a7399f6cbbf0d39dc951c476b9bcc002720ce89f09c3885673bba9c90d20dccca4a82ce5beb38bcd60afe2ba65fcfb01c8793b7ecc0f0b17a9da74f2e0fef4c90b5132fd6baf8c010fcb5e8e7faead7f2e0db29bfdd1811072623cee274ef2efb0f7d4191f332aaf20cf36ff89a2edf15f7b284cabbbef46901271d8c1b180f736125c8a44fe164ac7e687e9a58c3b1775238bf1a11f99bcb583d0e3c44bf4f76dcf9496a06f80ca52e24d55b54ab849d3040b4798bf5292b0574672e9f844016a52a4d4e4dad2053207bc97215bcc1bb93271c03c9ad2dfc7485ee2ed399236aa06cf9a12972e21afdc587a6334cd1d71a7539362d714ba26214664e3b4bc39cdb1db847583db8e002a2aab451b4e5bd6fe200730bfb2745d03c82b640f4ccf58701708f724effdf98cb04c78df36b7a866cfd596bf5ea18445eea0e34ed514d0dc2625039049a0cc82711dbbedce339c77f9fa1dc60eddd8d58c8f144b0f3d00227afd8710bdc66d29809728d7fbe85f08aa38aebe5605da29a09cc0526fee84691eaa54dc3744bf5a95275037fa2f600b1f91e502d5d81af48f8ec4c1834fe625fcdf2364067048727559047e07062b4d8a7d3851853bf28be9d2c511451e5fdd9459270328a2612dbff42e1dd34005a3da1226a023162f454923c0337e6c74b44bb27a3b1ac82dfd68b0a6daf93473d97a9e4591ec01a51cb6b47e2c7a85c1ffa73c35e5ce3003bc4534a2d9b16ebf9fed6464cb1e0cc665a451616a62b6a8481e4506a73883198c144a06331224d358196c815c811b103959edca35b26bcf86f41d9c7638547496787885ee62b14af431cab2ad4e0224d33476c58b8b0833bf13b50be2b1d682ca7dd194b793ad2c6e4ee25aaf95459302f0b4daed907a317bcc6a5f8d76ca9aa0d799f8ea39f330d6244bfb9f35e6223a0f665a65f55eab9bcbab446d7fcd424dce87f234864d2c27ee84600ed9193afefb6e7681bc94f514fe0748eb32d32262cab880d79cd4fe5cc963a4f688d448f2db2dcc5b0ca87ac26dd8506512c100273b8d4d902fc054d48d8bf9ee818ad9619f68a8904b613256db78c881cea3373f0cbbac336a78cd91ad9d60126e05cb8c16e9aa8482cf1b806b2f9c57bc8d63bf008ab2e49ede8e788bf96b9f1db2918dc5063f3f1d5b9b1c0327141acc0b4b248ffdcb8bcc127050d27c805e154a4825dee6be9c8d4e42b1f5efc1eecc6a45dbc119afb15ccad19789eaafa8b1715111ae32e2aced2278803b60e2fd63a43317498244a7cf7342342b60462510e19d83240dff5d58e762c093df326ea503fd347d2a92a5a4680d5e13b305671c729179fa21be83b0d83144e63\",\n        \"signing_randomness\": \"2d34d02a0528a9fed0d2ae45188404317d4e5e5dbb22c710fb65897bbd3e582e\",\n        \"sha3_256_hash_of_signature\": \"099f4752349f83ad6294948ddf4589755e71dd729703aeec28d4a2fcb03a1a32\"\n    },\n    {\n        \"key_generation_seed\": \"049569cc5fb969c6eebb8aea1af1fcaf46f8a9e6cd6c796fc7193592bca9cf23\",\n        \"sha3_256_hash_of_verification_key\": \"1c208cee5569588a73e487e8a771d5e99f3e6d8f78f41388f9e871a4db32dc86\",\n        \"sha3_256_hash_of_signing_key\": \"e5aa36787afe336d8632610f9577041e384a44a6dbfc0726c16051f9e714067c\",\n        \"message\": \"9163116c86e64d90d35cb216fed71bdbe6a0797a48cb915f5a40fc8d31ad340767058b28cff0c240720327e12e653c1f98b5755d8000bc01324db2820781b94c4434fda76223845e0613e2526a95f28fb4a768b1487aa34dadb28cbe8df4fdb510dffe672ff004f37c7ac32072a24c0f12a050bb396ad56346f4e0ba75c0efac162288a7ee8a63255dba5cf451a0932fd56b05e40edd491293e045a6081f6586bdca10b41a6970d8f9a7b3b6b58aa772eefa9ed22c9a24a384d6947770862be4fe45c5e0e56fa4d116b79699ace41e5d9f2e4c245059cd798dd986a3763f527e0c9d5a88a09c4d76d447348509fa7d9bfbf3dea59ea57711a3b1a9352123d4a74df273fa24a89bcab42a6d455b5fe3c503f1ff638280f87c740b9e4c5ff20133cbdfb8d08caeb7de9f26811d437e6ec8c3143c0419c2f5135d25c7f40c7908c03f295fd26f1a03fbc7285196be40adc6fbdddc912b3bc94b0bce08dbc2185ee3cb766325068db55c31ffebe4b1f6848ad4fc201a5fd056916a397abe6a66ff9bb03b037b50ac509e46ca441ed45812e3334fd7036d190a7991e55cb817ec2a63cd800f293277e7d15f086618b55ad395c614d168fcedfb274fdf4fcd50cb976f68a266c5365e02a1ed0221ba4e13e70304824f94251249ca23c089b4d54e02ea03fb7c9841dd30404428aab2519d68cf564d75d18530c7d062496c120a8f5305aab23ae52255ec919eb0cd875422b144bf47f7472349558e746b0eb5493f1fc40abdadd2ed84a8b31221a485052369fd0b552972c9faeb1a78e826ba4dfb9e91e301db589e9d7c256e7051692c48534c6a5e2bf0f45b78aca66d5f53e549827e15d64e2f294f93d43b9f36bedce6cebc05e56ced3f846635ae3c384c3fd55b969ca31e8c625103c2b24e7ee45e92984ca23a331c5b14281b20116069c619d82d6080c6fe35c3a3fb2e73b695cad9c5d3300814fd65738dcc3eafcefcd24361aad13a25b3570d2d509fa449612bdb5b49e0605d7eb78449d1db40660af0f3d8bcd4869b6f175cd28ad72fe2668c3dfc1d4963d0eab309dd50b74b9d2947f86fbe9864ae5d0dc69b55b182ac1d914b11f631193f5f1f897ce52cee97d7ae95631fc2f2a1ae9b672165432eb2e5633b55185afa5e883268d8503aec10774d25d39c800b74405414fb06c55b8c48835577884d6b4f2f128246563066f8f34d76213e0720e899fc1f11a3b0a591885d82c688e40d6b44b54d6c7c6973156e2dd50c40a28d2ebba60f5117d64646caef72974f4b8362e4820ec04f2f373da8d883af27518567688146f16bf4e10969e70be8ace5d2ff6a135db1dd738907ea355fb6d243904f6427d11592672060da14443b55a9089167fc9d5efb2c64b0069795c341f90daff684e566611ea87bc40a4c45f22c23ab6888a754b89e4c95bb54629ce74ec999889c82714b5aec703de7bc080b0d2e622ed53b645688ce164ecdff4ed66c86049b2f9077f2a94cd685294f8ea9cbc1de29a48d39f6b308288dfdb47731e39644b576a298646752f5c53d7943a5d0f7dbbc9604902b61b8edefeb5ab7e5bfdbc1e6723e6047894547e440e918038cc13b47424ccfe1a207e08a40524b553c750683f5f6c960f05836fb9b28c59e1b471fd5331f1811ddf3eaff73798b7ffd6c9714978988c440ca906b4782a410372d70ee65a0a803061708003688f576e2d3a22580b706149a24b93a162be9f1b546680a1db2a8e54a576c28b4772c50a55161b2994514369c2192b2c90017cc8282f41d28099f38b2f1f0d2c0e46b444417a2078755591f00f01df0ce72b1d1bd255a14d2bf67ab3e630f95a5da9bd9e10f08efbf6fe722cf000c32460fa3271f18b39eaa4487c1ddf828b6bedf4523837bb3425ba1c1606e8d5d1e6182aa6a74f068f3e90b42641347ca755779216afbc99603391fcef4e8e5aa202bdca24b83ff42f4f01232d3f2831cda2db76fb93a4cf6e9efb71b5438a4b74c3190a8901d73566c50727559ba9bf6317d116e8f5536bacf064d3f86282e0f88dd40b63e75519c6a8e5664af8e1029fae87930f523e4dc7c2dd6dc3296a42a59f178d438866d929a70951bed05533eb1d818b7c7c595971c26b1d436d26897d6a6eb036a13511ac4a3bd724f2ca57fef07d2c0730800d35683d745125f4237add64b538b7dab0d0f258daf7de1a74f74a2fd010cdee810f514fcf6045f0cc84e2054b5f4ec2772718ffb4cca9c9be77f8f007333860180d60ee4dd8ce976e63ff49aa11dd42fe6946515e59da3e602b1861bd3f63c89362bcfe8438bc71959a617d8d63331a3d903bc5734b777fb14f7a2b063d79ea8637ac52c758ef88df217b95fa8fdf1009ab28d8a4f318f78772568cc7aa9e3b3e001c0111b1751b698ef1b66383d6b3ca942fe4f66fc97613cfbbc03eec9d0b7e08f80939d9a2ea1f72bda7b0d655ac3a94b4c699d3eb1bbd6076e63ef5c1fe9ce258b55d21164ca7ee03bb53d8ba4306f695e648093542d769da95a35ff3a2c071dd8abd5a82e217d82317065d50a87b689ae3a2ec7887957bb243373cf986490961220ea61ebe12ac0287b185070e124fc518c300620b4b6d4f29402b18c2462a7985c00e2a87691053b1fdecb7aa264f33e27c6b201ca6065ef79e5266513aea92e8d3e646453c089b5eba66d14bc45844d0240d2e7737c16668fd53e38a93d6003146019777c03644c300d06927ef6994ac794914efc5be0ca81680ca8c9752908fbd2d56d7fd1fc1c76eed755408f1d7802f0d3d0f347d82b162ee6f0a2a890e083c20b822fa6c4ad627f4ab5d1526d83d897c244d6ed4a427b23b4a0c19f4e8889257c1373764ab7063b5db8ed9c2443cb012381a2b3365eb568649d7ccd52271f25fd22fdc397e4c9c536ebb452cd2cd10dc5010bf433f88cb58d2b9edf2bcbfa83b782ffd4388f1bce3f8f9af5ae6be590bdcecb1bfea846d2f0199eccdb0c7e4d419f69b6a428eaeb462b67aa40340417bdfebb6039aab8242e39f6c11ec136d73fb315cf71414a2a1203af08fdee34ed0072c27462395815f7779012a41ec526be53da954e1f7a7ebbb68feb15cbaea8add6cd0f2fe3d3615991ab54f4c7884e8a80a9535f13be2ed944b3bb315de8af2a70439294cd53f041f41d3562be840c78efcb08661b1731feec46a9091ecede3a9fbc2dae42c72ebdd84308e95644373595db62157dba7dbf124bb45de6c2837b0066673bfd215ff915a8d41637eeb029c345e444251ecbbcdf79e246a80aa4591976a00da06c759c6160ed1986f8e15a562417da55109174628e7b11d49586882851205755b4f99a875ab3599fdcc094e4a2164e1764d24de805fd7b20efef2a8e23fea4e206dfa1fd9c31d90c1fecf745d3eb886190827d952703aa6a99b5000d8ee9d51de94a82dd053b6aa89cd7e94e92d4aa93a9224d3f688b5c834a53f2993638166a3de78aba7cb930cc5845f9915e6523683715a187e940fa2a978b5ca4c3b80db62e96a600f1864bf0b1aac23b1330b13eadd3a2f07ce7181d0a9497c455d228278e5cc3e4c00a2ea3eb8e5b9ce2799256302b0f8f1f829d3a3ae8aa7cc4ea229c5af476c01b8d48a9f6987df57c3469b6ef6dfcb488a3d5b91fe17b5798fe154ab8399a2e75f0d15b2a6aa91302056266b22a38a604edc374e2d2155abca119c11dc6827a47e3cee7032f6e0f59708dface221e47041cffc59ce0334d9b7c5e91c2c320a70ec2f32906624128363c893909f47bd970df652d5e6c2324033f32b1653a039f8c051d9dc8f839c50f5696e9e08f7f1cdac4750b429af03176ff6e643eca1d8fc710c6cdb0d26074d85316f4c9084d5f453f6d36c1cea0e389f3462e1478e2503c1db99fc46f3f0627f173672c21f3cc3b483998192e81efa689819d0007762adbd141a058587e030a3568e412d25662c40acdafc3c6ee30c10cc23e3ddedb6c73085c90c89b1218d67a328f06c3637a786d4715cb9f9d8b0b22d920b68b0557cc80a56fce0b6e2d6627de576e308757a8f37821898e96785ae323e413d3572205b0a5710143a2621c258c76c7c3ff7100a2fcae99c84d1ab1cecf7fc5b1e4698bfa3ba2a0856a65f2d4f291a4a164c0381d70d1213f7e40fc4ba42c43ea8e70043e27c5ab0827559b7cf7f2587d0d2f93c6382cf54e92764d815280d68c554e5b6fbb351bd18635786299dde39fcaf3efa708a3f18701eda1579bfb0bee4fa1f1ed6e09d450d427e4b91f4552f87f31f06f109e74af4bf301481452aafa2146f6375da467ea008bafc3c8408aadd61b07c28c55249ec0c8bfdb00ea\",\n        \"signing_randomness\": \"4847d6414be08bc04dceab0860a93a697d941eaabbd52a6dff6fc4ea33d4b60d\",\n        \"sha3_256_hash_of_signature\": \"84c2305eae800ae7d6b5a07fe1c7834fcffdc7a9e62967c15394ea3bae7c52b9\"\n    },\n    {\n        \"key_generation_seed\": \"9d89b9a327df0d341cd2968ba9218bbc3e934502cd88919d8bb16dd3d39febf7\",\n        \"sha3_256_hash_of_verification_key\": \"5c867dde54a486fbaf2a67676a56f33cac3e5ce03cfff06f1d1a5b6b2183dd6d\",\n        \"sha3_256_hash_of_signing_key\": \"928692d2be885267fd9dfa171dd1ce1a3690361924730ed0abfad39319efba2e\",\n        \"message\": \"02c7c4451da90503c43fded1ccb3dee468a6a8d9e56670cd8f6a58e7941f1bc5efa6e2afdc0141a2f7e8f781d79e70b4813263a9dbc8d8a67f89371cfbd90977ec96461b28bee4c644f2c91e96257b1909b84ecb25cf438a3fd6b835e20d5cda56a1fb7995fcaa0ee1b5327fb1288e3c57cbef0554ca5ad6fcd1f1865c6aec6cbdb24495700ab5aaf078d8516ca4fa3a231a97c77bd150b127cdbfb42c03702c9027b2a5f6594b022ef55b63bf3eec27eb0e9529eccdc82bc6ad1f011f167d602ef1f175da5db4028bf08a053af2c728ade93b37edc2a75b7b6c6cf38cd1c07f359c73b131b13df76139dee6795f1d85b47f29ae97d0e40cf5dbb67360044f78940a1e80d9d99fd5ab0185210d8769911bc471650df0fcb9c3af038f7882f677790e146e612fcdd6fb89f90b7e5e46cd648f4bf8f736d69f8a91e4806346b4366fd48d1481c0b47add82003310b0a99b779d63ede1771f50221651b2d8af40f48b92ee1327c85a1d2ef2d86378076beb58556fcaec6029649a0ea5fde517a85d87704210e071fcb6f63317aeac3eb3e9746018e1028c50c790a45b1beda6eea2d646dce401ad5d7850a5f69cd85301920de77ab0d01b1361efa3e70ac05881bc02190720acc75a691d6064f9d24c79dc72476309e58cddf5fb2a253d857a79c8e898ab6adc300eaaf208820cb02f5f2cd317f4052d40de28e52c55a0349dd855d64e8da8296d4f572281e221a3d27ef76fee67fbe5484e6460c99950763b801fce828e93d2a633a1ca5d7ec582d7c463da5a9aa8056bb2173306f3820bd0a3273742789b61af89ccc42b81cc68745800d2a59231d5d28e832f443a871de5b6b10b58a8aa7cc9816014d7f3545ddf1f481b7f0c9dd41b4d96e5db767b74776c2253fa230df65f3e0b944b95ecd4138e2847418b084d9f9e0798cb5247238ec12b88c10a5c0c645e1d09d09059c72e33c28a472fdd8b88eaa93c63be7d980a12195c2ec3105df2bb81cc9c3009f7771b6b813cd12303e3a9961d6731af55ecfe5127bac68d06f835dd5f2d584fc0e648c3a4256e2a3d4b81966010964657f33d1fe0400724c488d5aacf9f2c0b802cd812c8452e5b8e2b17ff4a1289d33fc405f5db4ecab4a73fca3634756dfbf9012c413b6f64788fd0f68f8ab7620477acd3c14009377f3dd54b9eaf2784433d63341323f54d113fd63d7456afef885f13c13172a37a5dc82336b9515f8f7f4903ef6dbe9cb34930743b6ed11265cf94aaf406dea9802d17bcb369ad0d9964792f74d338dafe47ee88b3b74eba8e70774edc1f16fa876fd62b0bff880ce252ee4435b1debf36f0a06a4fb406f01d618c135e6103e2a39f4c9cf41ec93702ba76ba753ab49b5836c20f67d05943edddf47ab8c5b81f4bc22d773305076f7e5b697a7b25b016190072f756f19f397884e0521595326ca591672684a3be17c9f5cc8e8f4848f7136762178fbdcc7bc6a6c6a31345fee687b0505f72bf1ab7eb87bfe5f896cfd42dd67a239c70648b39bc0c84da33ca17838fb4213c38b68f22914fec3dc50194e883720719e9b5f8d037debb726dbd899abd97853c54b0bc347a322bfaf961c6cd6209c98aa81b8e2595fc151b1375bf4fca2dff49df40a3d1c694edff6e9687e73ef62dd42ad7a05195a7f206f097196aa0e4d68f8132d4a00ceded940c4f6ae02e6d3763073462c7a4bb11778290e744471ec554a05917e52c5263ff02c07bee055234eee10b79175dc164ab2051b03598df1d4311e87acf4aec45c55b1a58b0f05ebdabe248a27c0187643cb8f9529d31fe0ac4a28d780196da00dacff5f2dd64fb04e7c159dbbcdd3343bcb7ae188de15d923d2ac0af232c5389dc9c949fce554f7a0425d4f9b28df2ee4b81740c2b5a5b93f0f7ab75ebd360cbc78b11c28608b5bafc970cf3d4455a20a198392d876edcf89e2639b50cd84ae21bd50fb077050ebffb210be711d8ea807ca66493650e909911fd3cad99ab94b2ab2edff192d9d75257818272e147a9c54e06c53210fc091bf4175f2f44423669716fd9a6c4f96a0c4be17839769a806453e55d7357fbfb3d7a458e70957d524c0e896398e135bfa68a0cc136fb93ee7d30ad463e32e152fc32cb8e7f0b05a30eb13c0df98bc187ec0a54856d2efcda10a82b89dc8cd21c67d9b6df3d7005ef3b2bc9dcd5d55b64db40b74fd322cdf9d9911a00b5a02e1ad5ca9bf65d90db709fc1e5fc84be97574b09c83b49963a51228a667bbd84bfd8e0d90ec161fe5ca73bcb8d95fd7afd982ab7ebab51bd2b24cd6d356eb850d2c65593313d8ebb97e7dfa450ae982918582f86a356f538eb05afd460566d79f040d36c93d3c645b636560007d51b121de3fafb3ed70b475aff9617da4b52937c628678b109c3b76bc15bd02b766a394893d8ec966dfd8033d12a8d98ac5be201134325e32cb6786f4faecd7dcd05aef5f3739122b817824a672e71deb312cb7dd6a77116b30715076384297b1962efdfee6d6d2b2ed2ea4dd802f4784872d825db828557d4d927b7232682ad91cec3e508854f529853a8797b7bf7bff8e3c180980ddf4081e96a12a495acde0c73282ac78617c68a55a94573e5a37b859858d1e19adc82821b316b9d346ecfc6dbffb3779f692a62d20d1bc4e730fde2aee826e76638ade3dfaa11057b0bc8a80e8905b15e41d9a4105109f18e7e1362149ae9c568d1d642d65b94253be2b13e7230f8bcf34dc87241d1de72a65bba111c111cbf5bd618cd02e0a06e37f60b3736631073a6be004c1ad5f0091a82c87b276f7c5aaf6938c886a6039df23482e2064f6af05636b4c6ba6b24a29aaf2174af4bd959177203ae9b160f81ca6764948afcdacf6bec0b987c6dbe178dcf47c137c64809483019c5f2072d0301c19c500c60b5ca913c24a8f28f50e1578d806ff9f9b810ca14bf5f2268fa18dec67d973eb1d975aaf871abc980d06222493d900cebd8811fa20d5db8f8036430f8bd7f9554f7cb47f9ebf389f66c3ccf9f42db57affee074ffee4eb3e11612fd8a8fe02cc4e9d2f8bb36c505cece9dc87512aeb5d8ebe33328c5217ccaf2e1af1e38bfa84c0035decd8d8c250fb4d964e8f0ae448aab740d9ee9d794390686fe9a95183f0d5166d479c51014f1f29d8fec616e1a4e7a9c86e2af790bc7bd7bb6f746a2266332e04affbe6b9512e6620681c3317dc846e4fd7974e8ae87e370ecf9dfed574e339cd7e8a663ecd1a7bf5842391913d98686f7f2145bbc420f2f58b89131d5f3be41c85752e13504bcc549a8f690cd2b0e1e29e4dfa3cc76bd398bbf28f33a00c3915dd719f7cb985e9a0a7cc8190bffc8bf47310c71418d7a6c629c491eb8e455148bd4438ba6b7014608b0ce6a1bc5b035bc174c9bffd966d8305fe9e5619bca3fe4b39e6732dc652531819ac828f86ea11360678e786eaa741382d713ae26a608d582a3e4583d45744acedd32670b5ad4a1310301b28a174dc9858a55f0c1b7486cd66cb0635083b0c63016e40dfc533ab80c9cfaf1378d00769dcbad56b09da3a4e6cdbfd8f3fcb951680020dca58647665462e42f42dc14e7b20f262d3ceb0b1a2ba807b98d66232ad7d3839c298564bc36a134cc2447b1b9fe69271960459c0a6f897c1878140690da7d41fd8aaa05a679fdc3037eb2885ad3c82374f4bb991745351292dfd8e54f565e0093776b7ea65ddcd500beb4d15af6029f2630a0062f2d4fb331b47b6a5e139d385016e1fa490eaa209636b1383b7d7dc1148f07ed2cc2c03fa7fee09305f34c57b3ce899c18462b4f1ef88c1ac5259440aab48c5849652aad9d3cf3d31f36c7f64f918868182d36345ba5bb7a4ee088d8b081eb78fe977f5a5295177aa427215bb26d1de33ad4b2d610a47f8c672eeda703a04d0fae4c5961f13ad6fca81863d8a394135565d8b27904a511fd0621a532f84a47ccf4fcc2114d4c369b7a76822959f8caa25a6495081ca9ec3ac3348a981618592c090b6439cda2fbc932c8697b3709323e3388af8efa1b9cdbd65a65c8f0c302330ddbd10e0235f8030562452ede447ee5a5a9a636af6f615b1210aa7cbe69572b3467b643bc5f5ec3f9ad15b3ad918993355e209acbd0f1393076da3b0950803295b6571e476acaa04d48a4627367cb7faa83796c4178ca9071dccb8d3ea70381b61f0c56d515e0a765e266dacb13056317ad8737a1ad541aaccea1641946e331229f19bb54c20bd51e63d63bffa13110a552fd0a95ab984ef53bd639efa0568c6875b2798e3a0578c940c0c4197d3587bcb1cc45a99f5d37b1612dc1a4178a3e288fbd79ddacd049159d6a5416f9ef3f38c74449bfb2e6a894566c5c17b4555e154f29a93241463690\",\n        \"signing_randomness\": \"31b225a35a621b7cc7fb412b79f84624fb7278d5450074cb3e1cf467b589e64f\",\n        \"sha3_256_hash_of_signature\": \"7f4657a13373e1d3ad2b3e869d07e12c8af2d61b5ff7b0dba01514b50b443368\"\n    },\n    {\n        \"key_generation_seed\": \"4544c2f21054605b0eee46f62a87dfcbc3bfec473b9850886266f478bf9e33d7\",\n        \"sha3_256_hash_of_verification_key\": \"4ce0b38e7c0cf1b6372e03c19284dbe05d794572f1cce13fc763db6e8836b240\",\n        \"sha3_256_hash_of_signing_key\": \"b4c51c05eb8fb0514afae720c7cd1aa061fe6c54e300393dd861896464c6be60\",\n        \"message\": \"e13692e3cc06ebe8ff9a292d890f0a34dfe9a4f968f196b475ac4df553a30e2fd5df008df4d7508302aaf6389b6a5a9135e9bc8a5accd2bd2df98ff662b763101d31e24e8f182fa50840be27f76ba5ed645bb4d3f7f2f6ce25179a47fd7b6441a9b3a28783ceedb425b2912734a75d7d03811172188253bd8f0f52eaee84a9fb025f95ea1b566c53297a6a090f7fd8b21639523e073adaa750d63da61631f933fedffb2819e0eb3074e9e11e10b102ac88e2c8d6cf408fd241ad301f9b8e18a88b74cb4b0dac76347635dfbb3eecfdf84229babcc003c6e4efb7394e25667dd7fa47d36e027559f53e98789e6e732e6aa23a71607677fb975c2852367c5ba5e3d10b3017ad26f9a38ce803929d08a43646ffbc3980b359d8bc2e9615636d4e5de8de6fb2465a983eb1696e98dd33faeb7af8c2d30506b22390d7f9fc21c7a016fdf22d21ed2ea4175fe9f5f44598ec26452700dc9a495675431e1236865f2f4aa5bc9c9a10eee9e29b1fc4fefcf8f24bf94342fc7e19aa6534c3b771d910aa419ea2bf70e2c1915891cc630a3397551e4f34bd2192b70eb210ea67cf152a35a3f5d0878e153579b42afafe5068b2be2b48127ffb54553b7a9b6f845e7d72c43938ae42bc03e33b836ab212909510aae7dbe8ee6d0eb8ad84d60832f3151273a1e09c514c3aa4cacd15564643f4255f36059022b91ba4137ecd97b34be3308d40ef06bcf4f45ec625b54c7347f52a21815508199c8b7a6212779cd171894da9fc3de2a6ef5d76bfe03b8199ed1dc92b2a403e4da009cbc0fb597c5952be32579eb8e781eb12d935848c051029c528cbb68cbc1de0102b42561e21f48e72e028c2cd8816a9027914571b49d2f94c9189e1a7f18d7d3d0a09b3a36edb8a084ace5fccc77e3e42eda0fbab8c81eaf170103ca757981839c9448362bcaaaa3f20c8dc653aef36953559f3597e1915f02a8d33d0e46201fc794ee055e6d9955b91fc7aba1f136c280367404725cb355fc2f129413581401f98236d2a6f8bed7fdd7ea99060dabe3f0e8ce20b0e98ea80994d1673e8ccc6a0ba4a9d544f3d31bd95c9d3847527a978c1f155efd84b6a7becfb749628ce82e80285fc7272ea05f953404e437ad557f38fd9bbf77a69b81e4441605b23f2aaedb00c7519d8e9cb4cae5f8c3fa74faabf6c12595ba045f647aba7168c65c8a6006733d1341435495c7088c3361b50c43787ec24c24f57323466b5c088e8097b44666453010da38ad65b426e72140af78a5448b2f93df3820f013fb9dcac49604c86f2b2e4ea565463917285f148e8bfa9e11943ad3b86b14ed59a190cae097db26daf8fd2a642676a37dd90c23b52c82ce028b80a805d9ba05457f7b6cbaecba4094822e16c14d6e2291b731d581b12fb16802653360aaa6a7989d61c80debfcce81a36d9ecc84039c4f086a5579d36ff5d0cbe61292e4fc3d14277af380a9c1dbf36c2d61f59cfc0d62524e042710bff5ba719e56ba367ffe849d660b9f7f3b638e113bf2e1a4db1b8f65a0fd680bb2a168a4fd5b4e0edf3208ad47f1ff4afbaa726e38763cb5c84c03da3d1e32cba873b9a0c750922cd3d0a10a4877eafef602f5c875fbf0ee2f4f0af7f308ef934f7e8e74fda62a860bb594fd061d1b2bb32ba613339042fd90e749acef450d204072acf58b18c365e4f4b815f1e837453c4255d53bb68d50f3677e7173fcc23d2b592149a9f3dd615868af91f705387547862d34553fd45b8df643f596dfdb7aba47bd5d91445826c86fd4d30365a2f9a3cc0913de19707d072f27a09eab906304008875b5be3526210d6b8bc8663975a1f78eab9cd7f7305cdd4c00d6277622e50606e1cadd639730101d088bc2bab295ad86ba8e26f5ebcb3e9c7c543e533a7b3c20f0f89001775f714825dc8547bab06f5b99c5305ef18372a184569323fe269d45b669b9a222c9defbb0b2c84f42a57ef343a5c12f5712eec33985df8f0c566d471a9403fc103a3eeed42829d8e3e5c517bde29447841ce96c8ac587df3e4b6227fab386140db0112ed0d2846355c4a45e94f3a0718ceec13fd3caaeefdf0b7f89f502aacf8c9d96d01b5549157b7df2be65bc30c889e69971700286c561df91c8cb923001e5f0e21d2c7a3dfe8d1af07fece1eda20c031b29a4389f265d2c7be64ec37b2884849ef30fc8a82d2f766ace68c72f0a4b72f3b50884749814387893db2370a3410f794c64cd24bf0d13e44ad500ba9816f9baed72f7593f758592c2e974d1207a664b869130baa1fa71dbc55875134e7cfa276e36568f79483886099a1070c14c6e4eb87523e04c0154a2250624261211723453cfad185298de06d08cc25fa18bc58b34ecdf5d9dbb02541bab4a2af110ae09130e12439f1cecc34f9ab5d7be36c827a6f2f6708b543d4ad2e424805e2a74895742b0a5da30cabe4ab45f40cbfccbeebdab9b8eb8f78781168b5bc79e04effe1757ab0547b9bd0d2625673ce528d2b4874d46df0e09c24fc413ef9ab4c3d2e803c1e316d77ff5de3368bb925b2b1f6ffc340525663931f5595c8aaaf9fb0dccdfa4793519a66d4fde38bd2044c60fd1de15d60ba878fda570e7aef6db69d2527a1f1481a9d05ff2f6f621238939acf5d2c37b2bc3a194a9e65e7441764a5ee37b1fef3b8c9c425be1b5ff0d05bcb6a3b91876ec04ed89a31749fd443c2b85f8f388e7070d77dee37e2b666628cc9a961236dd24af2769c1f613b4e77f8e82d1f410ed59f63f1df19bc53a448106de4f8efb8cc37e40144b0f658a4135e25a3cf36d8692def2677e4bea3a9770f19e44d55080625421d5badebef3b39be71c08650b5718a9b2fcefc4becb26c4b63c43f6557dd66517d103907f82f9c2b965b7c5e36059d2159183f5acb8b5ff5e6b92e94d53ab25ae955424e80edec4650be293e836da6148392c500ff4b7672932e90e068569b81ae335b2e5013ccc95f571948d58127eb1269a08d6e897d2d9b60f3e49847c05d0b3ac230a67eb6d38ffdbd4b8d82d7b9ec803429c701f080be86faa165c0111131712db4957fd84a8936ab55558c69d33d5890cadd08d7f0d4962cf9e2f69c7517e79db14b76e6e188f5ed95169a2a7e4c0ebc2175ec2dd44abcf239ceb3e22f955ed25da41768ca5fd9a9ae15faaafeb431958a679249ab8bf879185e8fbf9986b96a92972153b4cd0d1be001e5afae3ad1f0b1191f1483738e728d4ad240538e5ef7bc9ba4d5903929d74cb64241306fdbaaae17b1c3134aed2cc394d3ef9653cc62a29c4b0b9be04e95e072ec98f7a80a7b575ded4a1993aa884c1edffe056ec475d934b4eb0ebf418975728c6e9cb3919b2b67d2c71228a4df1fe2c8388e3a2bdd75549417fe795f1947f857b1c0c9ca021515fd4d79e691493b988080943c394bf29e4190082a94f224afde5853323ea51c06b41547eec0da5cc202a048d77c7b91e794c51e72b02ea7c14578c11d9df48e099465783e496029ebb6d42d9caa52902a4694355db01dd7f5d7c113ae06e3f712fa577e937cd4fb817659f93964e194fe7d509a81c258c69c3415a8f11d35b414339fd1cc1d4f50665d9111592d1c3a3d69fcf6a971c285a94f5ffbfe8d2fd2746dceb3b218d970d670d10135126e479d92000d41eabdeea4c04d1748a4908dd39c60a52aa5fe29c8aced50dc1295b5c2c4a98e3c62ee4f370f4d3e500fe27b66f65bae604fd558d66b7f09ce36c36c8b5b4fed193ef56d1d8df0fe6fe0031466a1c633203966fe83d6bff843657dc0af176aa8d5cb7312cb4e072bcff24d5f3828e29b2037e8d1fb63537c70c27011e9a97e3f04895f4e84ac69c55d450b46d5792a5d790557be64f765fa243afa98527b976783e7acdf76a7e1dcbda72431fc30d7b05197478d8d74077626ff7409f95b24a1f1bb6b803b9f1b9ad5b06883fae6c4b587c309a63f3b2fc9619032157b98c1da9608107e87f4fee0dae995ab86ac9869446cde92441f0b9f8240e6f7f7aa9189d92b7faa3280fa749ba8c7729f8974049c5cbcb8c6650cf1c16b8194c7ae1a82b40b8b04488fcc69e674362fe4821d4c1846cd9bc49234bcc464013f5f9a082fb83d63098c331d4b1c9129f52259ccaf4a9237f8ec5bccf06f230c08ddaf1d0c21c5930f55d3d5f60cbfc447e7fcbc75cd199733f8d17bd043b67b0c138cb0c9c8f2e477728f27dee573796f71b013689b537aead4991e67f2f5eb94bfad9509d7c235c9e55f68f26b9ce8aa90834d170f8b700a40ae9a817d5d17b1644d25bcf1172a5cf0c755a6ec04fafc39db06aaa05f5988e187b9e110eedea9c84b99ad29a4b31950f2c870a1f91daa6a5817faeae516fa42660fcf56000f7365d8c6cc11d4784c6fc02e4d0c727806e9d43b957bba124c980c31f81facc6d46f6c38d227eef8f0\",\n        \"signing_randomness\": \"6df6d37e181d0f28606b9b1180547a805bdfe075eb51c4ad47de897b89a29a43\",\n        \"sha3_256_hash_of_signature\": \"efa53f0f0e3c3c28e3e645d77a172bb47f19b41acabe68988c0567fea25aebcb\"\n    },\n    {\n        \"key_generation_seed\": \"d9931e321732bd82ec9ca1df12ba48549bfc7d3e76a404b71892f4198777ffbb\",\n        \"sha3_256_hash_of_verification_key\": \"a026a453b4ed99be7e694f374b69bd43f807ef62fe1981025dd64b3706406b7f\",\n        \"sha3_256_hash_of_signing_key\": \"1cf8f76804efea5ecc10718334b2aedf9c766f95b4623f70f9c774fa65828954\",\n        \"message\": \"1f7ab96e8c14d1a5094672d7034fa8f81703a2cc18983c972cc66736cd98b031ac8a479ced21a1f634938df85f3e83161646db81b9ac3ea22f80980b8e2eba4e9975714e5a98985817f426c41f3968349686b69af917564a2648401b8fa127fc3200dc16a9e663d1d345ea83131e21229dd39e70d7270de7577a7e9635602fd2c30efaf204a9234f0a73d21375658b0b0b04927e67f3f5534614edf5137badfed914a49aa301000092da93b3fa4a0ff592cc3a53f4a75b54fee775efa421eefcd6e0d32fb5cdc096886076da940b26c6e07f12f6e08fa7b3e2dc42055308e5607a2732717ae592a6909c6e084252a5b08685fe8c6c1da387b0aa9800b67cdb3ee2fb21b9be5e6b79ab545563068441c0c9c1e68cef6028a5cedf27d3ca47d95094c9e1e68b8449758be3ff8fde148abc420295dc76e3eba8e11433217fdc3136551a5a41c1c7e7d6ef43601946897fda54842d8f73faa7eb7ed0de544fef2a95c6fecb13c8c0f14b5b22493f54374184b73d5bd47383bbc5dd7bc1beac0cb8e66d2f413a9dceb7e1d0ee2d63b9eb28db232c33a95b792ae67d2591f5af59ddc45771a0e7195c4d25e7f4079359597678b0c0a87df3d66a686a9215dd566d4722c212ad05a23e1377e37e18a6ab3ab8bf5cd47bf1baf06eb05e4c150ca67d7e52bd297a08cfc97b575752e686b83575f425f3a450bb0f596a60e41f7183f463007fd019ee255bdef1d98b7a0a12ec33b3e2bc9bf0cc8f4860debcfbbd5e40b2adc2cd10ec35a341be7a49f8d204fdae86921b7de5ba700a61e2b041a8ea7040acee844892e5cf025ffec5322ff6d765bff1107c967a12eccb0489f64f8c13bd7057df76485446641aa7a560c7e73008c46572628e1a225a8d3f6d68ddc9759a952fc07cd43de4434bd3391089e900275e9ebc92563ac1403bb7dfdd182092130e3e6aeb7b666f4ba66c38bbe1f726f40a07df6c42079a6054399519e26d765ca065f4ddfd27a29cba292699cd826fa9d3e7ee31b0d76813879db5ec5c7f454095dc3bd27323dabd2dff949ac760d6137334507816330fa67d886021661adc69aebd882a07e01b4b6e5492399ecdea99222ee785c810b30409dfaf2a3ce5a05d699c2368249c9588d86feaa778b4860d6dd442088a21d2d9d0b49b15ec579776812af8ad582f1c44bb6432d7472300b5440a382ed87ab64b20373a0abdbce391d0bffc9c543ec686449fca9d04b7141836a416720bdff250a06d7651a1f98eabe4b340b2303591d0847aed6ffe423b6dd8c0c03459c381db506f531343f82c116323899df1e5d8db8997bec12eb70103f0bf2b3d53c4d4694052606ee32be4f5b35450358d7d85062dcf7f0bdb51364700baf92cd6ace4e2c10e6cd9a332716f5f4bf7598466a99238357798a499c9b8be77690635c57e7d87a904b3f2278c0b1b23e5860b0532f152e1626c86fd855f656b5d070bc81ce4634a87c8ea6d6a433c02dd2e6d6561b25968b149a6f3bba40b749f188b84314b5778a000cae91a53d59860ee6f7df38ca0935cd64c08a34bf19981c17951b9c39a847d0637441452e38ce5e1d9b99bed51b86705cebb8d3244c40bb8d70f846936a2be29c21604a7e6bd3e655022b929954f6c9a5743f5fc2127b49956d80128dd582ceaa06fc174813e5f5e6a0a4d7d26756fb28a6588e9410722591cce2a6c6ed0976b98e1fb0c642d5df8f08e96bae1fe10375fa1d7c70806101570fef1ebc8f58664281e2b61df2081b655013aef54616308504f5f4a1e8f156680163489d3fe7bb0a514f1d2d57ee6302853d7d03c767c7bdfb79e2b8c80403f26f6edbdd6a890a0a0b9b76d334e0f729ff9c47bfe960a1c3faf77e81b9ac156367423dbb4d766a1f3b1e67595effd76287f22bc37da4f0204633e804002eb7c1ad0836fa4d01e2fcdeab8457dfc3d8b7f1151bef3574f8f4653aa3780003787b8891901abc8250a974c15f2dddf9e1be6798647eed710d06cc3fb4c276bffa585680fc632d8efd1614745bc3c72b82c53feae935ea5014e2b321f69badf570fad878c9590fd20fb7bf1b31e373da93d1a8c63ea45e698ce060fe70aba0fa84f37e836f2ad2998f07101d3fc7ca2b08b1398e1687ed5a8ce860ef9b4889ff436b74d13281d1f6a7edf1dbe8989bfaeefe6a475e65217643e757006871e664099f5b3846553603cd9eef8fc195807361fbfdeb8dee6a0b79f009c10df397ffb865f4ebd0473d458d553358029c6b5a95d6ffee9b645311d10a8f479b7e5249aa87e3ded08311b4ddf3a458fe61ae294a22643861826acbbc9b0ea8b73157ce15d1ff35098ae67159b07ca7499398c26776dd9884b5d3786c87d48e864d8bbe2b73e2890f217e135bfdfc4dc5e805d9cefef5268e33db611aba6a5d57ec82b7246a63dcf3eaf3a51cf503d65c206d2362421de774158aeaffee45a6b5ad5cc0b1de0e2ea74e97913729a69e9c00a309ddceb7738baf4757ea9cc96e055bbdf692b12d8b01b92ce5ecf3d52187402cb7fd961a2672dc1875b6ea22ad7f5f42b1b52ba2d780f2e6c5b25fc7e30b1b663e3a09c8ff0b5c302e0e7f984ddcc62dda65fd996e17da72f02a16c354bbdad44c5b5044759bd53789b98bc58cc25fcdf10a9cbbf0fd6abd58a4cedd92c5d85ef22b3c5ee5d9440ce42995517d2f7352ce997f51a36b9fa5703b4c6491ad01f406fd1b5bf85321026d28b51354dadedf057b37743499a986469f908a01f3c1b74def5d8e2f57ed25a80720b540333109a0a65e7984b557f65429f3d3bd7ec3732a10d7af36dd5d2414a09949a0f57f37bd9021d2c482e61437cc15e9dfdd92d4c212c4fc6c22c54591e5afd48210fdc88040135e433f50e45874e0d5ee2bbc857f2c80e2fa4fc7acfec8eec0cab351f677c790787c715945c21bf923edc0a58878ae09acf5fb5a003c9c0b6e30a450ce6dad4b626108b88e89f1e6a7bb3843e1ec8aee35af69e81773cff71190f819ccf24142d60ac51b80b61019ec7ed2efb6c5f18b499fc9727bed2e3324f8b94a522092e0a98241e29f8f14c6561df3fea0824f9cb0fe10bb497e427ee62085e7aabb2900fa47bf27c1638bd116c5555c076deefe9754e8ed333d72ce9423e27ef640fd5199c0cafbcf2da1c5c34121a69e7e0deb3c268fe60c6797056383da43e6f472d225116f63124498271d3d43aadcc5871f2349ce040be068d72eb57b7827a7d9aa01405ba0ab07e684b91ef05418948f6713aef1f4948399e0e6130740cae3e481a6366295422be3ee2e892aa9fee86a6e23e2ebcbe654989fd93d1c4e7d62910e1223bd66b7c54f8dd7d373986e5d4141bf0bde98dd13aab7d598d698660f11fa4bfb0ad09d5c27b65386c8673e6c4ae9e8e30f8dd1a5a3fe557a3c29dcf99a7c376200ab595c49445e740e3daec07bc047fd6ea4fc6cfdc23d7449f9d1170fe635ca36d3de5b57f1cfb182de240cd4c1e480600c449d1a8596d8315906a53954201929e7665dd2e27d590d481dd394cf2e8ae19217f1ff0cb511def7460dc9e49c21607247857ba744b1384344b4c2d8ce987512376f66f1a279509281242a7a2a58ed500395418138abdb9c5572a258d157f4d3e88ed216bbe9cee3bd054fe61f94c59a4ad19aa62e456b86cade61622a6fea877575eeaea20c76ae8a89e7b44396bae0eeeab1c23f221a3df2b2cc683256a4e5c8207eda0b235562ad3b510f9d3fbe0b51cd8f238a0abd2ec182681606c8fd111d8ce1ec1cda6db4572303ddeb925ac1fffd75e321468266790dee6bc0e85070cee749d9e46795936324dd1388e1b11aa617500534b8daf2de12b035f73111b770f5f56f5c6a4152c45ce0e112e650faa9f3c7e59e3410745c29fa59cae5cc37fe4c6594990e50df1576b69b2b292afc58a804743f49dd7c98c1768fd19ab4213ae4fb197492af5bf7fbc6c8b507673539d8515dd527fafdd8ca3eff629caa720aa11e65922678447ad4ddf5ff943873df5203afea4130ca5f633e104ab083ec690cf092d208a98006e91bc7e33731d18e592869e564e6d3ff8bbbbb9837ffc1f1b92de0f5dd4a029c51e3f64592cac3de1b4ca5414f894b7b0b7d73d6bf1da4b908aceab47771da56a8b0536301fc5fd270caa55ce171332f7db2eb4619c4b2c1971ebc0ab8b0b11fd54c24285da8428ab9e0150d8897216b133ed554de8cee532024df8b8d9314d7c9a3ec60464f9c7bca8c3d4fba23a7b543ac111aba8c8f1bd54a243d565dc062f84cccedb0a03375fdfbcef8ad8cafc440d3e6f988dc607ecb947673dec4ad48724c91a6be22a0027e42af6d94d26d188d0b7b3a5af012880fc0105dd2f11171742321dd41a0401415c58ad4dc445642a2cbb466788f54d270bd8df25602b298b62b6d0fa3ada97008a99b73a807092f8957f17eead9d53b1128fbef1defcbc607ea92afbd353e95f52d33ab7c1ebe2\",\n        \"signing_randomness\": \"798a5665ddaf05bb01749ff874f94e9d7064911360c455e47054436ae1bba8a7\",\n        \"sha3_256_hash_of_signature\": \"4b64a531cfad4d1530c5314dd4245d839563f66c9ad96f0bff776150ae88a8ab\"\n    },\n    {\n        \"key_generation_seed\": \"f838451e4a5929b8bae9084b40b1dc0edfb76a9354bf27f981960c88b0ba3a11\",\n        \"sha3_256_hash_of_verification_key\": \"a007f85e0cbd19dfd9bb6b30db3c781980fe2a93ba349afeb3a8311247f7130a\",\n        \"sha3_256_hash_of_signing_key\": \"e6d5aa35a2b81735155719f5d3684918fcd3bd289d9a645197b6973e8da22f81\",\n        \"message\": \"de897f02ae7292abafa6a0cad52929113410f2ba972b4184e894c4d31081420751560956f49ce2b772635625afc3ca6698fbfde4d0a05ef243df190ba1ce780eb572590e01e6e283e1963f2b0722b0ceb365552f65bd405f1a284ddbed07ba61c4453d30cc28c83e41590e09d7bb6932d231285205d61332fa9263b8a2d3d7f7fa20f521ca4b49f249896780e08c2dc41669bf0777278f87bb1f72cddf4b998062b1642791f81ad474d6d8f963dcb4458ce11108544c41cdf19145b77038c7e8adcd6501508c53b25be6e787313018620d1ba647cca4a5a8399e11815eaecec6ae66dbc576699bb0ab44de111ab6f252256389efdc0546e641de87fd6a3a724716257a9174f39542539a593864441eb79d499fcdf2f1d053cebb3a1fcc09419d2c553c2265b3dc3943e0341bb49130e9981ec59945fa0b23e9dbdbf352aba0d925c4333f2ee1f2c83c847efa78bb13263b893d7cae029bf08cea2a5d1b5b997e403a489c6d9a124fb8386fe58c2476894e7754b8e5a162102a119482b5e59f8d89c8b1dea70b6c80641c77bfd12d45c5b3ce0021ee500a1665abcf740794e0d3e7e8cb5804a1e0d0c81a107dee80bf63bff8ce2ee2dd602df279de39c579b417a758356d2b48b41e83495dee9adfe4506e03f19dd096e81405264d408b2fbcdbf41db5ced6fbdc2645dbefe5bd038382993970c7686dba3fedc24e1f91ba4b6cf70b2e832b97be24b6393273a519db0b4446e98d77e86ccacfbeccb18939013c66f7a29b10de2e88fcfaef656b858b7dfacc4f21ef5f328c0ef604fedd993510ba40530b79525fe8d336def0e5c303539e664a9360edad7268f70df4de199ab3f70eb2ba65e2752bf5fdb1e853e6f4efcafbb31d8cc23155413be31082da958b01682894a9057cab66d4d64a6f3b1d81c5b75815a3e0caf6486b17339174276a84e11c117b060302dc2ee06a03c0e15395c0dd32661638f059a385578c1b792349a41c511d12ac7185b060a831ee296e6626459c2750faf3afb579f6f6836d566c00c979b5130e8e50431e914834cbb3d26f6e5ba50bcf05d50f699faf10767aa2831c3557a53af14bfd9f23c00f76c2680c7dbf4a9b2a425e34c943228c3ebe55a0960acc757d7878f7943e2e8a1cbc8c0d2139a6a6459d3492a1a7757f71e90a58a78e0ff9b04d059c5d131f6e3c30742fde5506ae7860045a4c903de96dc43ac6a69273bf8edab7e7fafbaad9efa8fa609961502efaccde63a6d98d8d017075487c608ff701a7e3381d7a2acb134b198950ecc6970a75af5625faa4eaf968cce48ffb673f4f365802a984c609c33ba312140a60a6f0924e945d11baacfcd643c874d352a90367ea4c59b63665364832b1a9a9a01eda92c64f393c357158973fa7c6047b8b5e27eedb28e26359402b63032f8b230f5aa968272819ca486a8bafd3d66799ae951cabf04ea81e1e7e4632b915d4e8387c7d1f4fafe1c1fc8666fe0318403ea0027487e947d844a7fa28c0523a64ebd95d2a8abf6a71fefb5bc059b2cbeecd4375f3a3f109dead98539244ddcfee9e42db3abdaf943c445712ebf19508a1ffa6133c5078c1da69a32cbe729a8876c4c73cb232024a87d87fd5f9456d3d4a936cb4ce2e00ef415406d66d344000a4a95cc9651425a16021336c4beff310210324c754bbe13cd0066c507413671c80cf492b4655d898a18a2f4db5a393400c6ad821580b0712d6c919c62e87fe212260eaef6876c409fca1047a67b223e0766144f3f676f051fbe912c4ce4a9f7b85459da031ec47c621f6ef06cd1621421fa52b047b51c944dfa94807083b4ed40d533b19813477193d1e4e96c8d76a5af3100fa44a985a6513060b08a7f3848159b3cc551d43370b223037753b824a099a7c7df59305be09e2e79618c83818bd542f39380126a927190ea5536dfa63b664aa7601c6d82cddf4ce4006e1af2601ec453971828cd09c29d2f3ea6392b58d38bcf40bf6b6497f6b848cb853b187610cd23880cb09787c76087356c66565c0399be746a81753442e4aaa54e84f1d8c2ccb2d00a551e960203d61e71a72e131ed1967dd06e72c99264ef2ee5bd156fc869b5031ba23a6d354d7cec58f339f6bc2dd1c547f07aa733994860197dce5bce6024a74668ed89a2c9cafe1f78b31638c3225d96009c260fbd28c1f0423e75c9c01a0f9e62b7f265fa3817f441f56ae79ba54a0c107fd7946a2ddda60d0eae428715fe2b4ff93bef83cd10e5e17760fe028f1aac8084a43edcc12bfd3265d13fa94d9704809a50881d48f0080a976c5bf31b353b9043c0f0b69ae6f2b8badd056752f2fc9e90c4b35850c2d45b9f354b41ed7826b976528875547a0c389b83725e26c006cc8240e380e3eb554dbf2133a131743539b1d174cca6b135c59f81d499631bda4cf90ded836e8c24c074a0bcd83271309ffef320791c9030fc2b1f53fd2de870e54eba20ce9930c279b48b39cb481737f012f65933650374ba39e2222191b0e3c7db9632ce9cb077322cef97ed832ddd8aaee53c52c03d2aaf8eb5597d8d6467a406bf428e2f16462e0c0d486a1c1c7348cbbf92633ec4ffa75945025a3c92095317e32290d4cbaa6ca40f3f201975f3fc8b733d1467c094e075e8415352e3ae51a6c5169a4aa430bcd66ff39b184f5b7174042dfcc6840eef60ccdcac12d012ae4f24f7184a038d8d9964ab405366740600b98cfe2e4737c8d846fd4e9b22b5047110d85b37bdb9e7e3baf5298bbdc1050aa20f14e34dec283830f5fa9c570c22ca659c1276be8ffbc0ac3551db8488855ae7ec21e239e88a0f68227d17dd87ffa3b3d0535f9e57807755de56a65c0de9f4a79f8746b20908bf9416a86f62ee2c2545bca2d55cd4d45dcdf06dc879e1b6270a80778d0274aa658395d800eaef367df4f4d838eee0a66093e0f419b9edc5f003e31cf0eb7e1cee9accda7a2dfc920a4b5222389dbf12ad17392850c434a9b3c260159b0f52e78e7a66d28dd5b3c77662cfed2cb3dd5bc3cc26a34293ebf1fb3a9bc59bb0c104c5a9387f3893a65d145d424ce741a375f9c65e733a024e78fe274b29ff4b0eb6f21fafc31453eaf7e48fabec5711d3898b876f59952c73123281a8e85148cef5a166bf45df36053d57ae6f29d3e334bb2395fa236d4daa8a4fdf99d80a9bcdbed36154bf4fa3d463d51974032d7b88b2504317e14165b1c3fe3d8fe366fc8284321d80f9cf512f418c63f73b7c29c07870332387bbd1a870ac39485f64086006cfd68c8299347615a423736c01faef2da56cfb6fc966948649324e22d4551b9f50654ee505547f7d0b8481adf6aac3977f49d7e6ae5c4248df7b43bda7f082aacfcdcf1c1bc04f2d45f5e028498ecbca47ec4d1ddeb03a2ab27be9e4b80585145676f8ae7a5017bc5efa317a576ed6e423d5a0495b8dc619712a2c3e6162b04b9bbc7de4be6532f6c1c019e702c014c60189a2612594bcb18317804c630264d07b7396db562777bc305b885e00706ff6d0208737bd229bc7aeeff5fb770a4c057b347601f1f6c16f60d4a53a0b32631ad2d41fa307f6630228e1807d22475d5e331a50a680896dc606f3941ac08f8ba46de5a49f5ed6a94965334fdfd69c4a6c7973d9615b3fe576b15aacb9b98d9e498d2a3a89b4f8eee715ed5f29f13dde7629bb386f7cc800f16f3b5ba8bd0e14cd8d9bb0f0aa615be9d7557f6efd00f7bbef9989e7f463279408e6ad77e100ae4457d57424f2b1caef43052c5b25c896baa1c2fe67d1d6f669311f17d39460f0b176a7727f53257a36faacbf3dfe623d8f882f8ee41ba1ce387e1d1860f4babe26ed678395b9979d84dea5c7b38905d4c7fd867ed7722d066bff3a833d3282bb40d1cd310dc8dac9270a49b65b5181eb30f166caf0832a8dc56b9d135550b506d98d036be7876836aae669507990de6d03e78a38139cf64f65fb410f192e30b045c93fe259c10e0c5b56a2b5f0605da0851104c4beeb4e3b30135cae5a6c68403c63121b0993832834a3b5ebdd345c41b26dd219560b624024b8b945a10d385b3ce4e0bd54e10a64aca59d283302028a9592120d142cceb1cc30e1f96ad041f1e17bcdc3c68c2ea2e0d65d6ba3696166cb365cc461abc4d67d504e8290eb452ecb77f6d5faa5053d01317646242384c5c510bd43c5780bbd01ebc3af33d29d8a09ef39ac85e70398d2a64dffa72b3efd8d6d57aa2f9dac0cc6eeab27b69fdf2403a5fede0bfaf441619be03fde44c49ff0a34e9c37d2b9aeb726d56eb646a67bf349323f397db056d71de72a2597d780942554c8f8273e307dba6bd02e944e0559509e1f28b511bd709d03ea2451ef234df6f077e06aa01e2806d5bdf89df29f1b3d8c6d8014496ad83857f7465f1072e88709d0194733e1fc8c9f092df5b9802fd2ddda8b142217b9532d8604e2f32d06f6400025930da2be9b25529788e6bf4eb7f84c272df455ce2ada291cfdb5fe815129e4aed59625c879e99b3e3c1b6c5d7\",\n        \"signing_randomness\": \"dc1a7dcf4839e6c61d47317c03270ae81ce3f2bd63957688ff37326bb587f8ca\",\n        \"sha3_256_hash_of_signature\": \"58392d277da131df7b74ab3f7168afb72a2f439923a3656816674b5644f7aca0\"\n    },\n    {\n        \"key_generation_seed\": \"8e4334b2589d0caecf0fd9ba584ea26a4123d4543a8a0fe126d4a7e07f6067af\",\n        \"sha3_256_hash_of_verification_key\": \"d1eadf01b6b36afc5979054617010e19e2294fee5e94adada2d0ebf9f90ace75\",\n        \"sha3_256_hash_of_signing_key\": \"735cc24ea29af59db90039c2faf9a63268f2499a5b47a205eb293a6440a1b444\",\n        \"message\": \"525e8b98c55864849ffc71ebc953f7a0eca6298f6aa15a83bf6923bd5921b1c86dbbfc544a39c364ef6d9281481e946c994f96829d6639727a5345560d8641e9a510f913f7fe5592c2a40cb278f5afd8d4504b5387c20945654f08168247a98f56a43a5020955f882d2d93781f4a83676b08f50341e953a5d1b67de7f6d1be3d78d5d060aa85b5ee4271763c437ccd595890dbc8fcfaf2754ae9349ba2fdf89847a15188716c0ec672887a4b9a15176ae0c5138819ca232d012be1dcffd29f677442083087c127cbd80b0d9cc0962bc8318e734910d1e2653bbf700c84bb0919e12df331ccdc7128b41f0666f6419afbadaf673be16c9177d3cf113c6488504de088149bfb83eacbbc400309b7ad753f7b2f5aa89f070c9d14c084c32df91c5f7cb6a7d869d64f4a05af80a98be7517ed784c17b0d7df96b9987b7ea7a398ce018ae6e13e1c0f7aa040ac3ffd273bb9687ad6fefdb211061a6228967e9dfef69bcc1c5d02ee56d49a93c8aad46d08322a2ca246ae8c3edc071d063ad605a97b8ae94d58e897a4a6310bcbf55b0cae1aa81769d30b46f883eaf29d4b5fea32f2dbde49360cb6235754bdc305abb5e5395360097378656e2bace675448889b0149d6086c51e9c3af07a76563164864f131cf9c0cd475cd4a58726ad237cfb76aca68032351fb24711da635871386b4bfc94b0db6d35f07d0196f75cedb92efbe7d653e0ff9326a596f9166ff6cab73125dad27f361d6122ca531d86910187e75f849edb52db26c96fdf05925dcca232480d3f979eab07cca68fc9069965d12bb666a180989ad1fbee3fe65e746c5a8f64dab2e370f0487d001121edd0d0d760531af46da65c75de11688ebf31dd2ac95c188bcfa07ea798609f3ea8e6364a43742a2825144fafc05abd17476480812eb2483734b13d075b3ee3ad510b67cf7057014351b2ce5357e3f12f43ba74ced614be3a9ac0e26763e9ac596f87ae98f72abe0de213a81a9a03e2b82f2312c1a186dfcfc3db346feb132931c793ecf837f57d8e326101f59705b77a3083e712ce347c2c29c23468b0c5857efa410197833987c61ecbc2a855ef78b3d7b1b697ab9844aad07c4b8ef666bd80daba5fcac900c5d358a11676ffc89dff4f36f29f14d9f9b854dced41ffc4b36381449d22801c19bf8e8ba1f07a1b38ffb527a34d009c4064a1e606ff2ab90ab2e05c156150ec14d7dc792578a16f46650d0abb61175d1817e2c38f109ebc01a3abb358673561691185da32eeef566c1ba1c72c1f08cd1b427b552425501b8783116f2eb0cff73c5d2def18d291c106980135821a77428fab20a935ac8b6dd8edd1a936225344eb103de0d5879cca09359b5b882291c0fb1fccf167c30dbecfc324ac315713cd10f35b72f0d4871a7cbaa2b4cc2bc2598f23da607c94a063c9e2013b0eda5f3bd5aadb2c429177a4bfd7b6181ed5f9a55c1f043da8155c9e7bebda7ea07dea49938fe07743df2295c220eb53348310842b1000b7a02ac025c3a94fa82d46ed7e2712de71b149742731ebe62e225d21a7f29d5f3a8a62b71fe16258570da412c07cecf82b2064ab5d98761c69fc5e899a8e174875b3179deaa0bf4a0261da9bf39148440dcbeb0c887e41fdf751505de79aa1f8593f45482b659f5b5f4cc3e7bfee59def49458db195a1a692b8af4aa44ccfb00b753ac761181b8aab39db82385ae776cfc585f7873613b62de55bb10a6b2f27e631ce41436c3fe390163e6f4ebd6b501519c96c06fadcac8f75920fe1435542fdf535ead6c0e3f41345996063b95a208defb6f110cc861580979bf4422ed395ca218cfc3b22c0ba8b31cb9eeeb51c3df35fece92795cafb8440f522b44e21b3a18d5cdbc296b887a4b927f36715e4ac2cab043d8b69a8704d6be24c725b0c2e814bca7b040c27fe8f4c14911051039af13f44e0485eb767f5404cfb6fd19da24d82fe24b53033c83dd8634e2e28aa330a81f14bac1c57dead7ffe39994d9d094383e14322e146a3df27a776e2f09a11ec9014c809f8e543594d6b4814918a129b36fd25015a044e04d3f081d4d201df86a0fcafbbfc695088170b8246776b6a28e59449c646d1e706cea96b12683cd3a7c60459d42989ca46694b0089cf88e9aec5e110f69fe0e3fe20d18309d1ba72a83a34813b771484505b08548fe5d376aaa0c414260ea4bce5eb81f6545cd5203026264938905be1e252574f4b4e71c6e12f99f6efd35effd64183cd0665fe89d6a357b1908e083511dce2cdf792a608044c31418c433f86719e156af3ff98d0f54ebeb9f9fbf24588a5557d310ef9d7cf5dd8a68512d8cb15114773c69d7b40c927858afc049f7c6a89841020e1c313c5c38b988ef505ebe6c15fc1d6ccd8b472f90ed64da895d06ac01bb99f455a195a670d22dbd5e3f03ac84a08831e9842a566e9785a0fd4c460c5cac154d705dce1e7fd1c45baeb23976af881cf5628f3cd92ab19bae8d45a03a859518e4a1e558fac2b48a432e46cf274e6496b63874ca4e4571132568aa43eec3d2a3948f40d327976a6d28cd816cfbeaf8fe126913384061d219f51179f679081503371ea0b6bd7e9524b0ece2573304ecb4a16eb471ca0817c0c6ede751f283aceec5a60c2796c6261ffc6226e4813241619f465dce67b38e1d5a647b079503144907307c7d6eb6e6ec1936b5c94fcc08a882b4555b19b33a9bf22384db38473a313966d157daf8aad41ef67d3a5fe723559096ab1768ff69773eb9d5c88d6f35f00dfa4473df71c7e9e35393638ded05d05c105cbf37711d38e3eee35e8cc0029b3761241fd1e56969e09e949690d4fe25735d774e777a2ca17fe058e14ae6806f611fb1e9fcd516e20499a704b67990716703a4287b50ab45d155d40edc0aaf97f5b87551c236cebe9cadd562b27957ead251f79caac6433f228b50167fb1a753306fff08b53a8a3cecc226857a321700ebe23ab4d6c35415ca79b682d6cfef6b1341e7ce00cb9870f432b63a2d9a9a43c87d28a95c514582812da37738bda6cc76142e08f69ebaa5acd0403100c2343e2fa088441e9a55c720bb509bc3600c27c1d39157e049650d1749751efe55a72349e2a5b714556ce2188ce972287be2152c7e58d3fcad43a214a4095de55cae9f627d8b9018daa01547842fa1ad14d67327cd47eb9b90cd94afdf5244de57e527f17894a410fb4210e06632e88a398400b0aa48cb3feb9a90acc668615d193d5a98158092fbb59ad2d6d4ffee433a2a6a971a228685ae5bbafb3ab28242c630af4656c5071c545618a0a765fce41b19970c2152d44c349d0cdfb29673d1a42ffec139d1c9958b0962f7b57f80cb8fe6331553b0df93da9bfc722b1c001f48ff9c0fef032610a1118ac9ebaf9202dffea605272a50a90768f031c72d570c0aa5b0d4fee4ad568895274388104c0bf88d03fadc3159d6cf28ac6a7e3e5cf6fe5c6658128cbf81456db8c29a76f9c75230f3837f1a94cb83c3aaabdf4b29c9045b45ab9552bbb6c0844bf2926267c0d74d3337249d5c9610e0f6ffd0278f12f39c48650c048d61a3fdb8e1a2e08ccca68803a55b39bd39160b0420cbeac7d8a55f571f490f694a7aa8b725ba84238ee1e711864aa1f74aff252c088e36b79b09c80278dd442eaea8c7d5833cd1baa18bdd866689e663eadd0eaa6e0c78a3e09dffe5f6f1f4003de24336586b25dc5ee45d56f31d8bb2de31b24e87172f3f1b26d400b08d50ff624e456183f269cbf06b3707260383174fda152e4d0c528a90c54114c4f278d0fb35b74dd3ecda14ee89d38e3227a7e18b068f134b22154348867a61719c926ea3320d1be0b9ed78466b2ded728ca04c15ac144185fb2f5084511a38cfd765659351ac1ac3e5f327d9f3de9b2b003758da78dfd08faef3625cedd87c8a55a3cd0257aa71b3788fd2449efd1f48948cb304468e3ca07ea7044fa185a2b91f9761c6532b9273db74c66b2de95ab19e5102cb90c719ec85671e2829b182bb6d09323248d6584f0ca67d422bcda65a0146d8df27ab4ae651706d5fa33b5bb88adc2a1a95105d55cca8439a5060d110760dee8b855d0839053be595278eae66542736d25c93d8544c6e55ed51ad6e7029c2e6d32cfa8844bc14972809e31754af84bb479c504ee77cb65ceddb6bda613feaa2ae6598d1f4975d0fcf9d9dc787eeb5c03f8b0bf438e83c38e2195ef1d35d40f5a14e194bc1bcc64d02ca722e7da28334e91fb6654d708c5b07946cdf58747086eb3ca59d095eb27f1b7e6806d3a35335b2265031a1120f28eed8b4c5d9af268502727c5d23152149c98e6970d4dcc4b9d0fecfa6a79fef82cb233e71fc8aa999df66ebf5a1db2ed1583c65803fa8958f49890d13bc05c6a991f26c31766bdef9bac601a47c8c3c5e395fd8f47e56f04439e9bc8e9b1901a529395f2d57495d70d0712881d298a60e3e013326cd56bf9f1319ea8d6a6511eeff373f081478a51e14f0aa4a33c6c5ea7816380c8984f7a5da45b0c4b6b550644e65a5b2df059ed050936fe6f073b4e8056accd3eb65a0b\",\n        \"signing_randomness\": \"6d3fd5876ed3c172ccb3c100d4b71d5a33bb4472e4cd328e7edebfb6dbb74d38\",\n        \"sha3_256_hash_of_signature\": \"a2d353c60f0fe12509b8e5a6ba0d9518d51ee0c44b64404cbcfc75740644e6b1\"\n    },\n    {\n        \"key_generation_seed\": \"37519a02e8021f2257259c0d2e499af3533c8ed8dd5bf7751cce920d79b518fa\",\n        \"sha3_256_hash_of_verification_key\": \"22f94ec3c99465a8faed30dc8af53d05d11a2e459b2c224d9921365b4d09b8a9\",\n        \"sha3_256_hash_of_signing_key\": \"eccde96310b87a59a9726facad7f1c593a3c9a25791cb6508a36eeee14eb8135\",\n        \"message\": \"00769683fe7bfd74b3acd21af3898b74ca73dd126c8315538937cac4ef0ad4588765a26dcce1c90c559ce691e7eb3e0a497d357e1ab583c761439c0a66d1164518f01b6894067925753cc2866a91552fcd0ef029c2284c620caf364de6c56eb41ee0e4431d9be22b76451d132a3f9ad91a53449be820a7acf56f6adbc7107c7c729ec8a64fff6a24b4cf83ff4e945def336dbfea6067fccbd1cd6b5698adb1ad6df03fd0a553457b8e9feb4a1243feefc2df7f66ae3eca5bf169f7891adaea8d5c59012c7aa00a5a86b0a33d0006f8ad5a01c60abbda6d249d3fac7ebfb85103a3a747a45d0adb7def52ed3a5f1a620ee383a9c0cce1900e413fc74a7a97646111d54783928b15bca783d01efc67f49ce6f781e82d25d3f30561f507e3831cb4ea5b4a08d5489830017270b63d8298beebf48eb56bda5685d5e1e06404eb9a6c3790e9b29c99168b10badf8fdb03f3c568672773eec96428149ca272ea5a8083f8208bdce361e7d40bc4da75029d4a18b0b6ad615dbf849935d4755cffd270a52fa290811cd55bdca38ed89f0066adb9ba7f58366379ffe1caf3a9127e147c3af3dc27279391e0c09537e81e20e7b9fe4fe3da970fe50bfc96555233cc9e61d3c356aaa8eed5a8aea2327d7036ee03e7ee40aa35e9da4544b121514c261ec1cb0b2d75b1d5ce129e47f89825f69ba8254163179fc1331a917ae9c5a18556a10c5f983871b1258cb6fc8ad207f97a220c5598860b6c56f1eff09de6000241e901a89e107feec15833d34d6eb12db6b188faa0b858a5b9e32f84f783b43b6f8a3b2e4b044cff8902e1eb0c527bb4e29c92acc9dc7e0d9ac6b3a021415768b21dd9695983ee89c871c0eade0bce4fb72e682dfb5a2bb7498bf4d2c01240f67d1b62baa4e587069c16e3032114b14a1c4288febaebb4c75c3c05924a358c4bb7df95ecf81d67147fae3f605ede61b7ba164eba1ab36ece97db0ecb32a673e899b24557d8987af3adc57a9da609914c9b2d6d8ac58e5954e0db5aa9e75b444700b8f704e15a6a7bba81809fa8801c6ceb5747a44ceb8f99cfe6d8a2a03c03451e5f3d392725207f3dd28b2c00004425b7ae05fa3769183ab60857b27ab08bcc4321d293c93d1d850d4e7a81b14564d7b15ac0e3bc1bfe0561622c6aa06923eefe163629ede8ba1732dbfcad52d3baa6e11e569ea790b36a8472b2ca37bd5c0edd37d8f164b874952d00d592fb705c6b3110a12b03829c157191d33c579593e7828cda5c24a284ba2f5a42f0bfa601a8f6d3db1ca6d703ecbd261629c9f96ebc0458737b9951219e5b1f86192e2a85b47d80610a0acc8b1a70db2916f89cdb2c7f8943471ddbabd2a3536c5dc8a73cdeddeaaedc86fa148d2ee479f8465558852fcbea0dd8017f1b976281a5014319c2c3caccbf571d9550215b24134f6daef32716802e7945cb3f97afc1ab1da17d0c41b545a750ef345a6f88ad5ff52d512afa6558335b5eb8979d8e6dc1da562bb997e7d152d9fa3eaa09119c3474e11218230d8a56c19ad87fde483fbd6ddde9acba813bebc8505a323c601e5b5251650dae9334562e3dcc38a28bd7ded6942d0cc2014235c1b66cf4a57ba3010b83cc7050309f57a27207512d195d070db3d10ffcbacdb47e4231142bae588f92c5b0a71abd67ca9390c2e05fd2cf7a1fabb14c5a7ae3773c66db1f055214479e388b5e6abf0df8fd1b0e4f90828acc397643cbc274143fb4331262a20634877be4c7489c1ae9eaf90bb2a177a6b5ac15cbda27da0616e5f87461554f5686a7bd6d047ad0b98c8cdea3db78dd2970c78fb861f2a92ddc277876791c4a30f525659557831f4377065d19acb384cc68340152a6de6d84cdb58f433923d1fb8cc6b10bacd95b9ab1b45563998620d192032269fa8301c09a29c4b5b20ca0a3d63a4f5984b7db0f5b17417dc7b939b9b177bf423e2f3d57dff296e6e4ff0fb1744b13731206ead54ef0aa1da09bea8b0ac0ef71b73d009d30531de9fde90d86bf5f20d8e5a9e324e657a98f8c0031adac4385157ba4e28b48aed957a5b36c3b49057f8eca7f56808f794014dad170601070607010e004f42d01cc63b2a1761126ba045f1165e25fdd05901fac6b76e777faaaee6f5ed94302e2da28046b4bc60228e1b9e194f364e377f84681b3011583554b76fbf8d7456dbdea665adad6aa0556c8cc714f217a518a98615c4c1cfc8adbbd4d12c5bc23ad7a0f849e32fe2005334b55d7bcb43d1c95d4793e7c3882740cde8dd24b367294496a3e2f3251a66cdaece9e0a73d853f8d4e3a4637836ded68cb28ba4fcab02d61fb5cfa581792e636217f3238d78912ea0863816ffb2f388823174b19433c2b14bab69e12c3b791fe683744d4519455a52555af0d7e12749f6094afdba00fc6a609c7578c531fc4c3c3065ebf78414f112014726ec2230f9bcd9c15e36283144ccbe0d1785b65cf49ba8fefe92eb6907c0330bc98ac172ea9e8dd4df8974dd6b6772bbc6ca8e8562c5ec0b6592de7440ac915c35e0ac8087f22eba110ca3037b469b1d5bc92636d81881e38d8bbed01a29b3ebcf0c19eb95bf999eb848022592aeaab649ce19824ed9d3a32d75fba556ee07606a306d1fcec2e24b38274c361b7bc96ce37b7f4fe434eba17ac2a097051a92e4ec32e4c678f7762e8b96ebfd2600c0f224b04b2cd7e9f4ad327d53603828015e9cf45969800f02fa5e0ba26b8c844ba1fdffde44303ad0389c1b31d582877ca6bfad4973ba35fbb90ecdd95f430078bc39aa89434130a5fb8321e51f9624090d0277a9f112ee8ff65d3dba999c7c08727d0f08dcf00ce22f62c955d6a822f247c8065ab94ac442e1cb5f31254816794cc2556891a523b8aef09d3b9e07aa8b67b3b87567adebdbdfb93ba9a082f72052572c97e73af16cfc42d2a51a3683f84748a338aab56264753ba4083d356a27c71f47221ed8340c50afd46cd207c4f9634ab5a44888a4234770c46232c35eff83fa950b0a6879137dce209d5a1f26809b411f046f51ff084f15bfe03292ee845d3044235adbc299925235462e67f803daa1426f0e116b93f4532dd2784f7f87ae360281ce21f70d230c242e1a98de8fe1d6147ad71edec89e24a5980c45fd91e23516758af71df8e0dd96929d4da61a3baeabb96c9378986deb4c9101175e3af1e102b52a8da27d916ee4a28263ca485cfe87ee5436249c1a2f933669f6e3274e9bd93092f4a798ae85d6592ebb54dc65c28ba08582e275972b0a12c22a7792ccfd4a398e504c6fb2cf5ef1f9c268540b4fd7d07d59c49a559d86a56a009c4c18a3fceca109fc7a45c6e842abc22053e84878c4805d96ac96ba00fa40fc3b50407141105845055447ca94bd27f234183c2b8bf37f5cd249ed0705afaeae59c8be8f6b38069d67fb23f74284e8185c176b58b482900a3e09774383c7ecacf4fe5e580df99db102ad4018db73c73a635d3fcdc833b000c948d846aacc92ed54ffb3acae1bfe205d6b2312658f15decfa085d13bc3757c754c5704d8089563e0ccf52b04a49df293cafbbc2fed5d9551b5a3897ec7beaa56a4034bedceb4840a9bdfbb8bf47d66dd3a4e3eb1666372c6b2c39a48d52761bd36403cb130a087685e2eabb8711c11005ea09f90ac49665415c56cab6fd2719c45b6800df914f8ff327eed29d9b9a5bbd6b80b8bb31ad1522803b2c8d89166d5c6b2ed47bc5bbbc4abe6709d46b856ab81ddf15f098a9ab76a8257e7e5c2e7dae53fbd691736f0d6bafe0bb939172614e99c7d7e37754af6c3c637d076a43dbd70e5eae910c8170cecff1621e382d2977635b67f4fac555419f8a0bb76ccaeaef4c7385d293c9595ae10e5201c4a31b4c3ecb9f3b304efb1886f9c58a4ef04e73341b95d9bdb85d706b2a8d3fdd153743a8bb7b3289d0fe79f6a3b9e0fe160dd6700fd64fc87d9ac96858a6d395fef6f3d2193ebae7c3a92e18746a7f12b244fbc5b1df0086cc7045036519d9d7bf8e92b850ea0d3d1e775dea362362462dea2d3501d39203e2879070d1f7ac92fa1576f6d12886d5b979e3c788c09a769ef4ee45e14cd8e7553ebeefcd31ff3d43d4988db08f6630ba8ae8c7250ac42a3d78edb967d59310a4a224567d8797c42370cbd2302a3f49abeaf85fad9455f98b61ef2b5e34a5c552583872145e191bbffcaa526f5e38e497a1a1e1220a0f283a935ecd366a9069d5a2a80baba3a22fa85a2557db72d7e29eb4e33e8ed8bb4ec2ec7c2e9cedef46ea955834acf8c9ab23b78052446fd73c9d61683d7fa0088db97d07cc350af0b6b2ad7e66a493af814c11f8c0f2fdf0df40aafd0d218c00319c367e98d7f10c74ea06d31276f3f216e1cb2f12033915008cc83b00ac60fc9c2fb7f97d6e8cd79650d0f9d82bfd9cafef668021d3d165f3fe84221998bc8c29aea0b5b7e0f1f25a0d7447e806cc3fc39e6038be3df9ac01f46222d3a609f8a026744ab4f58a734e3782bec301ea91f2d8e2242d04a11e82474002143223f29656b1a7675aa5ad181004c4f1381df6a0f95a0186e82c04b4de881209e9ccca3ee5b1def0b02353738d92a07314403a1a2721c256121fba8b8ce9b460\",\n        \"signing_randomness\": \"5416d79e273c74904760e9c74983293e4075dcb9800e2fbcede78813c5c72c1a\",\n        \"sha3_256_hash_of_signature\": \"65633a2adb47f2d87fb1b51bf1695da9043648cf22c60a14d0e445843524c9a1\"\n    },\n    {\n        \"key_generation_seed\": \"690482bff6c1d0ba6c071dd395adf69e55e1bfc4e0992a8650ffb5e60a02b172\",\n        \"sha3_256_hash_of_verification_key\": \"9335f522b809c922e5ef7e33999be5ea4ec39c6574fdccc40f23f6979bd94071\",\n        \"sha3_256_hash_of_signing_key\": \"5258e931a334c4c302581f1ace510706fce9f3d0885e93a4b3ee282368fa864b\",\n        \"message\": \"d21a6bb3a2356805e678673c45fb055fc5266e3f692af9935aea307f14a5c41b979966a5dfe42ebfed1487e4822b74ab5af28995e085ec8007eca4977c63ee5299fec63dccbc42eeacab488e574249e9d856146750ad97c8a443485ec1c5820beb0964640010f6407140791e74684dbb91052e2d8bef7bdcd78b2ec03c97a53295d683bdbe32a70dc19a2f75b8613aea9616ae0e280179492820f73fb7fa4121e673fb5c328f41b67ff8ffa7aee6564adaba046d6e1d6aa13fb24965390f829246dfa8763851405075f76cf94c66ffc3308214df0960c649aaedc22926ce9357d3875f8b71d68d75999aa3663c30a9edf07228bf7dff49ec1e6c7a33d2053597003b82392e826ebd701b4c981aaac9951c79e08f592c2c0637c8e5a7f9dcda599e859c317d4888b4098992e0e2d979e41c703686d577e5ba6001ec4f587140711293d664963632f87ea0461e0e0c5e9d8d292fb409f9f9ab172ee17fc8afabad06e42b437ce22924eb5dbd3a80a06962f3b37946259f9c75a233cb2b4abdc5cd1b648faeb1be8630db40d151b8fba693df2c5bdcaa14dc4783f450b6bc407515ceebc5c9a47bd1a141384f0b596cab1135c075651cba989c190f3171dc1d72330edaa01656813c4b7811715060b023fc426745c301b2a91e0d08ed3bded438c4ce6799c35f3981c882a0bde4a2feeb1a52cafa47b0c48558fc43f98fe08f03a71128362bb6fb9da6a22249f4d4352ae7d3dae85de497e2411eadcfe5bf1a3c075c45811e0097ecea255fe15bd8321fe8b546a8cacfb899eecf5419db363c7567c2fe7360b36de14674f500a31d3eec71451a7c0d5576a8939c0f6d4d9f2f03f3c516ce25ce73abb35c73aa94f6aefae6ad87052d6b195fa43586817f5bb974aae7f1b8608922411aa5b0d7d574016cbd3ded13395623470a108fa0e1d3f9faa7e1e5031843f2a23dbce8b196315290dea5795e4115d53dc570a444064cfa3c9457dbf3ee323b1966ecd2270c32910f8f430522471258a1f1955a6e1dd8c84ed9a566499bf85628615351abe84b401421da2cfaf575e2644c9304c075ecfc374066cec713fa4c0d89043689fbc59ff54b8f97ee0a3b0989bc5e4ef83cc9833e75bc8b67bb5ee3c06ea156611cda95a6702416807530ea206ed89835d20805ea988b1958569cdf7f809996214dadab4e20bd44917e3410ec6beac98fea07f764e85b66aed5e17cf675d2ed8e63db728fe75158cb31779e31379648b43d68ccff3780854cf03535c57122019456e73cf06769bf1fbf558542241ce665bd10f921828553585e0cf664cdc6160f9c47fa5330591b74194f4716056ca83993efec4a52db9a1fbd3b2f504ac19667325167407375b6d7de739f07947b511c8d475744e5c29d6e286a37f1ff8317bd0178f0e306a38fa6e75f4a80427feb2c91235d3e7f20d8101cfc03bb73f44ef59af3526e9afc580027a1dade37654238b8ec7af0105248fe30784a88b72e11fc1bd807e47a349bd29075befbb29730ef8e85e3abd5105559bacee74aa27d90d360a8d629dbec95eb34c7f7ca20096ff7b521e40d3944a975436896f372eeab6b8615eb91697965bbf955779dd3047f7e3bf029e3509a5780247445d6223d085afb4291d976efadc41e42dc2c0728d18f6155654a332fec72eb6aef8b92c1d177e3dc28c31971bcaff76ddebfd9588bc244b116d409e58dc5ada1648663d603c47faeb814aaa7eb9b6264356f926c18b9357bf426b89ddc8eb9177eceb5c6cdc64dd8feb7b326bc1ba89bd9035235da0e644ef959c58dd97b88d5c749b36931ac2694c67151db0894652e99254222d37cefe9e27b3dd663a152dbe29a3639afe42f4578937076180563aad6ad739255ea012a17d2a56627d84c44fbab261d392a966cfe19278799cf1634d42384323c496190d4b9fb662694e3887ea66ab9e8b195488c8dca47c8bc0424247759137cfbf86dedc3641904cb6facbb30a9fa84acf69a67b4afdf4c2aa420fc0d90cefa0dfbbcd3072d9f772fd6058e2bf0e251be93b00dc43765b53db51b22f12d3ed0cc5655e4aebd9d923f99a43e4461dcf5992030e66a1cdc3a65558d9bb3a39788d92328387d144850dd3706fd7a079e3d2398f542f91a8aaabf0c5068dbaf1fcc5160398abecf74884beb04f3a3ea38bbb80d798f5981b3f2db6c7b33f867b7dc06a4417e30f94cdb4f523aeea0be12bd75aaed57520db0d4b4f013be3a1dc7ae5c58fd1de9637f7d82f697b7e92da427a78feec6a5c0255eb57a43dea6cebc8805bc04e04fe789e222b1e2642d26edc14fb36ecc6092b3060e45eed6c5b35de8741f72933930ecbd7338cf39474122357365700cb50c5eb176fb92814fa7f4032570ccee6b859236ad5da5f1730129edc7be218ba9874620f6f0ebc45e0bd622f8fd1ae6974994af95c6519ec1c46650c073d194fa6ebc62f405f63a3416782a47872c7d77d648d0a1c802ffdfde5fdc112c94cfc68f401889efc522fe488fdb5384c0d93147ab6587659d936f98ecfbcdcfbf8b352d605f18c855e2559743ed97991c5d50df44a7b929303835654a3955abc5bee6327400a7ccce460b318d8b5ece5b12f606adb3d7b5ed59563b8e675e78029aabc234442c2463256fe02b04f556da35c4615d14a9f4eff17db0db81de4bdd894f6628a120be2d4cf3e1f46d53817899657035a76137e23c0b0e8ddd29465d7f15628fd435e6caaca4194fdbf85fdcc31d5dafcb52568b7c0cfbe713bc85fa424ba3abe149e4035fc86807a8b876d2163b447cad5ec0e6ef38a1d591afb46267f9dbf142cab1cac1f73beba212992fc6d4647ec17848d1adbb1901277a5078dd72d9c9184e893c0806e9b4aff0a824670d438620f2a7e8d2965b619d291e5824c014fc888a36fbbe17356431f0039038f9b497902aed969f9c488390b7087763638e976801127baf1f53803c4dc9649f0ee85d67b239e2bdafb2bd75f1d1da22a56fb3af10a9dde7ad306c4af8681029316c0e1949228e6bf5adf942f1c0ef92b2bcbc0c70d49e5808851444240a78b14d21b54f66271482f49b85f5180b268050327368496cfa8b54ecb97ee6d28eb74a3742f68583da046809002c22f7b31fbc0566969f9a15cdca892c4beb101a2ac3526c76e9d30982c9b4893450fdec4001d2431828d24d8b1a67df80e2e10ed2ea8d723227055c48006665f7da8e032efdc70bc7eeb2b369b551fac542ad6df1a23107e2b3c0e3ccacc25f26404c085cbf56e52d35d7948db9fda6dfc24709994719d8ced41a2cc9b3c4b2bef0967cb71861cf0e6aea9bec9395726aa0e2f1a7247ed0f6038e3df4bf566786073590dcf97f8f0a99658d8f630a2d130c46cf4d26c669360d0f70b75f904c9f923ab285d5db129f6c25ad21f9e26ac844d07a8eed86c4e224ebfc5b3f720d6f94b0a01b1433c46b40cf84e80f7a6afa7bb8f9acf818ad3cab2ddd6904c067bea4f1fe79b83cb0aa8fc75b6b096bad6fe94abfd48f8efc0f2b9a02ebda8fdbdbe1c77f1854edba18aae7f31ced9cd34c1b355108df18a8953932f7554af05b203a96a9bb93e0eff51d7f93b56e351562cf85a2d35eae2c2427b89a8662a1c723d4f14e6eafdbd636c2bb7ade29c1a6bc8a463734c808bec68b1e9a31af6e29b412f1cb8c90a9911ac5c3ea71e46113d2d7b1ae2d8802b06a770fd0e9e4652895e42181ad09bb541e9493f258711bb7bedd3e7ca8b8ce875669cf80a6880eca3f13800de7011ea67f443e505c4fb455608ae586f922b3c83fd33b306bdedb86223c33e3aa65edc93cbcf3a03adaf9f328997951d59a9200c0ba2618e3596af176b43122cedc52b1e006ea6d12dc236a6fcd7cc46825f2ef7ed71683a731d746fff2fe54e0b392a8cbfa38873196bb2b835dca7cb7c3ed9a004c7a329b9734a111744bdacdb669e69e9df1e52f07c513e3752a0ccd81d7ddc4a64868b7bb2bbbd2095373480522be10615248a179dcb61dac90f7fa5fa9b84f190a9c62b5ff9cd473a940f03e7107157d7eb60af1e3e384ffe8a67dcb2389b3b0fab7c789cf100ca95cd6a85442cb9a2c243fb9d454b20bae5762d72b8fe79b4df81163d61de4578cf976992d8b9989fc68089f811f53db1e1092b60220552876b818bea981571898cd6ab7b5f13c46b0a076526e3241d65014f855efd7bde08ad91f259dcb64e94ec3dad97811eb024ee1d341521dc92ae5e93c73422088976f2d27d64e1d193b955e6736ad2bccf3c1a53d590576434acbc0b687f27f255fef354e68aca47160efa7126f908e08e4548c11546d9c412d685fa84d2eb4dcb2bdfc48e2fa8023548198ebb072a48044f4391143e3bef4ff9066a4b0d03adc826819d67588ba84f99da27424103652acc039ddd3b567851cd78e4117a8b93afe01fc8eebdaa1acb8ba9d095789e76b9d5ab9ee177a15d666ef171fe1d4bdccfe2e58ce669b561f63028c6ce26db5c8182fe048680b175c7ab407215ff3a7801c950d509867ab1b0bef89b3e38a387915225ede76f91aad15a85d8c46efd588bb3baacbc52c036211512473420f3f061f5f53e9353de0780425745a76439b3811511c86ca503251f24113384e1a24a9367536e796ce08b896f572489a2339e82a856c\",\n        \"signing_randomness\": \"544516c0b4d99ab3a7305c9c23bfe846782508ffb748e223fd93d7ca84e88507\",\n        \"sha3_256_hash_of_signature\": \"e9ea8c37780d1cfd3d3d3367fcc38bab393b8954e40d83fde33e120881e795ff\"\n    }\n]"
  },
  {
    "path": "test/libcrux-ml-dsa/tests/nistkats_pre_hashed-65.json",
    "content": "[\n    {\n        \"key_generation_seed\": \"016b25101cf2704b9d218b7c8b4728d677359f73d69c08981dfa6a658776585e\",\n        \"sha3_256_hash_of_verification_key\": \"a69cb92c75e86b541d942c46cebf7e02410e8e7f40128adadf98a4b074eb406a\",\n        \"sha3_256_hash_of_signing_key\": \"44e0feaddb2b150bcf2796ad11005437d9d35d65dae71738ecc119c10ff50e9b\",\n        \"message\": \"242f356ef93ac94b779c9074c344504ec3d155ed0b8cc81ce10a6d1b19f8308aa6\",\n        \"signing_randomness\": \"0ddb7cf189e9d15ce326c6e1a38a9626f114d18808dd0068fe9b1c17ab04efc8\",\n        \"sha3_256_hash_of_signature\": \"38d64700105681f106eb4c20c7731433dca1a48108ff99b727cd405e7e4034c7\"\n    },\n    {\n        \"key_generation_seed\": \"259681afb9dc6d860388bee75d3de0f4bad8ff7611e1b3d7791fb881cf7872fa\",\n        \"sha3_256_hash_of_verification_key\": \"7c2329e8d97e9f1c11c792dd1a4c8f1524f9e398070e7e5e0b8e43cc9f4b47a3\",\n        \"sha3_256_hash_of_signing_key\": \"acd9a29ef00a03f0f14cd8a0899c835c0aadbd36ace976652ae24840a02b6400\",\n        \"message\": \"e8a7ce4ad0ad6b74fa07eee69c2c3fbe6d9f0a01ccebb3ca4de11e5ef8577abed98d3796ea823c3397e3834d52bad40249679bc9161c0e9d0ce24f3882b1fef2649f\",\n        \"signing_randomness\": \"59a3e11016e6fa52bcd665f33a3e1a61ae810223e2b83430598bcb4db7e75fa7\",\n        \"sha3_256_hash_of_signature\": \"c91346b9e66751a9e93856a9592d63d94cf440ed487be6c0d4462cf9b7bd32c1\"\n    },\n    {\n        \"key_generation_seed\": \"5500e1eacf83f35c256f2cdbcbac0cc6b2283bcc14d8a5880aa2b8d0415a496a\",\n        \"sha3_256_hash_of_verification_key\": \"37ef010f9e7b1347cbe256271a8414efae4de3303fe3111d19c3b3dea88ee725\",\n        \"sha3_256_hash_of_signing_key\": \"11e2856827734beb5dc18453883de7fe972dc2d089f9828c1f0500f96efe4cb1\",\n        \"message\": \"70260820570b63a0f5dc29d45edec5ff0446b50fc5ef9a4cead786afaa15f77044a89364929be2841050538ddefeccf866ec5f9e02e48498d9b34e15f631eed62b83ea0399e2d17de750b3499885841ff8acb9f44a8fa6883e192cd92da4bb90560243\",\n        \"signing_randomness\": \"c105af19c1948086bfbf0b16f050aefb14773c384121529c5dce31343188ca94\",\n        \"sha3_256_hash_of_signature\": \"85bc7c5cc7cf754b164c91e58a2f9d39e3b8da83eee364c695983a42f97fb678\"\n    },\n    {\n        \"key_generation_seed\": \"eba3bf4eac60f2ae3184b34893b1fadb92ae181fa0301876d531f3b6011e94e1\",\n        \"sha3_256_hash_of_verification_key\": \"0def8f75cb0ab2f43c8508dd9c337017dd8b537760b1b26eac857fd218debb0f\",\n        \"sha3_256_hash_of_signing_key\": \"7903e89bf25f85cf7cdf26a6d0eb494b199691329e4add48b5ac9c19d7acd44b\",\n        \"message\": \"12a4bf194b9cf7393e2f0e63fa48094f748a4a9141850ca9bc39ace05e9b3cf90a2600446d7858a8354a77821fae68ea103b0528a24f83b3e2d344ae1cc9fef201795304e77ae12c48b8fe8acbd6cad2ec7fe2c87c376cec9da56b5c4801c5f8eb02fff4ffd10262b86a089a88522b874ca21706d9e1741d6d756ad2793fb4b03ef4fae1\",\n        \"signing_randomness\": \"d63e991afa0a3a4ab28051a718cf412d162ca015c976c3a9297e57cefe978a4e\",\n        \"sha3_256_hash_of_signature\": \"e610c1d1c3dd09fdd91e9478a83ece692460a5768750f4f11fb8efe8fe653527\"\n    },\n    {\n        \"key_generation_seed\": \"9598882b78273803f5e0a353f7edaae1db16465dc3d6e939995fb894d33efe18\",\n        \"sha3_256_hash_of_verification_key\": \"c8bc4fa54fad2d644f07787d91273bf47c7e6da0f080d216d092c664f8d5e36b\",\n        \"sha3_256_hash_of_signing_key\": \"584eae76f3e81a5e003c5eed9681088a2e9ab3a6545a12235cfb5e771d651127\",\n        \"message\": \"ce785c980c5d9c609c42290bc0f44f87e1fdf86c0d57ada2eb8e7be895ac9b6b0eb7d0e9e5710c59bb6da703b22d6de8b1b1deefa8a9dcf616b66ef14c4bf34fb3d3b76927a1f823dd72a519adade3902ae3ab34fac6b496461790afa13f873b146310a83c084deb4721350acbfcbc30996539c4b040e29ee0f575e046aa2fe8f8c9a6edd77951a0c4182565b24b2d3393905afa917814ee852854b1ce610ec56a852a9864\",\n        \"signing_randomness\": \"474e57313eae2e87fd2b524d527c1b8b2aaab2258046fbdcee2908bb5d94fd9b\",\n        \"sha3_256_hash_of_signature\": \"4be6d6c913a18b5ca2eea909afb6f70433e6d1c022f0f71ee9634168b83fef68\"\n    },\n    {\n        \"key_generation_seed\": \"4845e8526317981481a68419a7389f8ded6094e49c11c44fe1e73676729a9cae\",\n        \"sha3_256_hash_of_verification_key\": \"65ef848698a51fc448f40f0c6713713a933b3fc845a75bfed31a4f5344bcff8e\",\n        \"sha3_256_hash_of_signing_key\": \"af68c5ba7e664d669ccabe809ac7c8ebde9da6b8559ba365784d65f126c49d0a\",\n        \"message\": \"bbc03ae447a945ef029063d377fdafdc5aaed3c4ceb4cfb9e81465e32b3416dca1a37007d0346d866cb2d5cc45ec1ed5a9d9e2f978ba9b4f5c7f37f8c1733b8c2d83a2d00d4d9aaa1c610cccfb97523db8ae22c60029638d562245a67663a0bdcfdd154b5f40d70fbd46a5911e4a95a44bd60026865bed82a77c4338e31ccf0191918e33f27932093e9390ae02bb92de7896cece42f1c4179316a42cca8694d6860f7ed92bb776ba45dd194b19be748093aa14d93f42acc443112eb9c3e1ec1a980f1602d9c7\",\n        \"signing_randomness\": \"4220a5c6459862d5f293eb1bea48852f75c8a59e1831d5c449e21b71e7d6e7e5\",\n        \"sha3_256_hash_of_signature\": \"a7b3b022cf3e8df838a07fc4860ce69f8ed392fae75ea44a75a36add99cf9c0d\"\n    },\n    {\n        \"key_generation_seed\": \"e7a108f63926bfd88cc202906683a4a6a67cd0da347ee48f67ee5e158419cdab\",\n        \"sha3_256_hash_of_verification_key\": \"3a68af4e86f59dbd850c65e525d69dda7d8229cbdc388d5bb38f5f168427dfe8\",\n        \"sha3_256_hash_of_signing_key\": \"3e5f76ebf5da5b61b059ec8f6274e8eeb0b284c56a0661074ce1eaadbec580e3\",\n        \"message\": \"0ff0114c45cde8915d0a6e9a978e69e0f6a81bda695c9e402182ea8094aad5614b44941f8a1d6deb77637c2749ee3cf7bbe194de04c8bd3638fef5f9fdf2f49103fa47da46f27d29b8f8b1d7d5b5b8c998fb083845de7e4ab4944b82b959c8482eb2865125a33aedfed46d7cb4233c95c5852106a9cd5c9b41c6ff1c8065ca8998cdbfaf970d8b05b50dfc52ee02b853c0224b838c57ef4e679f1c744723ef7365f5a17add9650c0e4fb36ab86663b5adec833696d2eb9c7b7e3efc6f5629324b73239094be0a9030d2215d96233df5622e541fa628304426b2d8ed2bf0183bd005ecbc78d24cc\",\n        \"signing_randomness\": \"c6e0778467d613acfbb1107b5c2187dab2a7ec31b21c0689bc35c5682480cc9b\",\n        \"sha3_256_hash_of_signature\": \"f149bb8b930a1da73b17cc1cdd8e31a433999d671413a5c28d5fb2c23dcade27\"\n    },\n    {\n        \"key_generation_seed\": \"909f1a8049b33d306c962d5e1adfe63a9cfe749e251deb47021364e05a6dae45\",\n        \"sha3_256_hash_of_verification_key\": \"a0db2f12ad8b0ffaa794af7934d5d1e9a94d36e3fa20fd69062eb7a8ecf1e192\",\n        \"sha3_256_hash_of_signing_key\": \"f34f7f559dfc51cb744e913e6deb3b585f83b9d761d55084aec392520e1666de\",\n        \"message\": \"c47e571d827193631fa80d87926cc0a9ad03139d8e97f2cdf2094071a56f9d5230228193688e2f754353eff313b466a5f5c63b6ebdb5b180ce12cb356dabb98c24122ed6a0cc6829131de9f1f5686e3c4afb004fe69b1bc2799e090e9d057c815e0dd8fab388b91e021c2d581121bf6fa510c6d034d232fc740782fef0ee5a319117ca2bf6ea81a85f0b5f0c5b26b46c7e59656473d8bb7906f95afcd8b4521dc5bb85ca352aae486ac081a2d81ca100d243606a736b095a8ec7b290e2a9e9414aa98f2a6e6d40091b38868382f56fd6b323bc8614f551bc6b1df7830365b87dae4e1dc08b1a43ec82220d621ae73c28b3ac06ff2ce72b1ebdf9f45ff5e38e149c5bdf61cd08bc6c\",\n        \"signing_randomness\": \"de54d0855ce631dfce3aa6d1606ab571b91ded15e7981edb45a239735ff12ecd\",\n        \"sha3_256_hash_of_signature\": \"af0da09f1e954d4a9987b153cbeec5dc44c198cc0de74544845cb3445ef82069\"\n    },\n    {\n        \"key_generation_seed\": \"cc272dbbca8cf0e6652fe271a35465dfa14f9b74c7313a2320d30b6a6b5effba\",\n        \"sha3_256_hash_of_verification_key\": \"e00bea8db9083805629624900bb70c4897be8d30c96befc723a096058be68087\",\n        \"sha3_256_hash_of_signing_key\": \"23014ab169a59a73a8ae6500bce06627d58500ae37b8ff556f8fd619a612b893\",\n        \"message\": \"26e790e4c082930d30468a1568c550f89e60802122a12eacbcd02d128b9a5bd0894802072a93d373a7f81ecab83a659d0e51b5744ca58811db17932ade3783014280c5b3d29c3e79967ff2eec6395f1262c7ab958fa331737372029764fc486273aa308045a6dc37f707601c97cfa861d69344fd0fd6d9f6d154da4f522688d7db5f993d8c0006f8a5fbb086a70dce1827dc74a70577846f5421f0b61901b2242721b1850dfdaed6ebb0d5c90f0df5e2cc00dd7e7a62a9a18ef51f0137f93be1835b7cc56deb62636e5b64213674364f156db25cadfea39548e87d8b19f9c7c3d6d187098c0090504cf963494c1974020934915be605f4da2f397aa69201b6556bf7f5a392b6d0ab2de1447d47ec7c20dfe3a17c48dec3239704d6de0c8b49084ec717061e63cad82d\",\n        \"signing_randomness\": \"4fd52c447d0e58aa332fa8e1c72e712961f41490ab1aae84a2f1826a7b0329a6\",\n        \"sha3_256_hash_of_signature\": \"1537b1e217d23dc3e2268c9172e3c2857ff7f8a75f3a199c45dd89c64ec1b260\"\n    },\n    {\n        \"key_generation_seed\": \"70d2b24bfb8b86d8816e0916582c3aac940a2c4cb4b37666f8fad29181cdfc9a\",\n        \"sha3_256_hash_of_verification_key\": \"46a9925bbc5b1310b6ab4d8a4afc064c0376a65c58efacb0f79ba2ee586912cf\",\n        \"sha3_256_hash_of_signing_key\": \"27d43e3cf253948e7a1d6ab69eff3a2b1d514721ccebf62a16192ae0c36347dd\",\n        \"message\": \"cb9f5d669a0cf2da5d11bac230e7e1499994f2d649880a5b964a6e92f7be29d954669ca02ebe83e37d6bffe283138e5b085a0cff8f99d9f1505aa48fc74082722f3ea58799e984687ee1eb0fad9c35d34e326d247589e5b93145fe4325fa850b4cef5bfb7111165f6c4ebc4872f22e809e60678143a7773ca25d1c9b6539689ca4b64e9094bd3c6b1097f12cb23a2bd686b77cfb427381d8865eadd2b16917eac5a594186b355b972f7283daaf37e1f8475dc648ed081b6d57a56d9150b5b009d712d3029911df57b44352fec78084c1385ebc3bf6464253a47e3cc1bd0fefd0185e1bd945f1cf6683045155e03141022df51f8a0bb0156f7bdfd52c2305e4d27f903512eec8bc573b375d7adc109b476c698e2c64c20a787e13668d096e609ff12085d6a634cbd66f3b02d74eb5c8abbf117c7a0519fffabf8afe3bfd65a2893d302eeeced4cb94fff8\",\n        \"signing_randomness\": \"0ccf82ac2e6ce4e571806d1402fc0aa8945897839607c3d797d927989ee57411\",\n        \"sha3_256_hash_of_signature\": \"9e94deed5cc52aa334badd2c970553b0156216fdfc795f13e7326122556bcac2\"\n    },\n    {\n        \"key_generation_seed\": \"b71fe7a6bad457497279a56bb2d87ed4d1304235e1e88ab86cf0522837e34b09\",\n        \"sha3_256_hash_of_verification_key\": \"2815613799eb39ea645faf103ffa61eb7d96b16e62d63a8c398949115927ddd1\",\n        \"sha3_256_hash_of_signing_key\": \"ba7eadc624d46e7be4142f4a0d35423d9dbfb765576bc6d09fc1fa278cd5aff2\",\n        \"message\": \"4edaa2ab7e34b5e199fa1fb3c6b89015c851611ea636d46558e428388fd9e6392c3edebc422f5f96627628b44b088e919a132f9a42fe49251152fdfa71d8dda3e10e903ad70d9193388e6164a0ce3d2fe3fdcdf3c19af376d16250453b70318cab9e877f6c8c65be01bf2037ac56021a855f208abf4f01c6efba1d30ce980f7a8aa9b72bdc81abb08351f6c0e4d39c60abfbf2fc26739208eb7a6cdb2e8d139eaa0e23c0452b077ca78a41aa0b16d1ec7d44b452d8aa7fd783463222a8a2be2ab174b451e008ca438e4c2df19b5421b2bdcbb7fc22422fec6f6dca41228fe3daa3097c426935d2086e9a5fa137fdf07ce97edde5d4bec27c5018d0cf6bd0ee2e1a286a1f997b955ecbb084e02940834a531e5b243d4225ea61b500dfd56d8fec56fd5a88396d958f4f5352565bb644b46c63f1945d65a73e7e2840694af9f10672391d645d7358e095a938e84354b1679277afa5cb542123b7158af2825874f166907346931f5cbf8385b6\",\n        \"signing_randomness\": \"cb1db24973aea3329a979851cdd3b60955f484bbdf5aa8016eb9c6f7803776c1\",\n        \"sha3_256_hash_of_signature\": \"da4c47001ee35148f3a6c34a8230d05d660de43c8bf5865079b514766db56885\"\n    },\n    {\n        \"key_generation_seed\": \"a52506ab8830b41cae8b6ce9660e65eff022a65d338b74ea585de2da2ac9ff02\",\n        \"sha3_256_hash_of_verification_key\": \"6b0cb85b7993b53f857c4975db813efcc838dddfed31b6b7242fa701bcb882f8\",\n        \"sha3_256_hash_of_signing_key\": \"a71888a520976add16e6a72a3da9f7d66bcca6044bedd1d3873fbda9a17cb5ad\",\n        \"message\": \"2a5d309e9e976f9323e9dbf5c3c8a744d66dfef728897fd3b5c29cdb3c9d9b5ed5bdac811b00d8d405392ae7450206abe91c8811020a48335c938211621399150dd91f90276b2a5cda2646652bc3badac7d1fcbc7d9e2e8bbf0045ac22151db08824f10706e29664fe5cae8bdcc2d19891680985fe63bd8002e07d012464673a5f0d6c160ac9a6c752a3f515b8f6bbe909804bc5842d998b2bdbd6bf8acbafdaac6831405176030e8d158239be9b624e7fb2847b19afe49ce8b485ee4dc707caa616ed1d8d1f146cde864fa3e6773f12fdfa1473f09caedc9cacce4c76a119818d853acac404ca0c9032128a3793ef940c9d6ea2a99cbf8172dcef2e3b2b98858331ffd44fc8c832542f6a301712fe8e08819181eb2eb2c918f51ce1d33a3bacab32780bf5b76d760368ae598b07578ccc39c6783e08c56c96a9b0977bc1c345ed3389e6ce58316cdc8e18d0420685febd336446e10a59d841dba7984b558a30d4d471b62195a59533c7eff8e02a48a6d80d27c5bc36e1d0a469d1b6b96d3845fb7568efcfc263040a257ef2\",\n        \"signing_randomness\": \"06d2be96f780ff6eda29c13b0403e19bd62042e379a193a530841454cfb2b3c5\",\n        \"sha3_256_hash_of_signature\": \"de9bcbbb203d419d170aa8ccc1027c6adf2064ab6b342b9863579dd41fba0ea3\"\n    },\n    {\n        \"key_generation_seed\": \"1aa4f8271b2f8cf386ab0ba23c81d8adf44949f17b5bab29acbec73c2b06061e\",\n        \"sha3_256_hash_of_verification_key\": \"e212fe6ce45c174eca5334bbb912bf98e38b93b9fd4b1f749a16fa9fc8006401\",\n        \"sha3_256_hash_of_signing_key\": \"c015a9d7ba9361786ab21b6254101241660993916b9c419f69b9c9f0765a98e6\",\n        \"message\": \"51ce09f8e011a3ed251e9dcda439957147c074e04bbc65469bef8d033a89fef92a4cc0d2de6b4f7e7ebb24e3667a029cbf0790648475aba9b1f31e7318521ccf54c518b9cc228fb0912f018ccb1529b2afbd5d06d53faad2b2cae6f490111c17e6e77a01ce01016ef40e591329a3acbdacf55ef24dc8cf35715dec7cafe7ac93ef328def7554aa33407e775c70dfc0adb5de216b0c4916d3c8deb37e30e1310b55cfe111f5e88136e321c11bd9d7da6d98bcc3e76489a41d6a13b99b8eccebecf213ac79bf7a9c7f03847762a65cfc6bfa08cbf13f46476d045cf259acca50fb40b8ca2114d57b9675dd95dc59ca7d623b3abc512bf019c191dec5bff84b963822b1d86b40de9e51533257333e2669da41d0ed1a58589501e687b744d1b9e00959ea4f6a05cc1ceed97fb0b643e87b1735c359c20ccae2db9030e246895c5493355ce5a87fdada237450c2a595f65c7cf8a986af16805a3dd48fc97521a45b308c93e866d1b62919a7da5a4fe45140f90c9dad8c109610997dff1872de80ca298de4314129e51fb5b24c806067bebe0d25b01334f7e09aa21a234a8893a2f8c7c046a0c4f2d9eef87dfe13ea1a\",\n        \"signing_randomness\": \"2d86f5555f2202963fa4aca97c2800658eb6af8d8e8f5146f738fecbacda33f5\",\n        \"sha3_256_hash_of_signature\": \"75c4c237f1ba39fdf5ddb9ec80e7189579392a5e8d466ec10c11ef8ed2a67a4e\"\n    },\n    {\n        \"key_generation_seed\": \"06982fada2bafaf75097d3f7158b67258f378476aa6094ed2aef7c1cc0f29036\",\n        \"sha3_256_hash_of_verification_key\": \"b5f41d7eae1d3e3d4ac109c62086dd697b18efe36470c35418c725a3a6a0825f\",\n        \"sha3_256_hash_of_signing_key\": \"f7f7ad27a10a10d860d65d81a50b48e98b03a276b226f80843f78f1757320ea4\",\n        \"message\": \"89015fd95489b05391871e44f0d4949656b10c470efe5bb4c1df5a0249996b9f2870779e9f83d513fbd6021cb13cbd88db5d9e327d45cba00cda4ca46662b304f024ee1ac265b1dfb81a03b0fc6abd8a893e4f7dc02e4459cc0667cebb959752f6a4ba5c0e7f5138710ff1ad9e3e85c770088fa1aea127beacd5fe2393f7cfdf6c5b6650d49014484fb72abbe3029e41c9563166dd37b861299f72e1a070de659f18752ee285320242ddef92fa3fad6adf87deaca11ecc6229982cd001bfcd89f38fc405c20f186f3c0503606b55f02c9617da9ae82483fdc67c047cfd2521d5adc9e40ccfcb91667f4fb26a61cbe4de190bc4f8fdff3ba69c8442892507968e3367893143f9b8085f4ce03f8f61368011fe6eaec3d4431f9f61276de9d1a30e3c226dc1b9a5fa4bf35093333c43492b81ea60fcbeac219088e731969c4f9e9dca061c4e63ef62fd7aebe524cc83499fa77ed309bc15d1545d1f160add81d18b76a4e7a6f008adbd627babfe795975770f75856e1aade0f95e118a3e5e2a01eccd0b14304bce4e1455611d52e790c3aa2a39e9ce9d575899a7722cd80d9f4a2a5e25ca6c975caf00d157c2a7eaed4167747fc562b903f17bf0e71b12d8f3808813ae4510129b262a9b9613302d7f\",\n        \"signing_randomness\": \"b108b672da6a93e1ca060e22f5acbe163591daa2332a1f610c7263b5c040ac5a\",\n        \"sha3_256_hash_of_signature\": \"2be365d8c50bf7c1ef162c91a28d2664284d6294226acf19f6c08e81ec06feac\"\n    },\n    {\n        \"key_generation_seed\": \"9665b78359edf118639d8d8579b81788ac2e6751f1a5eab7872d110b79598eea\",\n        \"sha3_256_hash_of_verification_key\": \"884298a7c1fb0c16c9f21596cda56fcfcccf7975e1ccd1ce664577604a4bfbcf\",\n        \"sha3_256_hash_of_signing_key\": \"70ef6a82ab3478c808a78607f9f1413fd4cee7de7cab7a2e19dbba287945d07f\",\n        \"message\": \"fbdc61e0771fe03252039f86d318442a90fc8f60e7e324bfb72ee9f38fb063c3494daf0af6cb2d2edeb3a861c49d78be54de21ca0953c2cb8a99868475c2380fed1aba221f1dde407e49412de6c6c7f963467b7ea6161cdf96abb42dcc9d4a9d6a134841ab5f5568aae943852ea2bc8adacdcb4478ba0ae41ac74446cc421f0e6ee51a1133daefe0d1ec18e3c10097cf216caf111c185337d9ce5d572ceaa554ad9d6e8c6633b89001e8cb81a5b90645be13edc1aa406b1515cc45b1351c4038c3bce9194067ae1866016beb322f6389f49394b2124f505a3c8d39f7ecb98ac73c26012ebabddab209ef41c0287672ad80f3c21645431cb8375d8b86c4c8c64492d0ecb729a9b73712b93fec71e21b84333c8dacc46eb373ee081b3245d9c13d35769144e459c8349a37510b1447cc05d7ec17943c32e0a4e218f28d0f88d8150ac1248c7b11a719c777b72f6486be7fc525319c3d73908f08d6aa0d78f2cc3feb87fc2643e94daaf7633e46e223595bf2b37fa709c62eb1fcaa2c2539093e28ebc3e4c94c500d90d062c2de348e970dd9e7b10511ac5577ddefdd763ace5ae6aa9bfab460a6dc8e924db19c3b2d9dcad425b356d1202c446d5191c06334936e16789c6f62958acd1cd7df1250eeb53f9e8ca5180380c6780f63ccc8fd13c8362ea0aa93588c693dfc7e3fdfbb8546\",\n        \"signing_randomness\": \"c78a4fc0fc37dd7be3fc37cf3b0d93b8faceffa053af5108e37a229bf3aabf47\",\n        \"sha3_256_hash_of_signature\": \"c0e09133b245cb5478b2e81c03068afd3b17d907b5c718970da5c889a7e0a6c1\"\n    },\n    {\n        \"key_generation_seed\": \"bc0d4f924e5d38d7bcef1f0cd486e5d6ed03f50686cb2561c34f11b5ab46ad75\",\n        \"sha3_256_hash_of_verification_key\": \"3d617a6cc0fe1e3436a03cf71aba0ddde79c97df5a8cb75476bd7d3ff7989094\",\n        \"sha3_256_hash_of_signing_key\": \"caca15ae5b1f814c5b91304504ec2909f669c7b797d44faa59180f1966e59cef\",\n        \"message\": \"19686ff1e956d06e5856b6de399731ff5f6faa78181ab03b21c59226899e93530e81b3175ab76955d279f46dad47c7ecdd920785b04eab48e8d3bf7ee460b32a08802f91bec2abdc8d56ad0ae42450c60c014f2e5dc66ca8901a5cde1c5e928eafb66153e54d6e5926d12c2f93bb3659924b22d1dd0175c95ebbd7c2b136fdb4f9d674b1ea7fd9275d9c9c623ee8084ea19408c73171fecce966a7183dc19573a14e33132c41748fa6199c2254e27ac76049d375a4fbed8c1002fda1358d99ced106fd778566729fe346413abc44c0e73a912fb6dda62f25a5d979ee11f84a09c89ab7aba7a6cf247fb3af06c25dd1540fb211665126a38c260757016ac65f2c1482e30f3da312b8aad7e2a03366aeb122ecca83f316067a9a34be76924aa822839863e3652c11f328bcc52ac24c5126948fa775b39591f66d9bbea62d6f30c72be853a8861caa29b5c72e108da99aaa008dd7df2b1d0133fedef2f3dd0779bc8c480bfc79a97fb84f8411d996b7428316fa0dcf902fb14460eb2302433dd0c6f60acf33df0a25e17fd8cbf930973d9139d11856bd1776519c4e8cc4e8164d1ce0774e216b2238ad28caa314907518d6dd178bf8a667b4504228177ac05702960cab9a153388bd39c13ecbce074678da866ecb49aa9fe8620fde68ff100f26e99e8701720d3841ba8ba7715d430a2e91cfafaaee1967a8cf093b199a931655b1b6bd3b633284f2b1f25b1ee81905c424\",\n        \"signing_randomness\": \"802889b2352c64d4da34a50794e07e6db041ece876d634a26f725b2a162f1e02\",\n        \"sha3_256_hash_of_signature\": \"0d7b103f879715b3d08a20705ff0f3ad5c0054edefdc036ee37149dd92fc272d\"\n    },\n    {\n        \"key_generation_seed\": \"97acc9feed76500bbf6a2abef6124735feb66b5992e02961c5865462da4a72ee\",\n        \"sha3_256_hash_of_verification_key\": \"5350421f094c51fe92d45b0ab72c920ce55e41088dc4158c5a6bf282da926051\",\n        \"sha3_256_hash_of_signing_key\": \"55550692ee1b071f8d43fbd935b5fe656afa61e8dd619195752aa7660c7f1bb5\",\n        \"message\": \"d0156ee2c6dd2020b91d6824350e4fd838f6bca0f5995923ece37766399543b8d910467206c87e5f7264e31cc0d71d33f46f466e27defe12cfa9fe4b64d4002de68a34f382f214762aa069fa15ad345cf0e5b6cd76a738dee4152ff9ddbf54da746561a24c199430171b6d5c9230a734b0a5e456ab8c87d2fa62fd73e128e2d2d1ec908ea2a68544852d72bb942a8e4dafcd63c12c51f750698ee07cb75cd565e5b8e498756b5b0af92d7b87067d4f764c6ef47e3f629ae31864a9494cf693c6cf398663e64cd5bca2f066f0886150d71c689ddf842bb631ddba8da929ab8b096c125562014a88b979270f3426baa6e8b0d73cebfb136ab6a8161be5512a8b0e3358e060227669ae5c0780a67ebb11e5c672cb1dab4a94a58123dec93f6eeb7e28775cca9ebeef16caf3f9f9b5ba88f0e0ff9351d85da06d6bf2f9ae2d2c7def0a0f585cf93df64a2c4a916dcfd3cfc9d79a816e53d3106b6e08236624fc9a15861fb2b2e3eb7117d5675e00c784834a82072f713d929403d24478ba195af457164aa1a85c5a71c86537c04e2e0f1c5debf6f9a13d6947aef8290127341dd75b513ed8730d6acffe3eebd6a09626da29713d9b1f54199bfa4f2f0e790f2fdb6bd3948f86d039583ddc534146935f652a7a6484c9a6b8a8b0159e8443b98cfcd1e1ead9dbf7ab4d280fa6e32a3994648cfad300af8a71f270ed943e0ddcddd98878377ac625595ab59c8a65084d26815189e418cd11b2682c6f08f08bd0c849dced2b0979b2439ed02974d0daf531b2b2fe\",\n        \"signing_randomness\": \"eaa50d5ef53750687f32460174474aa3c9aa6c6583ed7eb707f2573c5c5e046c\",\n        \"sha3_256_hash_of_signature\": \"73666a0c063b72d9b5e3d36197d58ef1635c019f43dc8ff6913e9f6143787ee2\"\n    },\n    {\n        \"key_generation_seed\": \"8105d3a3429522e277614c8cfd0f8f5496e35919878a0a04e2bfccfed9a2764d\",\n        \"sha3_256_hash_of_verification_key\": \"31a9f167fd0391aac133156e270348810f4b3826d7bfbf4321bdf1167ec156ac\",\n        \"sha3_256_hash_of_signing_key\": \"b2f97b37da8410939b80095f31872eb85de7e4e3a9bea7b13d9ecd685f9152ab\",\n        \"message\": \"8053d47b46f2269fcf47943e3d925dc61885814b3d81907ffe45cb064464d6043eb83a3e49b2fcc6dbbaf19920eb8704034dbeafe33393d3b62a3e6735f7dce7aefa6e924ad1b0ad142d3391324231281340be0710a3d97ed9ab089925a3fc5a6760a0c964abdc3611d5cecafc3f14e95260be6d71250b0ecccaf7ffa69c8cca3e97f2914c3ddd88db656a438566204815510f209efbfb66fda5fad54e7c4f10f5c5b3743dd752937618f5fb9aac052fb6474708b582f75de08643a683d6975f3dba304f0db410b89fd8475ed80675c8252f40502c7144cbd129f57098ed49e643e8505f6615978f0a3c8a3b759f360afd0fdb9a19e46b661b8880ac58cb4d75fdce669f5958e03d850ca545519334ddd40799aa57f938bbed6334d613bfa53c7ff79ff196623c4a43fe4360ae8283f5d7f8dc0a06a230af6fc1a521775c751d84202942865e9c0cbc47f35f1ea588887c64e34f5a10b10b6db0e0e7829a6d37d14ab33557079ff9e22df504b7e264d4745be255d064ff912c18885f806b34c286bfe604b806ce667ee5e1e72b65b969cc5d7e8cb2a4a87ee6ca97286d07b82a391a24130913d2157f742fad63f6b65b165f3da0d6fe50a6b857d35c93652d26bfb757be1e35dabea7e5591531390006794807263855003a7bea15a1639b8c6b5d9295720cae3c1af7f1eab0a19f946b185587d5da8552c065b21514a52f2cec4fe5472d765ec3c7e7dc20eddaac1f193882ca97e04dd40b1c225a9c2c93b2b5277d21ce3f65602d32cf612d5b06aac438dea3ee178b7ef832bd233269709267484563e23ed01ed9fdfec4086b0f91dfb832\",\n        \"signing_randomness\": \"9ae57dbf52b062d5d40abc46bb19fe10f310ffbf8f3a39771d9448fb5e186327\",\n        \"sha3_256_hash_of_signature\": \"6b1153d4e72f14d85499dc85f61d2774cd25081d44876188c622c2a4ff2df975\"\n    },\n    {\n        \"key_generation_seed\": \"0b8f62093d8f15375ed31950a316b47aaaacee999ea9a5127b900a0ba4dcba59\",\n        \"sha3_256_hash_of_verification_key\": \"afbb5972978f51c4b9ad2fbf564ecedd6d715208277fa41d8d08d9e805db5232\",\n        \"sha3_256_hash_of_signing_key\": \"9ebb95962586ba4afff9d7f81c0fb5de10668b35b599d41e39c3e8b1c5fcde17\",\n        \"message\": \"9f4bfe39fb9c38706d6e4aaca790b97aaf2d28f1c528db5ab75dc3d66b869675b6453775925b4042fe51679b568b548051e1e561b165624aebc286ba6e3751596984f3440e3aee06eada12a482c81092bfd143ea18c7aea5ecfe713a1417eafb0ef04f0c52a3a5a160547cbc1cf6e69c72c7a45aa308c18f8bbd6192ebbaed022e8f8ae40299e3247a8c1549bacfebff22a911232e81c3a0d53efb7539fc363352578794c3fa85d8cc917332cc7bcea3293f4948a43635a9b065e589f93bc2523d7dea29905314c074460d37ceef7ab2a88a14cf643fa508d90b317257d574b56e53aeec652959530fc8853911b507d2df713c55a80fe484982f8c68c3b2d46a39e3438a0fb200549cd692ad108afef7cd6a32a9259e507cd481ade5bb80b876cf38cdada1584c82d073d577836c0f6535913abb2eca297118301e72da84bbc5e5b99513c3af7d3d07ab949281f2cbda274df07b80fbc87f0b04303f73fc671fb30a5f7cdbfde0d52ce65da7cfb6eb1e91c5e9b2e650eb6411d4eece1289b24baff6bedc3b52553c314016ae00d077ab82c07a5a518a8cdbfd5c7c748cf34e524e8d3133d140b64c6dc61eeb4e7c8415e80378f1571a9f69c25a59e7bc1ca9efaf9582bde85841b1d597d58ca7579903918e76352093a339eb7fbc5b423805c2aee3a1b205a3cfdff7ad12e286c394a10af0835cac34ce7725a12ff0940eb01c4827cf999122ff8e1e7cc01019be324199412360bd8e2d86b3ec3b92e8619ca3d9ca2cf40eea9cc76a70ff8126f202a1bccf5a10c82dd304acb603b24c155f1198debea34e9a03f5f5c73cb28b5ff34aec40ca1251620c129ca8f8ba392cb31b801c280950c235be8b14a11883fb2acaa8a6c4\",\n        \"signing_randomness\": \"9e50938d7e0b916e85c5b3270c5484de4d0fd06a10134f2d8961cec25c2d4a92\",\n        \"sha3_256_hash_of_signature\": \"6cc7736f2b1e1c4cbb3400006793c664a041926205000b698d35abb00489d6c5\"\n    },\n    {\n        \"key_generation_seed\": \"b637cdff5d85e4b833cd6b73c0d679253700aa99b9b46fc8a36110a310adf6c0\",\n        \"sha3_256_hash_of_verification_key\": \"697a10df27740e86133c3874d52b9e28b21bf6284bc60cef4c98805c4526e2bf\",\n        \"sha3_256_hash_of_signing_key\": \"46dce592c3923c429ffc2d4af6851d4b89e686eb13abbb8a76090f54d59fbd21\",\n        \"message\": \"96c6a06b7add03a302ddf91d5e3c8850ea36086005f85259104b482b8304ed96bc0cfc4dae833e5084c6a181c365e04da15ed0e8fdc911da2c7837398770a045c5473d06350251bab538e8f0f48eeace21e0e99c52db14f30b87bf9e75267ca90e40129e94b86f8696156e8a274e2f9c26dee58d352ab497601a2e37c23053032f9fa0d0a0b7d47a23cb4895909e95953312447a41d407b9ef46013834a1591b53b773c713ed71eb83d73a533dd2e333ff829c3ad64e9e86af12beeb0fd4157ff30593680542ce339a6639a2326ae1e84257ccb0986aab6b5951fc299da02b7cd8f60e25d2736c4b2806140c821856b1d48286300ef71fd05e7afa8162d84293de0fa9436a792cdd7ce0e628704c3bd6b253d4375595724880b7e3a64760c16d5c4d56b0f154f74de0ec6445e7a16b48eaf769bdcba5db3f95065c80bd99d998b4e10882c7937b22d225ace6f4eb2a9e2f65a14e548102a2d825a4c8c610b52a84ec90e4395b2ff75769a2e40ad36b21dab6a0adea0f84976a743ea0c940ffce90553ce65a782e4a2768c81cc5210e6c54305fd7f8900faa4cf9a41578de5f9b825df9960f62ceda07d54579894b8e445e52e3d21ba4421912732d4c5312c71433add363382fb5b18676d2f98984f39460c2d8709384c877a3f39db14226d20f0ca2f85d60771241946c609191aff095d10d1fccdbdc79b14f81b2fbad054cafc3c19f80be82a6db207768a694be09eb91a1dc6f705bcdb13e02f2bab1f735e95092f42230caae11b056f3a22eedf5e3d2e846d4b6b8c160b7d28c8553dd058c249fd420cf0d4ab3421794decabe70dce14fac7652ecca8b6a26a619be0165c4475ae176c5a988d025958937f1624fbfc8a6fbbc9e060f00444cb0fbc3d4366009ab9d327c07b7b1b14b68286e22bdbe1ffc431f\",\n        \"signing_randomness\": \"a16b9c502cee2778ffaed5e9d677a96c264b66a3ec236b4191ec9ba26be90063\",\n        \"sha3_256_hash_of_signature\": \"8bc9f2f6152d474e40a9f389c762bc537ff0f94ff1e4d045037c556bf0fb8c5c\"\n    },\n    {\n        \"key_generation_seed\": \"ae01259b67969884030aa866bd637fd9b74c1e543c10802eb7dafed6ca7feea5\",\n        \"sha3_256_hash_of_verification_key\": \"a2741a9d5e985082826f4e84d57459612add8992d105f74bcd908a962b9d3ce3\",\n        \"sha3_256_hash_of_signing_key\": \"c0fb2c7c3d504a2f9c7639661a9c0f956923138b004d7e7ea854046f0775f6d7\",\n        \"message\": \"7cdcb1988469ff9db96cd504cb79828fa51b93a1a6458a20b6c95edc3c0199dd6fc708c0e5c5d6727008357f5627627c9ceabc87c9a16b5c877bad9cdee1fd20e437d2a7a8c5865c76fe3590919f2d32ee3778a279fe1c2581d2bddbc3a5a57f14b9c85c716c0d09f4fd47b6a2d7d1895660ee7233dd5c0aa29b665a58389733fcc74fb6ccc4ec209504f012475b6e8f631a5f41e90b638b9b32cb3406f03780a4656f553baa6084b043b1c782b523089cf9f5987df0a05ef6a39ad1c1476a6a31188864e72801486f901a564bebfc13b44dbb6ab2d65c6043712a4757de2738c2503301e43626e23db9b8e443f9d616baf07a6e74418c0258e9f805afba3b7463933484d8c28b173cf4fe8a4922ed4f11522dd7a88963d869102a276f803607232074570045c29a2880bbdb286ebf55dc147e0e00472242a77aa0c06da9c2750ea5b2f247ed4f8bafdf3271b4e04b74533762f1340ab030f3388db4c5c2bb713877728d1244c190fbe078f24368ee53d2ee86b7d5ca98532f20ed552a2cc4a7affe4e7c691dfe9a28cefeef2aa090f5a5679e28052bafeccc2fbe6428833ba160cc67ac68f16de847fdd2cc551271ee12eb915d20a781e72bd0055a66595d3310f103a077c81e4eaa9051e98a3c5cde5deb2730d7e40539419f2102c42845410e4cc10c746192db72b2e81e27ebbe0f737333770077e9ae10593271da537a20dcf1bcf393b18cebba1738395f7fc61d9b4ea42f70e1db7b61c4c378c41199d4dc68690920321cc7ccd9d78a79cee5e735f19424948ff550b49eb778df06b3a51bb78b4c63a8e2523d76331ba93e3225c32ce305d3a2553295e7cd3117242fbcff275c8f102646e07d2d6c3e6ba65df2873339bf23e0b849503781ccf7dd0cd7afc116e23b7cb7787fd852cee0c71cbd4b87f2d3f41b84c7768776909942d449da6dd507a64a17c94339f78f8572853b2b71360541\",\n        \"signing_randomness\": \"da07f8644e779802987142d99ae9d17a346c21591f821149c7b90f16e5f45826\",\n        \"sha3_256_hash_of_signature\": \"975036af69a65aede1f31b9de32f379e82fbd2e32624d8b758d9be0b66864a33\"\n    },\n    {\n        \"key_generation_seed\": \"9e2695b355db9c4ccaaa93e83fe73eac3816040495ff59e137389fc7733c2174\",\n        \"sha3_256_hash_of_verification_key\": \"89811c7110fea8026578b21922f4287440c78686c6841473ac211c4519095a23\",\n        \"sha3_256_hash_of_signing_key\": \"471b15f5dd68e526cc6d044039385618f4e43fd6d19de9a62b1f80c93df5a1d6\",\n        \"message\": \"10d663a9d600ab43711e6212e958b70c2bdd810a5043ad53d27fdd3b9cf5aeda5fcbe32e5912dea51abe976c11104468f74b8ed6d57da419ef44670f286e9b39b92e04b8f023c6769d1f56569a27816a0297dffea66d28f02b5296f4f01c0eee796296495ebbb7128e6925f161d4b31e01b3f5477c5c30e0351d56a28ff820db95aed1a892537c26386633bb548a27290b3ab5f25a302ac8da62c3942f3fb1d80252e4fa55bded3e905f1a8236672225698ee543b84ba7cdbb4cb88ce206a224cb53532d27463e276cc66afd4077105809cd4faabfbf87d25b47df4f34e64ba3553d944d58702fdd99ac478458bcedf8870eb57dad725dca851febe33f78bfb0117fccf0038e4cd8f8d1692980bfccc1fd5d6f8175bf3e211a636c32e6b8a88ad294b7037e37a09a99056721851cad452a53b1063a6dd85601ca6537d36f7e06bdc3e706738a05c740c6cfd07034c693c05c352115132bc8a510b81365d224be760a703f59ab3b6361a877f9d46468ea4cd57ffb8e7a5f2b86d3f08510cd9945b80eeac03af66818fe027e7b1e49d0baf57421befdf2b802b29e3c96b2318ff11bb20163d0f9de65c25244a3cf36229224f23ae63afef8c5fc32fa18958334ae0a36eefeea78a241c32568604e4003cd7abe65ef05fc27503e82a3882824667262e8433685f49a524cbfa4970043ebaf46d2de88f719e274a0363ca2a7e96c2dee96a62efd69c16010c3ef9dccf8f0924487c45586ce04909dd6007a0874bd0ef5785dca4da901cc1f750fc1142ab45331aa3bd6da055a0cc8b24e7729025e52fcf65b8d5bb8ad273fca44df2d8aefcba3bf338dcf34e9f6f0d11108237c00ffed2de33feb352af301e15bc06335e7d0f83c19995d4c1a5eee929619e550193de57b70f6f8560ec5a6d241e939ab0b65e5ac159ab2a52e352089ba964f00c9b597dc830fb5ca2da59df616e197cccced744c3cf17bc2a68366df9668546808ebbedbfab6b65993d36d8becddc413479dac1426021f87\",\n        \"signing_randomness\": \"b7971fb2a3f07538e428db74c124750deef766b5908e345e360ff56e904e9395\",\n        \"sha3_256_hash_of_signature\": \"b7091b3b199327e48d7dbb1628ae4bc22eabc9ab701dea5cfb6c39a0c86d6517\"\n    },\n    {\n        \"key_generation_seed\": \"f960a0e155ce348a51efb0b9c314320310fb19fddaef4d8f6779098ac2733dde\",\n        \"sha3_256_hash_of_verification_key\": \"176926846994dfb69b70e7249ecff5c18a084a5872f2b44914f5f042b35739b1\",\n        \"sha3_256_hash_of_signing_key\": \"71c9f3876baa68df05042299362623c295e49b5578801365a3b3421fd3b73c8e\",\n        \"message\": \"f64cd441c3ba9aa063f2f9159009054adc3ce0860e1b811c34e78ed5d22c48114a2d576056d514d46b5a4180597c52c2f268302356566d33db09c4bfae5497aa1fc6256f09fd6c2ea0487f326a879a2751398a656355b9e01f0687d12efbe370eec8c0c5afa499366d1c2f4820403becd1e6b8eddddc8bc1196f07800da34b2b74268f961459178812ee37f28e2b871b293f4f86f6c8782c6c838411431e6fbaeac6e0ffbfc3fd4a8b1102aaa5dd3d804c7f27f297b50c7d0b6e476dfc8f4f2aec11b9af399fe8b59dcbe6db34ca3a34033dce02b9853f13b01875e12d8207519f2368876fd120651fa79a11e11c16435105f47b88fcba756bc16bd0f1bc32b03bfd968e973b774ce1c6dd847be0027c88efc85d1992413f3b28558a73d832e60fed21190c758f62f8c5e1f0c3c0ef4319c30caf309678c335bafafc568045d59907f4d0b4b9a6c417b6d0a4188f61e7cf664d634083f87043e425bc65d5403467411e8ea70037fddbd55857b1a3a95088a575cf76e39e602f751a1081f8cb9800a5e3493f6e5305cec06ce6361ba437d1075ee614860847327a16c6fdcf34f5ac4f55c7501ac8e566fc3d58b1313513793d659b64d7e350579f000c8389f9ccabedb5859c3b8012b8a3d99c554bb2085e9c147f38ceb83099df4ba12d349fc7de8d58744c64219a9bc4fb79de45902d74c893f8656c4a4ea592a16ec25fbdbe290fc94f7098d3318f1e7122be03bd0784461b38b3de400e6b0dd5d430b5b3aca5bdb109825205aeb9f311ae5db9b65d7902f40422f46d992d4b1849f6559f3c3b54f9c9ee6b8243015e95ec5e5c0e7b45dc71473f8e86caa0a46e34962bfc2474bdf3a65ff2ad0217a81baac70bb387fb946cd37fa264e5b029b708a4dd373e6177e199027e5a685dd0033fe80a7d8a7cb605fc05a0cce2973cdf0b1d4e8e861ee4cd9da69a4a5ed0158b9f6a8dbf37353f446eabe107810ac5ab2ba3b4776e7db327c69cc01fd20a7c305269038e7b4caff72cb2efe9bb35daa0442f95a1cfa55879085e077ad7a227e36e3169094ec41d27a0594c70\",\n        \"signing_randomness\": \"af8657c9a424b3ae1b297ae40bbd351d6343ec7675f082d2bd396d3359d9e193\",\n        \"sha3_256_hash_of_signature\": \"9fd963b9829455902c4617ddf766b974e48b5cacf6b78b3da7f17fba002b14e5\"\n    },\n    {\n        \"key_generation_seed\": \"151cf455fdb5ae8d67ed8da09dc6aed58e4103d72a61c31efde4c9712a455fa0\",\n        \"sha3_256_hash_of_verification_key\": \"0fb0fc8c7cf95d6d21ffd7b0074718881856a49f64bc3a8b1989318ec12f7a4d\",\n        \"sha3_256_hash_of_signing_key\": \"c0c7c07d2510d7b96896388f4f3b0e05ffd26a92ab2519d496d34e57164c4f68\",\n        \"message\": \"a215801dc102ef6284b395f7d3b83857a776272032135a3f6be98497ac41e3e1d0e1c54927ddd28b79267aa465bdf8a4ab251b44fd0d09972ee396c2366bc1c5412be95874fc59fd0e2ac517c96515709f76940d2a7180ba2e87a0e4b3cda35e35fe32ea88f29fa6bf5a63cbf2fa796c5ea0b5274ac49710c849dabe82b9f20caf7f1afc6549c98e0cc733aa9c3220157790d8eaf1571cf30895b6dff73249f594c27a78a9058a2f3918194130b7a0bd7b042f760eec0e6f67658e1019ab230965907b3d28898e88cb44ba8eac166de6af7e34ba0b91bc770faca6c7a1e90b6267d74dbabcd883ba5484c8c429a90da31720117ce632dfdf97b988b5861bc512f74ce3f532f3c5e21ce91d733b5e93312aa98cec4c13a701cfffe91ded3a330b101267912f4dd8f940cea9f1e1d1ca8dc6481e13a5255307f5ee67e2b2f06d718d182e93da3c9051b515efeddb70d0a066324eea1c6890aa34730aea5523f3c718700c34ed5a136f3c8691db15d845df47c2993eee485f057fbed72a605f0583d29201337143e035962fd214b26326d2ff2ede0ca9c7f91121442d259a9188aacbf7efd05a02868ee236851b1063f1795ee110ffaa0f61b6104a4483292b0b538b1cbc279c502effb84c3dd6085a0c98c1f4ecd57732b58719b4295576bed4a0856443bcab5a4d4c91819d0e2e00d581f1966e2f41120026559527103a948daf6145745740d43b50d41d81888ea67f8db5fe72232ce6c9e5761b34e6eba4ed1deae88224f05c6b395cd899ea4b7b1d9095ad22b916af60d539d74624bb7e3151a35e441d588b76792bcffe142400b3ca3163c41b08e5098e77cea3cbca37b4006eb17d467fd511f5e42bbef292c203c61918f50cd4ff571012081efd42a2d9a4c7a19962c92b5a32a3854bcac440a175deccb29758397a1adc32b8db5ef6d32fc329e660592de57610efee0a1eb7759e31cbfef105b7c342c6cd8d9e13944b70ea18ef71fe55a85aac232bce0561616a3e53c7e51e435ba73f6dc4770ca005a388ec5f84df5e6eccfbb1f38ae85a3230c955fe26398cea47e2bde0fcc41b3cda32fdbd437f4840a76faafa649156fdc0fca4b646cfefeddf\",\n        \"signing_randomness\": \"117728577ea48b12074d0e8afb58fde449353c5f3fae18ad4c2f87e248b87ae8\",\n        \"sha3_256_hash_of_signature\": \"254e2594d2164061c608978a6308cb781669c72b73bfac352f1402a3bb66510d\"\n    },\n    {\n        \"key_generation_seed\": \"e3143f07ae323e544c4ce90c50f1bed30ae22ba1859732364a992c49df6b1195\",\n        \"sha3_256_hash_of_verification_key\": \"8d8eae127c61e61184f1378a1ce3979df5e2e1446c4085102a27f150673080fe\",\n        \"sha3_256_hash_of_signing_key\": \"e048313f002736d105d5db74d49e509935410fde0574571ee7944cacd19efbc0\",\n        \"message\": \"ea44a8cbaeaf875a28251b727a1b5acdf6ca900af5b467fb0818db49fb95cfba8f2d4aa172d7c4adb153a8ce8e7960d1ef170f33802df3f66d4a89bfd8d743bb5dd063ff16204a24aa63b9e73fe2be5f9fe6645831956862b8b77b9f52376753bf7daef1902a8fa3a52316b5e5c2b60cf0282e808c42896ccc3bb94de8c085a3b036bcf53f3261853613c1cbc8b57e6ce7332c5b5bb366372f59c206e5d8b36e9f44fa404033ffac8bf25534cf59018027a4595f615f40bdcd89da6c091579f65e80eb01b18b1b7ee3a5b9cd170f0e0afbabf3e850e577c0656860de28b145df1937d720f857582ae81b576611f77699de17e2e8f20667ffd7eeec80984e7e8d694459b2085b557d1a4e56e681388c56c27a64e1d5043ee5eb705c3418d956718aac9b02b14c274e11353b5f485c10de1e99e52bc0a0052c7dd84c28ae7b314c08da9e149177f1d4df283e0d10f7b5bb59c111f3737f9ef6436675d52bf2e4e6208d6767b75e1a6cfbf8b6539740c534a82fde72511c99adf9f06428e11edf2636d1512ecd65f9668600130d3dbaa496f05aaa5e44f0d50b043a4a42086ba9602313f29f54d804bd2a0c1c81150d00a120db8fdd0e939643ca1142a4059a6461fbafcf0fbac3d6c515deb0a5b5a5da0bbc3331af0bc7a6fc204e51151717e7fe5491cc84f9ec76dde1109b21c81399bf9d9557de379092a5dc378cea81a97d07017d68962d54e75d7ba1c3832dd7e3d4926a5f8922ae3dbf06af4f531acae9f8ea37b9cffec421d0855f88be19b3417a27e8eeadd104a142ac3381b40c11880397787e3ca0595806a42af6b2f14385c9e4b3233332eee23e09be4557fd42d519554694a8ffdfe1045461e82e07689dc3fb868ca5eafd603df7d4079dc62dbd22ee9982cbb95b9ffc1ecc43adcf1675a3903098a8a2fc52a55b9741ad2694853f92869c37e6dbf6bda03ca24704accc0bcb5a50b83f04e7df376262abd6777686a2358d6b02978cbce4fe6d5331d9bea02ad7ee49ce5166984dcdaa9556485b601686ab53a4e75034e5d27b88406852d622255ac9207331dcfb2eda68c9d259df0a0ff14df9e6d2d99aec86de2de40f436f65e7d6e8a7484e79ba95d48c7ebcdc4abfa5246c55e7978474af60c5fa28de5445a6d951612d90d5\",\n        \"signing_randomness\": \"182325c546153bd6ee6766a3334fc9b669b69735807caf68cb26f3b9241566f5\",\n        \"sha3_256_hash_of_signature\": \"a10ba059af931702dc67b4cacf875b921b7658590c2152775f0ea667a4ac7558\"\n    },\n    {\n        \"key_generation_seed\": \"f7a37b846380b2c975853da0da4f136cd73f48dbb3b922f90fd0c5a074a5a265\",\n        \"sha3_256_hash_of_verification_key\": \"6a6903a17d16396030a4c93dee45d637cdc82ced469619e8f1d1939451968942\",\n        \"sha3_256_hash_of_signing_key\": \"d2e5c079f283aaf7cd2795b642b4a6f2ef8f27fe444f06e04a78625ed7eb96f3\",\n        \"message\": \"1a2a36ef1a06da8f19008796c7e367cf9f460e365047ee4796c9903202da22b4e5cb1cd8cfadca5bb67f343095b13e22f1dbc223a9e6625c5e9b8cc9ac53073cd9c6d62db2c5b921df3cc7675502ef132a73b27495a7deb266e139c7d2dc7ca6de6e1738a99eb9e0d0a06caca005476499631054237da18fb057ecb8dcf2a0d58aa7b3cd2405a5ca83e6d2f752d3e8b5cdc4aa3eff5a1e5a279f77a8ea5e81672bf763acf22ab62efea5eb158cf562b221d76b60c14978503382493643cf1a3f6fdaefeccd68a489280e9f2d128ca5e59ad080f72677b6863e06909046f11d6a480470281ca2a04cb5fbe49364cc3511a5cbc6ea95e9b8d64986d41b0fc49a0fc6c2ca39844afeb1f5a7bc4beff49e8252858c3ddd1553ed1bb3f15c514306edb55021941cf0423285d5d1f6a6584c97b7ad7dd29f485460198c642180a4fd1bedc1504c80b92d5bcf16ffa20ca186f857862ad14aae2d07135f124daa90cc16fd45baacd3bf3e7c0e36b70eb06aaac0deb5e53ced7b71dbb3a51edb1cf5789b232fa930ffc9aa64a436af278fb8c089a41253e2ca0df3c366955e2d5bedcb3d1282733673929a351554c7358bafaaa1ab6b3b398bf96e9e70ebb3bcb8be681221fb0d53d364339da7318e648c159ce4a406b5543218d669313aadb522ccedc041443f1bcb0c9c831c1e5dc64f7bbe244903a5fae3203f28e034ac8ef6b479dcf7aac9c4b7103704e6d0fd6ba352e76b3f4e61513be2ef83f645c1aea54ecf174e20dba1ab00dcfbfac2c324418864f02331dc7d4f3acdaf9bb707f4d08fdb60a0d2444f0b8c8976ba9006ba1fc7150bfded71b95f20ada0b1a3959af769af3dc55f53bb0a2bc0bbbb812aae2d9e3dc5f3ae15ef62d584f4fb4d6c6bc2924e88e2350975e15b6aeac4e534f845a300399355d3147fe49fb1fdaac7503f60c405f16ecc518124a508dc0729a1d21c5dcb17b683a5d818df3cd3ba3120e63273d271c0b2f72ba9eb0828c820fcd77974ac35623952ca3e9268b1b62427e91e0791436aa6a9d81805c0bacd0afda5fd4d55f1ae0d3ccd8ae6728777ab35b2efc0dd3ea2ca489dffe9d42eea32ab51b995d615661b6ee90a3987709f187a6f68fd28752f7060e453f669b75ef9b30247413a0020b12540521504dde6038103faafc9701a327df9599003b5f46446b81df10f9b54cbf6d2628a79c0e1\",\n        \"signing_randomness\": \"649fde433f806b409f8f4b8c5569bc4dc11abf2a08c5d267561aead172e8a7d9\",\n        \"sha3_256_hash_of_signature\": \"2efe28ddf8c0c78d114f010598cb4a83ec92a1409a654b13f17556b847f6c423\"\n    },\n    {\n        \"key_generation_seed\": \"8ea1ac92ddb7a818e08eaa2b4f56adb157c1cc4acae9ebbd3d0c3a39c1a84186\",\n        \"sha3_256_hash_of_verification_key\": \"b3918fcb29d134f3b51e06fa7dd42c74b2a8ee916fd36d926afd2e576e6ebd33\",\n        \"sha3_256_hash_of_signing_key\": \"35084b313a3eeec945337cc7b085c8f64a507513748cb2a09a3e23936d7cc48d\",\n        \"message\": \"b7dfbd4acf4908a7be207da7da7bd7ab0a731db9c48849fc5e5ca600eff17d171d0e8b465f8465436e37b67236a5050eea516f135d0f27737db8cdbe3bfb6eaf9d75d16fc66189b04b6e547cc3cfc2df754e53fecb39e0b8357bd07e2175542e27420e41f6768980920976ef1b6f4f8bbd20cb5224f4edb06fb489eb501f426f758dc921fb8efda44dbe6f7e9c6d34af0064cb7ca3291b34877aec1ab0999700893ac6d8cc63edab1b6aa5f68316cb1713f229f89e64da6aa70e2c9be76c6c7f8169ca2f142dcd4858b695b6e5d8671c8b5c734d75d8264ef9e772eef8e21c3add91318e6fefbff293685cf400a6f6043ac2559bfd23b31e4f22947e29b2cebf07e135b16ab934efc401f9a11f2e9d15c7e111efcc565e18a42f51222aab097ffdbbc02b1e5ee91f5e178d62e5fee1c9e84fe13dd77932904d8cb1f15e58d1da8f4a4168bdcc90ee02471884f9b4775c38da4158c36aee263e4abc495ebf15164f0a53d608ac6d1a10a697d57c485fd201a26f0fdc0398295f9c546c7496f6ff7a1136b41f3f22a9d32b68779abfe01a750ec3bb1bf539943f69aeef3e55a727209b5f04bcdcc83f722260e2649f8f88594e03e9797a2614377a3113f23779ec0f6c98aa6e36b1160b23150c38047c09fc0103ef87eb986df855d0bbf17cbe114b5f77d9a01f3761f234b76519a48c4e8e24c3a191c0134e9b35bf56c35246ad86ff0bf8def8c21a42170b0a0af65a25dd6694cc1f8b98a90d2b35b2fb746efc6b7575a895d44fb8204c6c23bfb50148ddba7b189122b8e7c982adc3d3d11c7f023f6f6c0deb54c2f0e7cd6179bc71d12c9c34765f85b55f26d2adfa2837078593621067dc8949e2a6194ece084c7e9a2cf57327f695a58bdf6e9ba9c507b785a2e7c5f51276512cc6c8a3ae2dc5ea3457e6c589c1a939272f535ab1c98e8caa70c0080c136fd3e78c736e65eca831856bd8cf26f20a2c02b4a911fe129d8bc4f3f32771301d53549091c1d525cda3e7d90422d353f5bdfe345a152272de8c999c8d920fa1ac17c05fad3eae02049a4cae0295ac46bae8160b6d08fe8a7dce778442f73300aae376e75b7a972588183381cf1b1edb0fea044c7554b4390ccc302f32e549eb18d3ef98545e2320bfd9ddcf77cfd23ba2fbc69fd39d5888ec580f88e8d022a9d5af66381f51d33361847977d8d375269bda97cb596fabe42e89f8a98293fa483f1d50d7280de1907b81d7e9df5bc53e2bed1c6986f8\",\n        \"signing_randomness\": \"7e88d1657a5b59f96fd4393d23922abee93808b32fc218b08d36ad25dcbe5621\",\n        \"sha3_256_hash_of_signature\": \"6a4fc0d11ac6488e49dbf34dd35238850c954c32e4fdaeb4c05529335811fdce\"\n    },\n    {\n        \"key_generation_seed\": \"595245604cb45a94b7a4231626b6d9a53d4de851b122557ace8cba6c32f6bf7b\",\n        \"sha3_256_hash_of_verification_key\": \"5445dcc84f1719d66fec93a7eec43c8cbd3d717cd7a48f82c491bc03b6920960\",\n        \"sha3_256_hash_of_signing_key\": \"7c93d12b784f4befde48314239469ad46a7fd0dae2064f5d7747d9e5e5b0347a\",\n        \"message\": \"d6c1b44070c6a76a451696b19d23fcb1e0ef45dfac111c621ce26b39504ae804a886c3ca264f460d8134ef04c21587be06a0d1c51543f946a9597b155942a6e746675ebcb0c0236589ddfa1d6e614dbb12355a94374beeaf3d6c9de898471be4d70f9c5baf1da3a58643f5f7e2d5299dd49862f9ac6c5df0a54a49c3419a1234d6a5e7b4936c72e53a8a655a26194404ad316f873670571be3e58f328fbbf04848e1289bd76095cb5dfdebe05938651356bc6f030326677fd6b9cdc8e9dd78f7b88b3a15373aa2b3ce10e0c47a8ed0587dccf26d231d154d7a630d914789df820bfe2cc9f1f3b35b923f500fa0331179150095975a0cf82758ca0325d2152cb31a2065b6129fdb4c3db744c53d278fbd3f9e0c7d886eadcc21ff5ef13f0873de0ea2fade8ad5a83a36d61010cd8e6047d7f26164a53de25544e7f07f77a76e0e3ff61a10c90341e7562b14645dfd8841c7f1347e85d2c9d9b3eb366a2ebfd79d0534fc3c43a3f57e5f771bf6b10be30f2f0ea2c06ed146f9a53114dcb52bf061f6e80184df8e6cf1ddec35de90ae8826f98ae37bab28387907c0ca6c38c0f0df155dae78b21d77d2e8a4544403b862d1f94a9d4c8cdbd34375483596ff7aaabc1239f53f00a98a076dd83c58930fa148d98666540601a4b48d20a42273511f427e6c9aeaafe6b3fa3db921180eb25eac1754f864da4a0e4f58f6adc5674dbfece189c47bf135aa066813a1dd129debc3a763949f75d5e7bf1e2556f888d7aebbd52401097434d67598226c2da666010976e60526ee1feef9cafef4ff4186d9d5ba732146882b95118a1a5cf04e7129ff5fe2e28bc10071a1d25c283a3eb959ae0ea518efbc62fa898cb3b6b57d14a6dff5cc9bc6205f65fc96215f9417b77e9626bf4f0e911e9bd1e1a8a51852de13fe5ee828c349ac52491e33c7ac59057c009fcebdbea9396de5a7bf5627830fdc4b7f4bd197311749c53cafc46e919f0aa7f5c99ba5c9aa9048515b364a9cf339e001d1d01c96e47e63cac841aa37e884cca392cd8e64ef66b6603f5158b9b1fba92b67dddf355d74ec30209e074e4b6161ec2343f4417bf56e8ee770105d564f9dd026648e8e4af04a0cccb94a8cdff7b7d9354aa9f4cb8d98715a5b11d30b5478a4f5f7efcb9012cb654af494e673aec0dc666d915ca90a61434ff571b55bb8295bf2780297f5799a93876df1d8c68e4fb829d225ebb9fde10eb411692930bb12807a98b5d40bb6bd448dea15245e3d60c59435dbc9062e0bc0fdfb6b0f0739af7030f4d9cdf76c6f020b538b\",\n        \"signing_randomness\": \"a1c78550be5c7c9495f8f46cb009df8370156728363612c2135b8fa7efccffcc\",\n        \"sha3_256_hash_of_signature\": \"07a07236481037455f119ffe16046d30daa0c4a0b07d938ec55362547b1d0de1\"\n    },\n    {\n        \"key_generation_seed\": \"2d45afce87a35935d2898622ceb93f5f0ea2e45e59defde4fa202df4bea8563e\",\n        \"sha3_256_hash_of_verification_key\": \"21cbc57a856ccef2f7dff6e0bba92b794019396bdd629682ff6826a1c56ec787\",\n        \"sha3_256_hash_of_signing_key\": \"4586148da73af229ff5817882abbe8e94f08f90c17e2b9e329ae5cfe258e322e\",\n        \"message\": \"edb390083f5f62aa4c1890f92ff012569569641ef723318da65d1ab510a1dd74b54d0206889a36a94ad44c0988134af94ebafc36b911fdc1c042d018c0af37c598218911aa4a1091d320fbcdc8daf56470103efdd87ab4e669ffadd779e6edb2a326078e24ca6127155ab793c37b564ea674c661838154ea2562142ebd0f1e5a96168f44fc3d79187c1ffe673e96862da313e9587ae008032c8aef077741428b615f3dc2b5b97a69794f9d580ce7ba3d02a5ec35a673efab5f48983a510a63baf2cbd5d46127ad7d2572303dded20c116a8f67f41a9d20525b827742cd8397e254c5cf4ac1c8a0ae07e599595c80c6dd68182112425cda572b2b8f1789c022ee883b01bdc17743e0ba4e73b5649b03db290c34ceb8abb455f1ed0974e4d940c2e2a58f7600913c81e47346e733ad66fa9ead4164f064106d5576370568c79c2d02b30051e2b1f7e13f082ec04de11ed873af9b259497c68e2c36d43de94e7f1a7a5c10dd5a392617f6926d6e618ae30e3a52e4ef9260b9f8bf0cd7cc24e01f1afdcd9a1ca034ffc74f04c71762a9bad87aab598e2cfbcc7e404997641b57beb80532217c97b6c22be9889658c9c42ddec329f0e6ed208652272592df2a7682facec5e507fbcfe7631c4783867cc89401049d0404f2071e0ba4c353baa8755ffd3c21c89a5a9561f25dc9a4d14d2c5708d225ebecfa40b1e2484c81e8f041e2356e1962cd0363f4c1410444152273ee8cd87146330df8395dfe4c8b0313f345dc9aa7e277d28440f8dab7254ebe4528d114045cf6f9d7b78ad5eb4c8379a09cc5d7377996a2e5bdbde0b55961fe0d3279e1217ad9a8672e17c213ca3745f768aa9c1fc635adbbd2f6e7d1829d8915bf4d8ad3c42ba96d3d3e27f2bf5c476e3dd43b21d3c7aae584dd80c6a45f1ec7d2d52628d8a8aafdf9b5dfdf35415868d95692baaae03ba3361d1aae4efc5f3144af011c5da71392e7ebfe795017a67e6ca3eaa6ebba2fc36358078e0d9ec58deff9c5ddb3476b6468248e632be4159e8f63c82c310001e71760ddd84fcfdbfda28c702d08f9c38cdbcb806866fc3ed58e5d9b24be94463337f684b64403d068e3f0a7da4c9d22f4af8bb4f74e72158f14f33d9cb3f8a90b2bd1fd3ad281256ffaaaac3b90d305f482716379c0ab2366d3f50a4ffde05ee9599de60352955ab8905073a3d5fdab768ab86d5953b0893c5e5e015c0eec9f4babe214e4a68e778cc038907c5a6fc46125c83612ba3dfaf7c442d329638a213148029fbfb3ae16e5565830120724a1b4f2e8c32f7d9a5154ef0677b956138e327fd54d61c8fd344d4a05c5da0e41c9c1127c5ab34b0034\",\n        \"signing_randomness\": \"e5421e4a47360d2b7c402dccf38fb36081aaccaf1035e61c710f6d19b4168043\",\n        \"sha3_256_hash_of_signature\": \"5cbbd06354f9d57d926571788a4b38db5bdf23cf952cfa155b507f8db3567d33\"\n    },\n    {\n        \"key_generation_seed\": \"ce456be86536c1b9e27a2220290e12e7faeb4c4c88f99bafdb68f6934c7d3193\",\n        \"sha3_256_hash_of_verification_key\": \"f7574027d464faaed2662f2e0e8d04db0d74529d610c28e813d9b6fe5b03eb16\",\n        \"sha3_256_hash_of_signing_key\": \"c32814591263340903b0b9e5d4e0e48a9c4e51bc25f2015c14111f9fc687002c\",\n        \"message\": \"52b7f634b197e47c00cf1769e6d634265b4535e3b2878d4bec419466cf29fa0f76e0462f12620d21f956d58b2de98032465d191324fa0990747c0ae813a2e1ef4d0f2bfe509b81da2bd103d7be6909f72d392ac1f483dd6c467841cd02c8b7591e296927916c59dde00c04e0950da6c6494041e186efcbd0972283911878451e71fd9a40d0666a591882603f029e03cb6f6f4c03a0303bf9ef5515155f82d79ff3ccc95e4c91e1164ee4099a5f2e339c988a018a35c285e6a83bf132469616f0f58997e3c11231870c5500628153efc6ce47f5328df63dfef16d26c7d047a01f889dadb62d67ada831b33c673501a11e75d6ed3516c81e1fe74168eecb85411bc5358b31e30ec6301a3dfc995267667bb9ff218369636f790d36769d552a6a5384600704effdfc22da15f0878244d45b44dd1651d95bf562a7f8cf28e8b7adf02a1f4bc102ac5f09a726fb990278f3d6ca654ad0a1499c9c9aa5e265b427a6ee97f8879594be992f5c8fe62fd9a31c2da867021c10fa6a11792780b3f1a29b1dbd13b080e6107b71ea1f7cb3e0ea2e1a9fc1127c89b3c50c81eeff863dd813eac2b52486e257b45f80bab91984888f284f076b2fefc90c497c6995e890f93364cb5bd6cc892539d5e45eca5e93246f1d9a93c61875b1332cd3aac825ea1d5123ccd86cf513b3067cf01ba259337890d452d8b92436a311dbc143cb0f804ee8fd27f7050a0d99988cc8e33ae2d9c7655d20863fa223e9a7a102c9f4e422a66d908b9f26918b707b6746c56ef29744b0e7b1b17470db2c629fe087437ea2cbf2700f4fa66bc25925ba61fef4b20befcf70630b8361df63011a2f29eff24560a77b14b3ff55f4e7a643591cf48fc5f65838c713438aef2fc01264c83998600bf0b88aa4c0bfa4de242bf0c339b38d4288a55bb1ca818a313cc31282580b62d930958142f1e09880019f79d09d103d2471894622b78b73950010ecf609e0d559446ce43abb16d95287cc888861648ed902b5d9d8bc181716d05509b52b3ad08dc3f78599611ef53981885656d1360d0516bbd451b28b2785fb2d6d9d37de8b76427e5e73c4abfc99146dd2d717c18a93a31abb45d4e4031c586e0851ec27d5ca2ab3908b80d2aa5ebc1ac3da7036ebe6f4e3551ac4a48354410014115ecbbaa1b5019faa2f26f6a75ff5fb945d39a4f0359f9048e2dda41eca3ec7ed33a7a471f63a7eadd754a0b59d5c9e6964c4c2724f0e28d427a86e1e7fea842a2183b9525e7df25a3b210d7bb4ae13ae9139ec6fedec759032a0d56cf19d0fe01c0e4f9d4dcf36f1a31b1be2bd432f25fdf3cc5ed92adc7147e1e5d979f0f14ee15bbfd549688f458059fd5b0a7f503382913722f0030f7ae5f849919159681dccdd5e27\",\n        \"signing_randomness\": \"1f6df8ad6527dc2ae361bfb40145251b321edc715ffe1af51de1836fbc6e2770\",\n        \"sha3_256_hash_of_signature\": \"9291540d57e38bbfbb336d9b277457527de8fcb74245ddf6eb83fd9b739c36f7\"\n    },\n    {\n        \"key_generation_seed\": \"56aac31e173d6ba5fb02b15068ccf73565abe55548f15f3c79e60dbb30eba062\",\n        \"sha3_256_hash_of_verification_key\": \"75eab31ad17da7d19f0ba8ddf688609212cd85be7dd6d3fc080b71b0b0e3b43b\",\n        \"sha3_256_hash_of_signing_key\": \"4b5319c86ec40fce9f65c4ce14bb9f42c5450fbdaa3f4177040e70f7fac93358\",\n        \"message\": \"fac86b48c8ca0f2252e6693094a35958d8bcb56d4b72874ed94cd4c1f94d9f1e5122058fed53ef9af3e1538b0e052541de63d8eed6ec9f69fc26e0cf0dd269232456d4b2ed1d15a4607fda40037b512e721726dd0153280bbd53dc599d64ba01aecba94ad27c23f1d61dd53a45ca5f82a3d2775c6032ef5acc75b34315966aa4a4538da22344f5651fed96d89e50cbd1b4a7ef8634e1c8f252ee3c3e5d862300ea8c3a3ea91533bedb474740b8eb4c60017b652361f43d21899de72de7a4403deb9c3b27c077fcd4ad2bb649eb31d8fd3ca7ad413d72be0589c57540bceddfb89d10dcc3a52c82d00a8dcbd4dae4dd1fc4166bc7e736ba1580935eee6a331b417a07c3a232852f3c3ba6c829d64f447059091b284a7d265b16a8d45cb9c977485aafb9a4f32eaec7426e2278c2a16f53ecf92c78717d3533f56361a85030b792cb7b276146cd65b333d6c089005941ed1029ce7a0328d8d97c271c1125e9af2b995f8927e85086febc69808814800efd78664201b6b73861a70e1f95d161ba753ce927794987eb26fa58fb201debe7a002d2218d4f7c2c185bdc30c9b630455a815d5e0b7f5511bf8ea32368678b0a1ff4b977cc80e715eb563a03e843d04aaf2d3c451593afdb39e1c57092b5d0a968ade63140b8f059b17355b125148279d8541dc5acb6c39bf81981787dd1e8f36fde4435735e057b01e11d020813c4bc458cb6cd84c8e2ad8ab91702f224c267c394c8f0071d992c5496a186a1f3edc8859d1c0db26bc42bd4dd5d5a96429b441c347b3adaec3f1c1170d0e290c2efd76ea1783c12670d5671eee434e619325969d2e9473577075224a741f765021b8d74eddbeac77982e293aace3f18db1e594f0bb5e16d8a6020ecc10f86200ad2ab191fc2f86d67ff901027df22e62c8630bd89a506669d44c8f7e9319a1efe170894f13c1da8a77ffcdac96130af3b1ad1f9fb513c624ebd7fff2eddcc4e95bb6d299af7b71f4a7ccda29e125d533ed255b16b7f0393f7b9e14c629e25b099d09c4007c0fbabba93481162a9537eac5a1dd48a39b3875c47c40396c5c92e906a8e7148f5a69af25f725b326bbbc29dc567a4660984c26341e40efbc1c77aa71e82f1e1690567f58677dee8948dbe282d71dfc8a4fc1524f0261ddbacaab911f89002e3957f8c3c5e1ce8cdf10eae8b74eae9a70df5f95b3aa708f8ecc7297b79c3e8510f1669c81db49a4c335ce8d9090f22a19ae4a0a027aa73887463552fd7cf94c5482416d834327d54d467d5f442be6250d4fac63bf00ad3bcecc0b900a8024bc4690ff347bf0b6a62312cd1e2d85cb167e301414c2861b14cf98b9aa64158cfd65c8e56e844012e68ebe289d63e348b2baa6930c6e76ad8961f175aac258911c075a6b10000665b7be4db70fcdb2853e5f7a0834b6bc392b2f7ae42f6538c\",\n        \"signing_randomness\": \"0d9375a6323a0689aba6193bc04b4de406086d2bf5ce263d15dfa4f16dfc20ff\",\n        \"sha3_256_hash_of_signature\": \"cc12babed76f6cd861fb1ccde47e8f84494c10e82eacb4a9960f92127b104827\"\n    },\n    {\n        \"key_generation_seed\": \"faa51c91d937dd53aeeb6c1354e802acd9125c4683bd978e8a6d257e083d23c8\",\n        \"sha3_256_hash_of_verification_key\": \"9532a08013c97879b1731a003ad23aec324faab86fb066eaeeeca2f03c7a607f\",\n        \"sha3_256_hash_of_signing_key\": \"1e73c1c0e9e321d36cdd89ac01475ada72094998f6c14ee542913dbc10430333\",\n        \"message\": \"c24a3d37b2375f2eeb7de38c2ca28f666f0f22fbc077abb0a55f60eca4039ff7f1bc8fa9bc29e5d425230f174e93764153c5a5902ee40a08b93d8e5bccbd4bd721961ff061e2b6d891a39a937aa0cd8882b314a699017b7d366fd6bd4fc028ab73b90709f36c22acdb723615ba488045f49ef96d1db9580be292fcf2bce8085adb931c06086c2b92b979cff0de98f21bb130e16785f9fbd39a02fc1ca4ce5fb47f2a2aa04b9e26de5b98c52023bf540e1e510102b9ad7135d3f1ac795a4723439b0f854136125f711a33cc53a934c321f9f5140346bc6f8d914643a4ff92b2253840608ca746edd33fe08ac7f3c974d3f79e611557e460dcc6b55875c90a4c1cb374045fa64450b5a87f5f9d1df252d59c40b942e14260a7aec9d43ab56f552aca9dbd5bf606ef60bb224a9fff8ab8f509b04c7638c014c8dc66a34f8b136aa6a023fea409dc74a342b18346b4cb30d76a4066bce70dbff3a7ab9d717ea6f6e14d931d40b95a421fd726ed96265cd5223beca7d236c731b6ff3367d9c796e3bd917fbded232fbe3f16d7bb1a49a864a42b0ff5aa038bccd581045a03e7e993378c4fa220d057cc7555a10c860cc348169842a09a7f793e05ab53a3ac4c89cc8a2ae986415f3fbdbde6453b445525071db6c7b41aedbf96821294300efac86f517819253151b77a7f79ae8b772c3bdc5e082f4978dc346bc7f126eb9b607a59cdc3016f4c692c9514dee30d319c7951c2fa49ed5db71e30924752e90b8af49ebd51beff2bc302d6c862d6f697d4bf8b0034f5d079babf857954ed56abaac709a623a00988edeb242b90003146050ec77fae67111f38032a02f6674928c88e5e3be75005c6f76f04bbc1aedc1e4d2ba27f0c7fcc7715e34b9d08bc1144498f637acda89a60a7d79c54751467e5b70d3b972741cca8df76869a7cc4ceccef8db5b8a31a475705a31bd25e018d63e728f65b976a6bc82fec8b0c64b292b854ac3ef98160459a35cddedfc682f161dc982e443b4ce23b6646dc80e252ad31e69a3722ce078da85ec7e8ffd9e346a9cfec7af170db900abc4c1f3b47d9006af85cd32ce429cb2a5683d83b8f71ccd0ecf042d2d873ff515accf96f0c3c2f91ec0a1a4e9abdd7fd3816a80891c06cf0481daa3a277fb08de02b106fdacb0b20028647f85966060a22403a21cf6b5116810272c602581eb8c62d8b7e6e217513caf5354f96b653d35944866aae6c348734cbdfb2798448f61040dfe0529c036c80bd244e6eb1ff899b78b9914ff1b12377de5b4ca866a0700390d43c0513a0e919c8fdd4093d419c6c0b0d82d1fb0e436d666b1d0ae0e06db2b940d072d092108465c6e7395ea4a55605446c290858a55d24e1539d991861c2e3c30e4428672d2e8166aa48fed1d412a841132287452f38cfaa9024b9eb617fadd88714319487aae77b7296d548244d704de34147404e6d134791f1e6c3c6ef13409843bf20c2b1f37e67\",\n        \"signing_randomness\": \"4de7b49bccaac18ecf7746824162b1184cc687ca6342747b42e732beec5b9bc1\",\n        \"sha3_256_hash_of_signature\": \"7247463ef7ead7d284c2f12ac07342239f3229e41d29f20443a7b2483b7a84ad\"\n    },\n    {\n        \"key_generation_seed\": \"c9e7b84385dc45b0fd5dc538b2f8fba2beeca17b262bf0b84aed36d81f80bc42\",\n        \"sha3_256_hash_of_verification_key\": \"206d1d2bf26a027ac30d32152ef7d5e89bb655236c0bd52eff9b0fc3f077d7fc\",\n        \"sha3_256_hash_of_signing_key\": \"774cdd57e1d686ecb36b4a8879ac8a181eb41cc5af3df4d53a48c97934c9a494\",\n        \"message\": \"dadb7ab108c9e46f6cdffefde377c8335295ab09f8447886ff4e4c065118a0e6bab716b17779331d7e7fa6ba6129debe8cc2235f6888e14cc579b3415feadf22081600a0e100a1528e7c99fcdf76e488c2f6657667d89c5a2d74714a29d83bde39ad35c7e787275856a5a920c2896c959304f22146c4e25c97324b6c9eed540c28f82e85eaccda3a7181570e040608826c22f3cc5ac4910e3f81b9434b4cb54ac41f429ed3462076672026f65e6b8fdf57f0367f54859df4e6e05de6b7b2f8fd2cb7c46bd169de3491e5e1f0859a6ad25122c59bc5e503e63d2fad257443257876112883f99f20c7557b5526d1dc38a846a2130a2225df73e2fa22407275cace9032ecdcc9e4eeee6a5b4fc9df966c69d4029f703a229a6f4b62885f12378191a2e30e9319ca6368db61a772e135204449f97a8a73592deb32704da7d87b72c7323ec130c012ea341985e1f2b69aaa11919ae5da52fea795917f45eea86fa6f96245d186d09039c58e26c947de49d6afa9cd91aeba2aba69a7a0428c7ad88c2a6981f00868f67eb7f55ff0daf3b368b883fef0c73a19e0ea2de7ca0aeb07300ac0a5bbdfb35f52082f87f2cbcf09d07a9295261335d4f7739b5dbafedb456f5a1f90a5ce8f40775b028f4096ecf8a73d875199e3bc56a854af1c1df1ad05cc12808ccb450feba2f37cc6bdad3bc0c4d5fbb67f72e067a61543b13ed27c0b5974f92d9050c247aff0324b2ec474fb6fea712e4b5185a6ed0b383dfa6edf2234412087cd76b4762ed22c4f8f6e6f2e1924580aac2576d3ad485e07803749faca6724ed0221577c239c35ade035121b541e46183a2a67d9b4751adcd573b2a96f2b3f4241a9d84d75fc12577f56230ff0082d864ac701d5d9baad1afc51685127c29dbbb52cd606a73c64ee4dd895618e234bda3ddc86ce19b6cadda165d834d4bebc14c1f347f9ce103ef88b3ee88e0fe59a2eb289a98f349458fba2b96b4d020971c05b1acc24611baab72415d646f727695fe1bbca015bc1056dc59a0b654531da618ea3892c6cf0f814c5566b0c310be8e14dc2a57f13228310e1c28464035c3df6741eeba1d91a2dd08aad61ec6734daa46ee7aa7b7f2d88fa4cc78cc69b98facd84e345d891d8eed218a380b650cb93affa2083a7ef7344fcb35ef67f4004a18b3311d0a3961c899db1a37db531ff717a553b5d498b540b87fdb110bb530e200c42da54a47ad3aa941b2b1671366c2dc4ebed26f6e13ca7b60b391aa7c44b029c01b37f80354d9cf057ac35bf7bf22704e2d4442c5a5179a63100bb111fdae6e4a7383e9a59e5624adcc5e96354612be42715791ac0fca882e9a36aa1d1503dfb64cf924fe702701a0e2f049db742b131c045e907e3fe2af7ab680bd58519ac3f1315e771e1c083944343230f2365531649b0474474ff10b0029053823088543b62e5df2e159631f049f752134e7ad06ee6527399ab6406a6f7f030a1a329483de3fc68235ed7aceadd886db668ebb28852c97a1464ee6373e1be95abcc01f4\",\n        \"signing_randomness\": \"22710666dbca2b7b2bc0adc40ab62ea39aa309ed884006ac13280294a576ea66\",\n        \"sha3_256_hash_of_signature\": \"c9cebf774936cf6978b482401d2f17d32c329b1d5a35a1a0487bb286b34e98fe\"\n    },\n    {\n        \"key_generation_seed\": \"30d2124c4d58313b3bba2ed5cd643b9fc41a40cf67edc5ef2a962fc71e5da320\",\n        \"sha3_256_hash_of_verification_key\": \"942b631a53a442edb79e0a970a02f98902fbd4eac3e0eadc57eac483ae83bcc2\",\n        \"sha3_256_hash_of_signing_key\": \"09e6121a05e31210211edccca85022fa3b1f310b28ab3db13af3b2eb38dd3f4e\",\n        \"message\": \"39a3dff394b992374e02b6be191f3198002ed81f8bf6d1f49504b343472f1e86406235d017b8c8db429149d4b020a65a6e4000e22d4e3dacdb453af8bcfd213831b4b481f8e48a454162480d8372c85bf9f19eb0fdb8e25e146ca6438f391818422b69eff846cc972d896ccac67fb98c49932cbc22e6e0c6f9ed220bf388a2f87a1614fcf65ff2b37fe7d25f36b98eb5ee555198216b1745f008ae04430f4f512b229f91f996d138e03d888433727bd890f8194bc26232cb99330c6399f63fa6a61f56f298a1dad75166de851ce638524c3146c9cf4f25c2d48f839767733e610c04f9ead9b8fcf63f55acbaeebc9bf1ff9210de18e3cebf61cd23f3e749b575fdd9a14aa45c3db0fa2abe250a4a4c4a1a94736c13d366ee8758c2715d72dec19034e7c0a21db8007b74b3d8fd722c4c12b50a0566e679d9b66ef709334f357ee46825dc068584ae8cfa0a6af55b8f91dded8fa8d9953a8c88817b796946f39a50c550cc5922e25ecd3b507debfc19259c970a2c32ce1127eed4b29ae33616b67718fffe57baadc854562dfd04f9373e75404d276281836a02b89f26f00f4b819562a14f9064b6bb6c62bad18b77bada86f41d816c709d55755f306824a751711ab1bd1225249818118170cdfae1aa413712033e411d0d604ddb7307ff26069e6ef8ab329bfa543d66dcda427dd9138c42deacfb9d3ac4d519cf81d890a3b8332f30f6ea7bce9e8d8bac186456fab28013a7e0d398489566e17922b78cf76160a4faa601784b82b591d4a9232c5906b4582ae043c5be8c9285ffcd92299c7531aa153d83bacc0f5ea8ab08d0d5c12aa79723aca905d39a9ed5da2ef9ba77e64155fd3a756a7b9f17d0a0bc1dc12354bdeb659154bd17aef7aa3b078fb291a0868151c0572a7b6cfc759ddc0f1a29f279c491d4e7c66bd712bc2215254cc52bdc810f13ae46ea4507903bf0ee42996a91fca7486f7fbe6004529ca0522a83d893f2417789b9a520b9962e1c48b0ab609c2d41bd53b7ac2828a35332307ed84f388e6219492fb4e41450f0f3cd0d6700658ed71a87dab89f33781d460f4d74cc2166591f750a0604ff0c84218636810fcfc36e715e5ea969f2310e853efdefacf91c49a3cca1b92c260c41530d8c321df158bbc24e1691274dc68274b17f780ac7b0f6602286dc553a94629f23900fa510b9b78fa62436832c623c3719ed5954a018d7350bbf489e849d36413833343abff077281f28ec9f8592ebe38e1d9b7ed6d7d082f8190e3734ffa53b14737764a5c9c2828c18c439cf974dd52c24a6adce5362e59dbd114a08402ea9d80106731220ae7160db4fa0d919233e8e3c3efcd5f812973be4d28a11a7e737637fc90eef9d468b0f33f59cc47a531ca246b8746ae9e3059a8d7fb60b6bfab36a0709cf0732b5f81cdec729f25e42be046d3296f8f8eebef258d710faf42d9e07f59e95aa2fda3e49e58828a8c6839998d17e22d014232adc3b71a98fff005636347eed45cdb1915a7f214070a56fc8dfa1b4a306836f0c44f51e108a92e17e1357f4cfd0fccee1ebb611cd343b8a6836472fbb80b470\",\n        \"signing_randomness\": \"8497593706dda52cb9eda9dee199da7fb68c5556dd735fb0bc641808a99b2c13\",\n        \"sha3_256_hash_of_signature\": \"16d779cff1683b616331107f5a712afd8e1028d006dcf5eee96bc60b43f0d8da\"\n    },\n    {\n        \"key_generation_seed\": \"d812f87594f5ec12bb656ddddb3f8463b6fe15fcd698375bde914922b20a3902\",\n        \"sha3_256_hash_of_verification_key\": \"9e6a417641e36d70261aa3919282057e9e366b16133d8961f52a6f5734b68cfb\",\n        \"sha3_256_hash_of_signing_key\": \"f702a1c5615ddd2117c1799f5a7425aa845737a3c6ffa90fbe3a6e048643f003\",\n        \"message\": \"08b773d5344c061ce403e1e86ee9cea541de5577b70fb70aec48a0e2560ea5ebe033007346ab84d2ddbd9608b49944df03166dac9965a5093e7dc94748463f197b49861c86a77aa3ec197e914d16aecc9127e24df9f519f00d34d31ba81f633607cd617ab25e8d11e1452ecc6559e823924797cb0faf6fb655869e6cdfd242a15425b55830334151404360a81a13c2e40939ee64e0039a22d5e4fa85e594db32edb7139e43ee4344eeefd08586a7ca1f160b7b50e3a6944ea18e922f56b92ee4a89d4e192004e6ca11c847402ad3692300e4503f9653baf7b5ed5627ddae40a4f7687b0a067518f560d2e847833ec375a4e62e2c123704a68227395af3ac09de5dd7b8b9e03febcc85cccf926531da2bee8f1e603f0e9172d1dbabbfbad7739c0482503aaf16bb63851eb207d8ab43d3d8e45a91a2e0783eb202007ae323dfefde627110626dd9b61e8e68045efbf495f67c62bbb15ad2a50ab53b19bef450630854d0b998e4b7725782ec55d337c225e3ddea06acb690822e5b9213bc747cf167981f15bd1e83708b0c8b7b70c86aa12dfdf37074c1cd4984cc8bcc8ce4b645bca325d8197b2c0492d31d8d4c1546375b77ac970b9565afbad4bac34a793632d22ba4c7c947306dc0be528442a7f4f8d86f0905b9d79b5650b4b2e23095b5dcdf087a9aa149433e62b6c585c1d38479316124edafcdad586840a5980837e518e8f6b47de991f8eac92064bd505e6f1856c8ef354504edb9b4b82285c50ce3e8750c6701cafe7a80edc76b0934680722ec1dfbb29679b752fe440f9a33b89e7d243ab76fe316d23ac8ec10d18266560a0e900ddfac26305a92ae8f582c80c1d5345e4760cf622be5ebb30163255084c35aef4dead04eda7367219d3beb95b29cf8826d8056c0a981c1253fc53b1f23be14899b41cea50df724cbe2b592d4b3314cf7d286edf01f1b857d04adba32147776980aadbfd8b9dbe9ab554c8004b21a7d1c1959e905e4be8d7cfce5ec539341ae6283dec4164f0a3b052bd9957dd4670578bc7ad2e4668655c46b7e77a126cd52ca662069bd98c0355ea4f03fd368b32085fe24c6c16cb7d3401ed05a9de6300bff80d8d52fb0ac3d6464b3a67a1b84069c329cd6021f1c1b98be347eb957495953f75047ce895e8e63e91a701244ae47effeff80bbf46ddb8dc3af9c8014d3c40e20a4cfe030ab17e0f55f2f54688c9168f35be850e9eb944166ff3e7a3b73e2a754575c43fbb7fbc8c53a72f33531f1221212a9e40c89db6581cd8876fee150d0ca26a186781cc0fe27a0b6ba70fd6bfb45369565c367abff8dc151779e9fbd61f9085fee871fa23e63d0c7b8cdca59e6146d9a7cf8e1a28ccad5270d5af5a03f1436ed632d60c6037a43c8105cad268eb16949b33038b2da622fb51b81c4425fa770cc343dea2f174c9f1f210c855800d7755f6401164b1ea2e6be830cefd812c4ba7539b39ac56396de4497c12e066f31744cb34b9d240d3785ff70daa82326f8785de518e3af7560812e46ffd9988f9a676af6432599af5aa7bb2104c9c039ddd818cee17a17f1ba4e59985b77c92e1bd4c2ffd9c385d84613467927b7772dca30617ca9730b4d1b6ff4fed7fb665139\",\n        \"signing_randomness\": \"ebd393268d4efbb445895a57964e9cba7db2ad6046a003e706f68b88b5ba7635\",\n        \"sha3_256_hash_of_signature\": \"07dd4a54ffb251272f7199ab522b8dd45aa6f4c2dc35a4bdce13aa9c2547790a\"\n    },\n    {\n        \"key_generation_seed\": \"7efa3116fb77a3c2ebe9d82db95b311ccadaf93efea6809d6c8c2cac112e56f7\",\n        \"sha3_256_hash_of_verification_key\": \"03217225ab3f3af2ba8489a6aa635c37a44098581ec9015b072cdc8a5a90de9d\",\n        \"sha3_256_hash_of_signing_key\": \"4a8fffb4721c238529db5fa6ca2eef1db9d07a62f8f6b87877459e55d7df245a\",\n        \"message\": \"ded6232590603542bdabed21541bd19bf372df7930f5f9e6956a2883f96b47dcc65cf3a031c14107fb94efb35e27a833b1a152a35a2f6f85c042bb82834e0655d11eba7a1f9f1145908149891f9461e87c6a62e3d095a3ad6125370b2d9fbcdf4b44584e5a7d73a24fee378758e89364eabafe557bc87cb5ab853364713ecab8fecbd031770c31a1c7de42adc188b8e8650fc06464a96b5dc57411c1b0df4427dedd665bd17cd4ec215a536be50f3306199b74838138e1eb5e15270be9a541b78f9cd324e80ea55ee67ef22b26e3e8d2d87ef6779401c62c356a090eb881536344217e642650d298dfa7b22f0cb40add4eb4a2af02e27192cf1ee6dd5b0573f0132f014c38b88bf6a54d6fd9d107b35077b8ea5fe8a852f35ac7125a62a0e5f1ff9c54e8f73a35ffc85fab10115d22b7b8eccc7f7245d5a06cdfa446eb0ca1514b3a1c04295596e85ce879b6124e3cd63564257d5072cd4974c24b6f8794b1a434422c4608a667f8317fe3d63839726f638524b76fadda100900a34bfddb6c5d0c1e9249b78b89cec12b2a8276965b7ea61ac2388e775aaf4c886086a2ab4f8eb08b2fe516726fef918b7f8cb16d78129de5d0ad4c4084f2201e0677e00dbe2384e670d5184c49f35510d35514e2a58ec46d43f8892cd33b6bbdc23966dc347fd0769a6f54715caf8f5624284c3d6781a525cc743293ab3c8ef6dd3c7fdf2712b00742ae85d4fa41346f86645649864b2159bdb954c28097166bf53a03339cd89f892644f9cebce72c7a34b8682e6cb874ded337848f4019d4326b383d862b3156081db2036cc45765d8eee28eea7ac5ec4fe26e993158ac43aca1a5d5a5f4d7e2f056de6544fa7abe9fed03b5dc0fbbcab576eb485a386632820c21fad083ca9c0b3ffa2be9e8131a094ab04bc4f3a49c7dd3b7e6d0932613dc85491e9ebd2ababbdda6b425bb7625a0ee2d231a16ebe7f3fdf6cfd4d67972dead541216964d2e7a46787604b04190acc191ae83a4fb4cb53e4aef6e56fa347c5a36386f80d96542f82ca1a514d3b45d642dd6a3e1d6f8e55049cebaa6eac319edeee2ce42864f4dbf9d327ed9c88eba7453770858dfa9c23c7fc97f940582dba7a63e0f1b9dc4ee3c11aa508aa1855f4d1c14c429c174c48cfe566e41687ebd36d9319cbcd59256dd4eb72215b2aa0ba4223fa4828539eff1f0870a2746493a6bb64f412347ff56d1373ba3c900910d630caf51622a5ace97c8cb67f3331fed2128e190ca75d3c1b32e619b5c2914f464e190aab5fc1a267c0a5f0f9125f3facb2876a95136700f2c03d1f85371ab79eb6dfd7819d18c831764a92e5d54fc69bed0069de91abd5c1864a8ca6b6811d059f9d5a333fed936625ffdfe20a540cd3ce4a1696925dda05e0ccf8bdc5f742453be9b4728aec2be503bf156faaeaee7e90ca25353503769ba150972540ce39bc4435f059a7656bc7f2950f7a6963fce4d79c25f37ced36187c017bb5859da3de2b19817222bcae22cb78e15026dd0aefc79eefdd51755432e009e80512ca1ae365b86e0c3f638e461c66c610107142be4f23f90536736012cc423837b1cb941e060a43c9cee8adb938d148e3daf390aa0ff309dd91310a6878494a2ddc65389237a58eb2071c4daa1691e6b6c99ee11799bce31ae0cc60deb86\",\n        \"signing_randomness\": \"b7a3dcb7a71a53a71727b720561a60ea580daf7d2574564a163313562881e555\",\n        \"sha3_256_hash_of_signature\": \"f2e0f06f18cdf65c811ac5905e759808a11856e85bd1b23a96ad234d54e11224\"\n    },\n    {\n        \"key_generation_seed\": \"926b719ccc0f0064716a91a8fb89aed08b1d825b1170ca01c5e0b7d3e13e533b\",\n        \"sha3_256_hash_of_verification_key\": \"9e63c4008a256b578891fc9b8210f1ebace8e2908fce0a77c4bd7f73b3e1c922\",\n        \"sha3_256_hash_of_signing_key\": \"79de5eec7840ec28beec1cedb1b6bc8c2eb15eda9eac4cb6081b6946a9eb1af7\",\n        \"message\": \"c085fa2847c9263fddb4fb11f70e71dc1a345cb027f1c033b67a29ebfefa9cedf6eb7beee45a796f87c3424bd1a1593977b04de8526078058b88cd335c06610d237c590326b7726966881fc4059d86f222728e939af81f12365c3b633e533a86e8762e837559a6e7025a4321c11f7f25a7f206e02556ce067fae45febc18ca84405e0cf29701ee973ba648a65bc7ec22cb18f1bf4151162a549307fa81b757cdc7212db2b3449f9000b9ceb4d75bf76fd84d4764c5f3262bdb6cbec7c7fdda8c62ffd1f15acc6b0b72db92d31845cfcbb86aa5a9df223c045e28c5c2b543a942807378865a9f2f87b381c4004b8d7387ed2edddd5a4453fd17adeb2893a5f6708df542a2c43201572a40fc08a3c6782bfa0111047b253e27fd917b636170c0b0ce52c5260e94218f83caa03837e912eb76e918d9a4701708d583854c30c2452f6dd479c8241843e226cfabea6d5ea7c5bdcbcc1480308453ff9bb5da9f66ca06c7edc65419f468aaa94503376255ec349a9cfeef91c815db7735e092facabd7c4731ea2d6db568aac30071f0de24b68b86a5876f0788f03c335d73de93fa3d645630aa577ae0619767b0f1677f014e855c65f65f5281b07356c3d92e5a90ed935d04c17b0d87ead14ded2ae03283d2265dab0cb8cc6b4deee53ae864df15c1ad35cb8c0f4869e78fa5ff4bbe69aa4c6347dcbf4b674d9fd9a4b714c77068096384a98e7b870ff91fca2a37b909fc9b203392402975ae132ab3294ff7eb75a96b2806f6432b8e46ebb31a026bb3445aa9d964b24e95efa56f5fb83a67ae5c8ad5e2acfb4242bc915634714cef4f75ca12a19537fbd784981889fad01dd9f77577639ad8a1f6c31ef427a036dd2934b373386de1bf5972272a19ed135e9d025ef8caab7cee587ebfd35a74e7591256c0e9562e938b7a86f31a32b675fb420e568223507abd4657f000f693f465794fc60cf758a126ba5d7151fa5a37322dc16887e91fdaac1b33a2908207a38985e0c153f476b8beae7624a0719550ee7462b8d49cf01044b4750f958ac1c5f5396ddd0a02201bda6c6057bf01d948ae81df1958bd2e27507403c1132c2e219c142bbb3b1f667bf4f2c6538f8f3420e226df253c318c535ee9b000fb42170884b80abd0cfd074771c74e996c59081900da83da3b14d53f6d687413a6788b5f7fd6a2255c332b131972a3d76a694b84a7eddc0d3f0e08b1c491a08fea99ea1f816155244fb690b8c784976531a1d1c5b70520a3aa56ed94b4983a4c35f74e05f0edd1b0fa6db9a0db4f91c9342289dffbcb8e5c101c372de95ab23b0901d637a228675465a7b928715181b9f20cbbc365a934c6354a5a4a817026fb6246048c229f191931e8d52ecdc30e37f759d4f962570982b590a6f61da3798282487902dce5a07b40831094bc8f3964bcf7214a3976eca886a671fd0f736e46123803d97bed41249c296c8321cf9d9dab5c97623001da32f21665d2cdda16f42481e238690eda4ae8f462ff092a11b529ebf603fc4ba538998d4ea79acca9998a417c0cacd92212129416dc1aee19ebccf26cb1e292ac9384b7a008055cf498db30ed2ff35d5a9f65c67f216fa6d75c0d0ea4bf31a1270f69e727fd4884791a8038376bd21d2d4f8cb511e750ca23a965c6962d9071625bd2481b13b04d161faaa29998e31ff3f8fb3eb42d89f569fabc15575da74f9920895305792f59\",\n        \"signing_randomness\": \"7cf8980058d668e9102f2fbd85bf9beff1b1f211df056eed95e4d3e7d33ea431\",\n        \"sha3_256_hash_of_signature\": \"57f3ace8f33b88cab89f3cb69926d81c8fb2c317b8ed5d7f610fa63443a25e48\"\n    },\n    {\n        \"key_generation_seed\": \"f974984f1ba6ed68664ebfa03c1ee530b32597480db512d5c8008939bc1454a6\",\n        \"sha3_256_hash_of_verification_key\": \"7c5d532776c1809f5ba52064a77d4c03c95f0d75955a7f47f2bab6a87858ba01\",\n        \"sha3_256_hash_of_signing_key\": \"7dfe60874309fe0fb27213dc10d8f0b685752bb6a13c6c4ebd2df2433f93f7d7\",\n        \"message\": \"8eda3bfa96d0282794c90c004bb2a867cfd40fd6994a5f6d72e085ef22478032e3e3f5cb8ec00d8f8058a368966df445ad2e7bab0b8e7a4023eb29916051f7c4149b3c397c9707ae18b6fcc8f1ff7e88aa6d3a3a17ffec60cb736ca3f34bf8d7a21ed667b2454c0b80ec3644344e86cc739cc3267b68b37a4fc6127a8a55e5c468b052b02947bb5bee58be1db68d079856d1d854bb7e5cf9a5bee288edd71f2c1aef415cbf5238033f7345769ea39e7deda72ca3eb11fb65398312777fa4d130a2e01364eedfae92bfd91f777d70bbee8bb9bf44ac5bd7792bffc177f3ba4ebc292d10c885968f66906247252ab10c393f78560d9620cc6be91d4dcb66f220cb4d6eca13c5cae2a2a93bf6b0faca883e8c747e33c8fa5d694673ec90e27cb302c439e193940d5ecfc2ba48afbb443c21eeb0003588423fd803ab8711c31500d5d8e871577c47304d8bb682db4bc03bf859575c14cdb68f1753aeb09ce104236710addda7acc8ce1b6ae06f8a1167d043a274ef9399852fd5e3de6b381be3dd91b995d0f3bae146348626bd75889289e5ae4de80e8998afdd9e4949d2e4c4046025139c2c227a60b91af6ae29e300a92cee05f0784710b37b362debb42de422e15901557b1e18f14e22c861ddfec9dc6ad2919b1d3b4617c5016f93d6e772607d225983c1a7b393f7b91e0232b75d7e262cddec95b23b7c87dfd75d1c0739ad6ee77e440e4ef809b6a64232bb6b5927a7efb39f8e63fe9f29be691d63b08ce4a2ed4c0d2890a029785fcb426cfd8fc76ea77bb4d69182139135845f075c00c563178fbcbfb88fb4b844cc7cfb607dd91e30e0b7ce1a3614cd80fc1c9bfecffe9f2e0193232e03326bd518ade85f602ffd0ec42c25efbfc29096c03c72ac6ac9ce7049f0857270457e8731bf09cbd16567eb3505cedd243906863fc884461c9b5c276d5d97b7c4ec820ac6bd77bc7bd687f7b80b94063e679f06fa6e092bfa4ca95b318f16cb96a361fe27ff3361fa6cda8a04cadfc904250df41519edf18241f4998680a85e8263fa8f5c1c2e6dab2333a988bd7e730fd6393862d9eb48b7aed8b7070a80c551616c2c7e68ec927b1dffb70368704767001b99141f1e254b11eb3c6228f97d94d80ceb42459218661bce8b31792a11eb4a18a90b37eea53d98330b09f6c6a8e136c2d616269f150724ce32d26e228fe2d423fbac89cd896afd17a96b3abb6e4fe735e6a090ec174006acecb39f6981e5c51bbc8b8cffdac63cb27a677997938789b2d86ce5e871533902be038f457db10804ab6a7bee675ac64f2f4b776a6389ef58956d72b4bfa5ba095e71050ec5edca18314a558f7b2d43456dee44cd99e013f6043bcbc1ebb193048b806d9fbeb8074b28143e4130f761b0cdc7d0c555f89ec8e72bde4744f0ece47187ce6b880d6ad0fec4515d7b6328fdea47663cb4bddc21b37067dec86a6f6b743a0d56d1bd05ace04a62c10cfdef15e1aa219f41960dd234f81d2815f489cbcdd60dcc7e246a4b2374f6578965619e773dbd9e34437cea06f2cdcf076a07992299b52fdfa8b4c347619918793a540d238f4c24d5f1405100781cddb3400c31a302a8cdda22e47ccdcda9395900c0e08f80288ffc5ee2a3ca050107210774e76c501cce4f424610ff45c120584a6407abf4dfcff0566215549ff445f7bd6bff9cf709bef335fef22f7cfcaa5df1254f4ecd7e64ebc944bedc86593e0dc72c09a47511d21d08d6c8c4d2669e34d7b907c9d08bbde7cb\",\n        \"signing_randomness\": \"2b942cab0125439642df01ffa1b8f45bdb8f5adafc2b67eb65b804e1e26d761a\",\n        \"sha3_256_hash_of_signature\": \"8d537fecb31ce429f36d3a1852bb403dd2e308ce7900c3ec0349f7d99c2955c2\"\n    },\n    {\n        \"key_generation_seed\": \"86e1d6e47eec4454d08f56472b22e4b38b26583e2a758abbb8708f6029e0b8ac\",\n        \"sha3_256_hash_of_verification_key\": \"342fee17f84ece691f1956c73ff93a2f2d9c3834434c7388493f5cc0a5b4e2bd\",\n        \"sha3_256_hash_of_signing_key\": \"976894b9a01dccfb48d3fc61f20a6f8e81d40f934d47307823186f3ed89c347a\",\n        \"message\": \"39e0263cef4bc67bcabdfe1e7f9ff2bf8b971f5582416d17e99d8482fc5bb178f1f84425d9fb062b1663d67918393e1eac03674e887ada0909ebd7d91dac2d99f1a970bc269a4b7216d8281b8039bfd40fff67daaf5b91ddc36707294dc60e5cdd948187ee1bccfcedb410eae04e1bb2064606c43a975ee196dcd87e28f748176acb2cf76b15375d14c27565a407fd30698427aae7af36bd7403757e719ddeef5ff2a19bc73872fa2fdd8f53cadf1b11b4b2de28eb3f1742b462f6026d079eb71dd9990aa6136d363c675744848e36752c5d78d06f7e54ff98898d0dfaf342cd97fb10ca14325858273c668f55631fdd7c8fdbab9f848170496491bdb0ac750bab2892d457ad0f9b81d3f514311332cb0b249059e3ea72287420f2dc3b4ad889c2cd6706b4f2e71442d7f826f784bfa0a56a2a53020993e28141c6331f96539e6906fcf7044536eae15f39a8586428e5d5c8dc1ef641cb15e6f136d5d3d159ea1f6e900384267fa289f02922ad37499579e2daaf7d2c1dbb0da5065a1babb279d1191dd20c713e8bea955202b1a17caf88e83c91e2deb739e194959ff7ffd1e4197de3c1a047d14a68f0cccafaee0b1455bc8eaae5540ff62e40f4c0413ac03368a3838f37caafb4b096cd0350ae06fedde76005dd53a343d92402f075c7bec4156fec91473fc858cf7d3e3545afe9eafb1dd85cff36c869f79100040c9c8927d981a840de240482cb65bc1a77ff64c41688738a72b4d667fc06e72ee6abb0d33bd24e458aac7a1cde3cb6d2495ed850f247a5cc1f67478dbcb5ba2d1c794692d72af4133aef79855ae2c3793b4800f82a1376873b8779babf32cf08db264efe9be1caecff6d99bef363724ea65876ba49aa8c9078b3cdd50b44d811987d18ed81b3c0c5cc690336124418139bb8c7b4824660c850e02cf10fb75ba4f69e52be6f6037cd5edc2cbb2c5140bddf4705eb254a274fff4463bd0e34599bd893de32b7b104bc11605ea2833184653222444dad1eb06d531fd8d7c0c5477af0d9f85db8e31e8af08eb4c31f31ab9a314c736ef1418ab2698f1fd8e432efcdf9f9045930131bf570da41873d7ed44d0bab11a0cb31713c3df2bba65e8cc86973f35e294fcb52088ff9a5065c897d3590f3b5389953f7f9cdd18dc8837ad862d646f61eea3eccc683a68d39c98e06f553c397d8e40f732cb6243425ea69b8c05880676b218ce89f2b3cc6d57e38749c645ed884813f1127457088b5e5d8a6078e348b777525faf39910cd3c0f073c6b524553688db90bc902003f44b6afadf95de7b4af2fa38f039753a2539ba0445b84f90957bb30a6305651fdb90b13a557eebcf50c04274c482101145a36b87502ab593c7997162d7d913ebea0d7272d6b02f12e9a48a614eb56084cbdb67a3abead37b9412fcb1e305b9baed90867869ed4a60d67a9ce2f402ab1770f7af461c3c3a322a19b7932a65b14d50a510ce33842e7d723ea72e5aebef7cdaa82ed358cb4d645cdfe5e19bf38092621451f644b3d9744f0f6c3c553cb24fe6d0b720cae788ae50b6687f826375e47f1d4b9170111e4cd0cd75f53d4ea097ffcfcac43a2a875cbdeae45e0e7d280932efb9b79afd16bc80b29fd0de032b7f74ba777eab7439a2d89c541cfc18c6d464018a20f9df216c98771b7b5c5ab3994253329a7680ba7960fdb8e52d0d8efe3677b414873d54cec529e69c8a815eeabe124e8162b1c22602f7f6478224d575d6b4a0d4f261a4fcfff643e5453f5873a60dc0a6c3afe5233b2e3edec6e15f605fe4a04ca316781bae347fb81c4878c86\",\n        \"signing_randomness\": \"9279fe8efb68fa05418330f7ba60995539717a2e0a6ac728e3bcda464bee9f0c\",\n        \"sha3_256_hash_of_signature\": \"31960c570aaf5d11313adb6a18a8fc8cb775261de3ccb03aa6858b71d205aaaa\"\n    },\n    {\n        \"key_generation_seed\": \"85d1cbcf839acaae2af13f938f75d49acbefafbd32d2f060e310f5cbdc035762\",\n        \"sha3_256_hash_of_verification_key\": \"257e19d50d33e43acab569436ab52fc69b96b3f57c3181cea24a5d142236eb0f\",\n        \"sha3_256_hash_of_signing_key\": \"4de00ea9981353acaf77f818f74d9bc6168f9d693b9cc6a8cc512cd1afdcd277\",\n        \"message\": \"d94d5c065ee3452bb1fd49996ce73a949d6c2c7956dbb2263bda3fddc1bcab61ebe0828a0eacd262a898f8e390133bf2d174f865be923508beb37c8abd664f0303beab62a45bac9e162bd197921e89c259aea46fe50f30740a8829631d7864034e4904ed7612b0e2e741b6ad085fbc835360bf7315bd14da4e91493ef1d6556449f842e5bddba03f224e8eae8abd48541c4ae349570d38ed92519186f9e3db3d79c7731c16d16c0a2263ccce9b695899b4233e1c7988c10538e2b4c349042647efeae93c3c40b0809b112dc48a0b6795e90d561e4f1d97dc605ecd918948ef821c03e0da8cd0c98bddc873857bfaed789d01e8ee84b7dbca51ca9a3a43dafc0dc6357b33a727ad81fa2a80a86ddc132aca8c1863b08bedbaa8bdcc9764554019fee75aeb90e558bde81834e4141dc2e2683d2b1f6a071ebfb32353b6747120d7d7a6f6e964a4c97f6e72d3a6117a7b4baa1f36bd6d7ee86d14eb3455d5ef7bf158a5b6786e83304ef77e32d7bfa7a0a0c523c27ba1646d0caf5047a091470df7e536144a3ca504f293caa57c688864ff035b989b16d5bd9162330cc2e00831cc37dec2e01e74ecfc182647a29c1e76a77e13d485dce2caebc32989ac0c15f5c2b9343c252053705ed7f287c325706108ff7d5a1496136357b5ee830d9cd793b2008236f05a181daf9434f778f434cb97869810abdf6d5476de0ec47498e798465fbec3366777d6d522a228e9658784a1e8879393c4b85aac2b8097d4ed96508a4ded27dee205bd2da69d4841a0fd8277605eeaa1f2099da4857410ebe818ca8c6f8895584dc0c1b9fe9eae2497b8384760605ff0d57a383b4731c2b76224db9b20e73e8b1d764945d7ba1a9e63e9e7168373cf64d39e37ef075d864b0afa8085636d6e9c9965dbe1bfdc02e2365f368f1c959231bd84255b4be3aaa0bae11e6080a1100e2f3fbd075789e9a8032a8ab8134f3954a086973329132b0930cb1494b54805837b4099fc202b4803275d10eb3375df2e87713dc96f67999dad39b3cfec24720cfed15a7c1e97efe27c94196823fe8bf5fe4399108ed74a51005b565bc39f5a350857533b361e07f5166b6a7c39a9224bc002b9ffe2b681976f998d979af066c84527e46a7a0cdff92b7c402924c2b858f37077962585ee1d0bb328abd4ebc84669fcd119a76d503b995e53931650a8d57d4a0f09c5c0832d893110760bb5601b8c5a57cc2b5542af56dda5ca59ffb79376a0795084bf5a91ca17bf7fb1eb9bbc26ef43162eacade76cdbaa48acfd358eb1ae69e74e210f9073b12522b09049b6957d1d9229e6b694fa07097b565c22c432d111bb0cb3c79dadc954fe930f30e06a1f2b1a9578e7f2ebc473d6901861179803a74b4c26b716526bb3f211bed26da0379f9fca45ef130a53af895d5cee8fcde130eb014cb7dfff54d9185851b16b18a319b1e0e132470b30a855b55683482326fbb76e031920c5cb23f442818b138fc635bcc2e2d95d71258f845cd29d956cc05114e8d9c253bbcdaa1e02e4c36569ffcda5992beac75f6eee96084dc0cd0b3c37b816d5463ec550b043c3da21909866bcbd2e3fa0bd98804fa1d72d873aa048d5d13e099e384f9d75971a05baae6145373dd59851c3d4bafc5f93d579c346b49e4e2945f37a9aecbff719c7d668e4714fcfa096e5a76a7c6b02d3885cbed87e3751284c28b0e155dcb49592e318050a586715dfa99fd0ec0a9747e5e6dc896682ace2e731c00fefea50caa0300ec95652708e6cbd7322fdbe411a9921b39eb426fe4f345c17aac3000f965fa5ee72a08bd999da2602f103d362e4d95e5f57988a93ce09382713850b24ffd3f7ecc62acab3\",\n        \"signing_randomness\": \"94e76e08754c0c9bcfa8726dbc240176486e82eae8d5c5fa6f30adb3730be416\",\n        \"sha3_256_hash_of_signature\": \"9ac1cd66b12cff024b52379f5dfeb858d1c4691ad05b99dd6864abb9dd9ecfe4\"\n    },\n    {\n        \"key_generation_seed\": \"f6c206bd5414448cbb277a55b9d717f6bc575560d6b106c0b5f1ccc59da8f8c2\",\n        \"sha3_256_hash_of_verification_key\": \"3c7100f29e6dd5ba17885af4d45a01bc29de4daab3713a9aa158ec8062734e5b\",\n        \"sha3_256_hash_of_signing_key\": \"090e3bb313e0285685eeb4a5edfda3e294b83ac31bfcfd660f380b9b0ef8f76f\",\n        \"message\": \"a61750e15f2cddffbbfdf39eafbd263a4961649fa01ac38fa8106837a00b5bde6550b70096fe63613118cc29c1bb8edb8ad467c5538b94a3e7646066b131ee522d6ab7af2ed7d87310a526e0d34d8c9649791697b26fc1626f377ec9bf5fc4e2a9f2f263f58eb024ac234e87de09b7e7f448f64fd18d614bc93668fd017b03cd958cfccc097fdff26bb4e337cda75f171c6ad4c42044bb592beb22f6adca462dd424262b810abc2dafad996a92094f4a3c8d08135696e535daa7e0079ba3dbebd7ad83e70365d7b82744f942c45c4a937f2b3edffdde08736bed107521e8a891d83d850407eb65f54d5cfce97d6542675400128c589dc98a0b1bfa931e66b11512fa8d1c7dd0e6fb1c89a52c84e85936f3368d3023367d57ec72692b60fb3aa7dc5578119a9bad706c2f975776daa68ed8db536086f31978e3cd28ed8a2eab4f9e8c1cf6fc361dc07ac75acb54e1e38b7cd368008860ccdfddea3bc26e973456410edd26a2ef0c8fe4b17093b9328293a11b7f7e4046d9460e93cb17c225f519314e349fc4ec0265a6451a83e1b9a0a13ecd6eb78ebc86457765a7e5e5dd7fe7567a7fc06e1a2f0d84947f10d133885c5af886d3ede6371b8c1185ae8e3f3c189b648829b1942fa5e5b018874be5cc8586f48065bdda2c78a813e884fa15269364dfd65d4a08ccc4b4427542930414ae18dd3c2d5ba6630c93fe43a545b6cc48d4fa5f2dfc66dd56f545f49235d8bc9c13b563ad58c095b9079ae8156d3f4a8e7f008cd14b7aff03ee9ea52a24006c2fb3c2b2488b3a16709ca73bdafbc5cca8f2b741cda1983616068156bd704dc83d2c191ddcab017be40fc46fdf0a309e42d2e815a680e5d4bf8a07a1597d6b3717e43b4d1c40810c612c1968ec09344d67e674ece5f2f6ddc51366e5dd57b359744a3d7ca8ec0382b169601bfa3423adc9b72131a407523875d4ad50b3df9d625cbc8c3409022b0db4ce701766495e2feb22ae52060f65343bb59d5bcdbefbedcb878b8c6e8454770ac283a9823d21aea792f1736ef8f37990b01c5c21212f8bd953f86e5a8ec89b1b2f8e783b45a4ece680cef096163fc17dc59a4be6f3b02530c6b12152103f7acc8296aac21e98c0eb2554da84ec2a315e1726e8c6994cf5f9257eaa1433893e744b4b7d535f731c547677f76f9e0bdb8c1a45f617d57faad4ab733eba32abf8b864b10d1b54f5ce2e5b34f51e2a99d5d22d3437cd3634b373741298296fbbfd0fcd16f5bb45b7843efaa8785092217da7b816b50972e7788ab50bffa9258a74e7a00914d1075467111de946d74afd42831541683bfcfdccbd8050a29e7f21143de35054348a4d3a0c478ab8fc6adab2afab46b772f3ee49eb33478134228e5aed845994bf0aa223c1a62fb71fa5bd43fea6c40113d342996fd5d26c0c23640507ccc6188b56164b0169b2b8b6b391d33a88c91ee672d480d3655aea16ab126acb5ff6647102aeb5e503a6b4684ee3f5adae1850c317290266aaa1c896b6305471c1476648519002be66ddf8ab1dd010fe389ff008ace866c411bafee39db74d88e13a4706e29f4aa82b77cda2a80fb6c5159ebc88e954042c985f2336c1f7541e60e2bdd8bc2e5e545fd882df54ce2bbc6327abf221d21bb2a2d5cabb94fa4486e907bfeb0fde58046a26ac95c9aecb62e9e7633b427a6e9c92242b240a9c94b9b202b53075b3e679da03b078bcff88e0c823356b78828b89a62af4b0bab1129aee3106f8b08469e2619cff2e6d62c14a88204453dd9823d080c1296e56d6969d6860b1668934bee1d702fd0bdc2067be911059fcefa2c0199fae47d57014d53c7023b8347456a410fd105df0d07f2254a8f91aa038470dbe86d3f55d516b3253e986dffb0154eb5f6429e4ffab168d6df5\",\n        \"signing_randomness\": \"1a2e714a2def9cad076bbea080f23d62552a0c63817c00d3436c853607d5ed5c\",\n        \"sha3_256_hash_of_signature\": \"902795d2feab594d6e89e9416630f2bd90c6068e6dd04b54373f6466cf4bfaea\"\n    },\n    {\n        \"key_generation_seed\": \"150855039c2f613506775a18046e8df32329b2d6d3ef1745662345fd914737b4\",\n        \"sha3_256_hash_of_verification_key\": \"1652d2da616693e06d40bafd377efe9dfab088d55fa2e95447a5dc8eca662266\",\n        \"sha3_256_hash_of_signing_key\": \"950fc7706391a0666237013191c94ad663f3880d0fcdcd0175c1a6717ea16cb8\",\n        \"message\": \"483ab05f8573d89db5a2708703db25f4bb6a28273763504b8a4f411d00620542cdf7ed20ba16a464427d9c5a4acb0229d94e89aa5d7a3ab07e062aec0ce810cb47ac06f2c545bbcfa5a1ffa2b59a0c4fb3ae65c97ee35d393ce062e056e66b90868447cd3aedf81ffb2f5feecc58f59f18c6039990d0a445150d62ecbed9e038339f43a6af81e26dd013066e8a59207cfd76ae7d8b5e30d87ca71a0ad31a638ced47c9e5df7c08e1c824aadd805083dc1594d8ae6f0ff4e5499ef10b8055608332d8e31d4b5aed0e114108fd4a49189117532e0f0bd1f1f3f4eee52ed4f7831910738ec514ee977236a6d333c9c8ca4e1267131cd4adb05ffd9d1cb062400a324bb4f011d9a5418794a791b8ec4d5a0c05ad5c37f49d4f5c6efdae96bce7e058a91ef24f28f944a3942f8576a17d81adb6f465d210133d628c13e8967611627b8135ae1cae5cc8adcbe22061cb740b92de7b15aeaa16d573be4613894dc696b7636435de1c12d5969e61dfa76080b7916791aac9ef3815ad217af0c92993d18210f3b42b0e1d2fe0569d23792f63e261f8f913b781e92c91858f2f29782fd72d6232cdd3b2148977cbe11700480e03a8d946f51a56b8493c3b3dabb1f94727a6c95eacf3a9160d6491618cdf468e1c57b04baa6f917ce7af4ccc31024151ed0bfbf099f7f55f451361d59658b212d912e37b9d729b80962715359a114986049cbf6e55662c6bd412fb7d7914620c9e15c94e5911acd2e4c11b3bbebf2c63d758d97fddc45ade801f8840fe5c625357c0f8d15ddbb9b6eaa060c955edb76d31b9b0d86b953e34909f453ddcf2724448a744d0cd8ab5a9c1ac640f79032b0acbe497aca54c81464dc423bdfe23ed36e6d31cb3d964484be87e86dee7c0ebb9b5ed65a6fc59e3a77a171982c75a52b265e8149fd8e4ef071f24b0d2f2233943307ce577fffb84e006355f78caaccff8ebf570c0a94de2bb9e053894ca9cf385b24179de7c5c48231964117e401c6d44b54611629eda11089027a2045bfe079927aaa18dcdb4c5e1c9bb18eeccf099a05ee0c67ab43033dce0b1acb4aede13fb6dcc27eefad336f01a209a8b6c6311f300f21d8ed74a6f7d15d48cb3789d512204c0cdf95b20b7081d98f014245ab94250d78035326bae5a4e7ab53096af7951e4f54f99d9ee20babe58c06925a08dbe4f3a6ce910a5f42fc770c10d1c6f6f7ff63f087032a2dff12a7cdbeefa25b01860e2691c9c0330b31eb665346242d1ea1aedfb7cccfce918eaaf0aa4e2d9bebf8ff437df114fdf94920c2fe8c6b8e918390aa3eb5bf33fa909d8e78105bad2ddef36dbf02e1c9206827a374a7a6034d0c7d486f86930603b7f60ac2e4f06fbea3ac0d5a87d74f7314daa29f9216eb00dd3d44675d8563e009a64b9067f53932feda9f3af83be6253ad85fddbd31c2d10928d6963d65e942e2e9f9c75ae3379a5b271e226ab3d7d27012208b4788fce87fadf3b48f1bfefe658db59fe0ccb525e7502643e298b95307da4e19596831b0113d735d87fe96f4b5dd9a506b7146a264784e37d20e1e65a912c7ffed23f36fc326a9b1910491ae501066673d2350090be19d33ff582b1a38c42aa9de0717f735637f486c7ec1e7816efa439bc4a2a6fa0631035c090ccc71a360d72717511240801ff9acc0228608362d429be2f77b77271f006e9e0a63b67eb68aa34e43cbebcc4a8947fdc2b0dd7105c10e66ca44e57598f79501655e0cef238fe9d2c33e563f6dfdec84de19bd018274d7d16bcd6abb97e12eecaceec387cb21d4e164ed2eebf7ac82050d7cdc349f5997f45461e3e1b45e92dce361dd8bce02db30e8df6cfd968027ae9127ace2565d17d892f8a6dd066f29e45578e556cbeb6a7a5719bc78ba4e516d5f4811e5555887faa46b1b42e726ba9381665f8d02975f4808e3dbeba6c1b438c4ac905a549c6\",\n        \"signing_randomness\": \"68122165ec1670505abefff79f9814ffc2b3fda910014c74a98d13226fdfdce1\",\n        \"sha3_256_hash_of_signature\": \"e6d710bc8441da995f340497deee44c94db4a9d8a3b6c596acd1159f48fcaa72\"\n    },\n    {\n        \"key_generation_seed\": \"297958b0a7e6086fca2792324418e4e6c04d3bbd6dc2f9b5f076b1010d9b8da2\",\n        \"sha3_256_hash_of_verification_key\": \"67831cb9ab9a469ac93ea7353b37fbe866ebc2c1ffb0f311d8bad51ed0071bae\",\n        \"sha3_256_hash_of_signing_key\": \"df3e5517b2faa89cacc65c03b8414c49af872d4c3a4d6231cb9596c558e667c6\",\n        \"message\": \"c2c97d523f891ed50c45ec06df80d7ba0ecce255fc26e7572ccffb75582b3cff91a6539f28a18b652081a8b1b60598496e759df76af223b757539487a62c573074a9632069f031c9f3308c79998a26f274e120be0a7209454bbe0121a0a00be997db7f7ba1b47f16081cf20becbaf1752e4d61d6d28b01988db0ee8421e1a7a869f8ae7aa55f0c2007fb68099fb7eda545fbe078fc11dd485debbd761c449cfe06091b58774f82974b79961981fb54cfc7964784336a435f6bd9e840d4563ebe45a757f75e573e37f1c868781ccf856d0eafc22c0fc1bacf42b2d25157b4139fddc9586335a0fb6a7f3ceacdbb66cb209baaa6b55fee6421d3a9318597d310b91cd4acf690b23d28a1a359f6e076cd8508f3431ff4e7580a667c382a9f25ce60ccc7d2cae7849eebfab4a32758e00df68d0e778cd4606a75ec34bf8d9871547929d2d68aae655fdb24894d6b30986a03a3e2f3e7dff6ed3abd1415885291180b34f923bf0022e449eee89e5f0f652c57d61deae804ab839bd6dce84b6a16eef158ce0f27d56dbac6cdadc242185deab477d52f745963ebd71f7fdb86cb3fe4b6b3592937f9329f73c5bbec41bb1ba82d7691687339d49001c75940268ac3cd9c02c5d039f128b5e5ed0f8674697fa968414ddda5583592520f8c0b69da36a4329e142afba9cd2f486a9e07eb6d4aec8886e440f98a2cea76200f9a05dddbf56a0c4947179423a08427e1f165629fa7ef887a4d57026135ddf45b03ce6cec31dbbcdfc09c2bd62a96fad391fae8417ecd7feba89f8b6ae25679d85817901dbd670303684808bbc13df6d5daf69f5ab070ec62eb79b800cae699b853c0b047bbb0f9a7fd9e22868e85fcd9eaa4b5dc59e7bc6ffa6e37bf19de9fc67dbc8896b3c2f2fabd4d25e21e100534252659310f72593f80c5ea537f8deb8e1971278d5a0d2f81ced5c3f69fed26f89f3a7ca60109a4e22af392d71fcdf9cf79239a23f1f83ef8ab7f8802c3cfffe753a20d33942819ab5c81db1763df9b8f4a477b135aec9e4bc6e868167cb2c50dd3fc5c880f33ca8e73d8e3963d409f7ef01ca4f63194220e587460c1c4f689c87a41a2b51dba385e6e44a08530522b78a156beb13b76bfcdadaf353e6f40e3fa6e154a0bce1ef71d722e2171fa523ee17e0c2d1b9c8d6023cf24ab5661731b2dea451a5865c0e085c8031d3618e0379aee26febf0fb23070594fd32ca3a5ef38330c250f16b0cec94d8222e3468464318b2b886d855d87bab46685fc73fa3ac7cac7e214270a72c618d40109664a05d6bef76e9187af8765feb3eb6c5fab633909f174d8217cbc778c1adfac0dbbec1003ca08c0aec0199e71108e0c7dbaea98b5c43aa582551e194048a2dbf737cd463c3fedcc77474532987fee7c4e4037319b7944d63f710c418ca5017a52008345e6485116bd244d07590c1180a343f0aa2a4a061c7f62f6eef32355ac34117ac0132d21e1cc6f225ee3c65169127efdaa343da0f5fbfdb52d9767c1cece64702313cc072c12a9216511216fda0a172b82c689a492aac2e5f8eafb1be32148dc602da2843566f07657198abb1c66a01d18efc6417cd936d84ebdd2ebf70c41e2938f94268d0d576718f4ddcc835acebaaf95d967c4bf77afbae8f1a22287c6ef46f66909217d0e4946c1086de382af80ce5c146617a9f6185e495ba53b240ef5462efacac045331a34da80c41f1a5972d1d3392329681c0062540868ab0d61edee824f4fb51b46e932c36c2f8e289e101e76a6c4a38433884c27dd03cafe552425c9c711a5590d2bd46cec2f5d6cd3b45b0472a743969934ce5d98d00712259dd3a628f15c40663cfa76dab8380431532cd4a9e9d3f0bee2c3f58bb92bf25b64dae027ed81e557832a943667ac6471c1146575707a3a3dad9c1e8255250c03db0fa932188f0acd2cd55c102fcd291a1e3efb0fb9ba5a1c7f53f229b0644161a0d5c1ca89629c8eade714ca70bfd687220656\",\n        \"signing_randomness\": \"87125c4b2fdf6a331c69ae2a8d3629b5a063d03b5f3f2aa19e93983c5251627d\",\n        \"sha3_256_hash_of_signature\": \"9a1e80263edd684e03823e5d17a7a00e4ba4636089249542683cdbc5636dbd99\"\n    },\n    {\n        \"key_generation_seed\": \"f615b0066782625b1b77e393c8da43717ee497893e8b67bd653bf59a72989d18\",\n        \"sha3_256_hash_of_verification_key\": \"a1dc8e8c804ef605090cbee7731ccb362e322e520feb06e82efcbf930007ea84\",\n        \"sha3_256_hash_of_signing_key\": \"9d93951201f378e94a796c7f336c08c4bc16e534a2a5fb326afead0ed0bc04fb\",\n        \"message\": \"fea548a100856f42eb72d574b645ce22907dffbf8620dc0f6f85f36edc64054a54a677d2ff669b929a7a4ad161ff6d589a31dda5c92c4e62bcbb3936aa07486cee5417979db9d3d9f88a4c9c4b33b264f8e50105bdf5423b1fc13d71f541d5385875c783cbee086c502d7e7708820ab82808c510b99bb8c118cf8902e341ec775bb9a08b876d5ffaf2093b0b8c03d1d1bebe1001d5f8db8105037e1821784880c00999aa5eb9ddba8c3557075e2ccddac4901ad0ba3c2faba644ba92754e2712ee9de323c6e86baa71cd723ee724e33b670bab5fde6c566254b8710895f6d4fd93f970bb9e02c88ddf94c36f2e30b5065e56e67ccd5a99b00023a1ab84169c315a3dea2e02f94022586de0fc42d1b1c9b7cbde7439d99387c09d15d3ebf33a6da3cf7e3d8b66f1d246aefed534b0faf8f1191badfd70211c1f6e0ad991cc77455d2225f03b9cf801f6fedcf4b5573f603bddf3d73876a1b1b954a5680e209f82f68abac75c207eeff8bf01c1f6ea5bc261ab9213097eada642b0c4bbb0593953923f6a624b4261ad656dbfde3db7ed1b7faf1f2b275559ac07b2b7c1bb492b4393b3d24ae7b57cc5ce8304c1b4cbf006dad7ba18b75430029679da3cb922f151e83823c3906269c86d6968a1f46aa6f0bd6ca9957ae99ac108e9aff54cb62e131ed9cbb6b94d73c599804f875d0b54215e22b81a95e78e3fef495fd02ef6a38ff9f68367fc05bc83db2a8e7992d216a2ef6265165299b838cad3d7f96e7df0f2bb09c103550f4fdd7c4a96097f53f13c1f3837e70590dc06ef311ac98f6b6601495e5858bf9279ccc953c0a448e316b57cc06684edc336368d07aa8b3685c680b3b57b25f663f4a79e6056976205f26fa9c2680ca86f3ce1285d92a62786ad80fae96de3f6b1723d424366d3e3149460586b8969e7e97610366ccb414ce4095caaec156cd832b4b217ed2ce69759ed4f49ebc0f3fa6ef0b66ba513b137200d00bac52758d22ee41d5158090aca22e8be28866cffba3fc1b5b70cf170bbf89a37452c2fa0ff22a75dd8e0354e9cabe990b40539b66ae8f65e6fdb8c75965904ddc1dcce2bd38c8749236f493e9ece946d6f4ad4ab64dc196c17358ac7ef25694d615ccbfee83bd83714e2072f3ee40bc51b607c676babd3d60419a7f61d1efa21f62ab4c17dea5a5bcac70bc399f9614502d07b40b7fa1dfb1851d49fe91078bc7b9b5d796f35c9bdacd179aa2cad05d972963f1c68f6ac1e8aa78a432e25fe3ee3a9970abf6e7eafa7ba7ddebdcf1815182c5f357d8b562f237ad79a929bac1c5fc9b6eae6f468bc3b984a3f3787d41e545f03749fbfb26e07efc488fbc30b05917fdc6f30c013e0ca2819c4c0959a4cd28b82d99721603a372e5bf16ca6089af9f9fe0562a6aa56685d77ace87240a394fdf7b6cdd368fc62ef883f72c8faaec19a905f113f8ea72a8d2bc2200b1d76bce095ade171553c3b2b2a348a8e2b56b00ce5c2b0f86a283a98a4b9c0d447e54002e83ace48d59a8d51ae5c50bd60683b0433b959908b9f92556078cf523d2e9b93d42f2b881605523372bfceb8c59488fc5fdb2e2119822f64bade9db250a4ece9a05b1c255b0100ee21499d0e1eb1923c8cabb9061860642acc3d0e3084cd8a1df37bf2d96c0decad45f7a141454d2f20c61b46ddec91f3bdff101c561edc39b262175c62c6e8b472b41f945fc7c8c293c38b44de35649491ae610b3688c49ba19585a9d2d4e914aae2ca2cc1f716769f5f1d1eaa22bff55613a22d7ed2d3de291c693df02cd5d2c89f9e02b361b0009c0fd6d1f1ab90edab25bbb2cbc97fac1e00e80be4a460c168aa8a8b581ec2009e0ff1763c5bc91877ee675fb13b13e4d60b6c440133b216f440d5f92fc3200ca683bff6490a726c7d890f092fb5b8831a8967313866bb0bb5b8aab670eb6ebef5e7d412dbba1b7811f55f8ccf5689e91f705c33c226ac34d8c3d7c4278c84fa67d9b2b8db38e95d2a96b466358ccfbb171cccbc4f92a8264178e0c599794a2794063b0e559505da55ff95\",\n        \"signing_randomness\": \"ab83d8cb742b1821006352b3ccb08ad6077c25b6c16c099e2128629f89f36336\",\n        \"sha3_256_hash_of_signature\": \"46d5aee81f05f4d1148077785441451e7314a0fb5394332cf35b8e48333499ca\"\n    },\n    {\n        \"key_generation_seed\": \"c63bbd7f702fe3d08f483f6d441319ad34a6e2e2fc0ed7c79b1a4c77c45cdd12\",\n        \"sha3_256_hash_of_verification_key\": \"903bb6f4b97ce2a028f9983186be15ce62f67748aea48c5e13939711f377fafc\",\n        \"sha3_256_hash_of_signing_key\": \"74b0d0777fc8b91a3473632c7f4a3c9acc58fc33fdf266b9537ab206f36ea251\",\n        \"message\": \"fc6d1b1154cb1bc604cd0c9addb0557cfa07c4fa5f7517cf522e77482946144297bb9b3594667db564d35ccf11acf9e2ff88a36b37aa1edbb72e5e10fcec251a3d250b250c5646baf155997afc87cab89cc92b3945cb571d461b4faeef726b5839e3c3c0c663153c2e5c83246649aac25c0d49674638fd0c6fa046f7f60574d37bb4941322ca704fc09f99d2498a7ae054ed1d6f40479b91f9d7a746d9f4bb5890bbcf2287a6439125569fcc960741ecf0439998f2c4920621db8cd058c8efc146383234ca22bbda3807ee67935d4ecc2731d656b5a4d4bca6ffc9a59e676d0138aac426c3c9443dd3ad638663125d153571e79d923ddfcdcdfe0d0e0f3d492c4e48d21b7266df9677e8cdb86b37912fdc5fc72d3e450ed802eed8709ee82cad95551c5699860f3cce669a6c42d8afcc9bc122a3437ab372d109c73436c3e2018a28bb37fb484b95d50913c28c923fecc274c78b1dc3609e5d1bd9c93bf25ceb71f8b37d3a4c026f2226b926d82c29a049e9e04882b1abcfd7fbbcd2027109371bd5f6ee9f0ea2d37a5c42db546022c0b523b11b9b1d6dec68192ef0d862e0bf9be949652175572f8ba28fde21021628eeda9a8ae77df16176df55b9878e077d04d821bb7ee73b17da0495d9427c9db743a11a15817f7cb624c997ad2ca809c124957823993aa1e000fc6bd4671f769e54210666c78faeb13e8a92b8aeb6207b602acf9b5e7051889cf54c698bfc461749ec00dc66006d58f8ca0b0963c3caa6c6106b12f2f05cb1298c1ae9e7c4267149a060f4a3d50d87cca59f0dbc55d261486b2d9f92cf0c17faea5dd08c73e2d5a3e7c6cb6426c90f5fcce79e4b69cfd49a7dbf07b17bd9d98d33abdbfa8b92054b3b3f40a8685319106176902a8d8b40a67a75755a861498e7badb38ac469416250177448f773966b909edfda70f0110721f946fc200514ee3743d6ee8b4630acff8a3f2506857a72579ce65bed9219655217fa76859817ce24035ac92efe3e958c98c9637b8d2ca81480a22a2f736965ad12dd5b672361a7158f6c4989fb522a6c1525d540aa097fabf302c4accf427c8aecb0fc3c81f6477ec459754d024d236b7e70e4402f38ce8bd99e22dfd21d19e2b5036337d1a69aa6e4c9d7dfe3c070f994927b952d073ad3f60a55a9fb787f5f4740f78646a449b0d13da9e3a4dc32b409d0b6132c3b2aa5c8248e6e27637fa27b2220b513ec83777bac0ac03b8d080ebb366b77b219b1bc412a86f235b96f46e0c492f33296b86389adb4f20b62dbb80c7734fe9ce7b6f6a8666369182ced2d29e36270304646e0b494089615793731e48c23c311280ee3d5a6d0fcc4c36dd96b8c3f281d3b9c724f1f1f1cbb354e2ce1a8bc1e48ccd492e19769ea16a5392a66dfd8b40703dbe24fe20dccd084318ae54c3562385fc335fdf1bda0291d453ab4cfa83a7ecdb1bb200054b82b567aed699a7aa5aaa732b55f22bba0f8a15aac5ff95d1bc70f50a7d2caa200e586a2cdc9c798eef6fab2e0984bebc43df96af7e0536ebd9a807cf7677023ea70c5a6797e94b198c926365e6b199137ba47bd433ed370209fd6524e3bf0c2b76cf86c6ed263c4e8f82f830624b8e00d62ff4347bcf605401d25c5ba3c960719ea4c50edfcf271aa0878ae3e9712f005d2bab9e964f434de7277d537831dc1a0860d1ba48c4780cb16a492631abca18bb9c76ac56b60a5941547cbd83ab4cfea8eb640ee32aa8d45b5ac9341131e8e58358149936be6bc86e91d12934bedfdb4a5bff48dffba7c471f5bc54fb1c7f6a39b2c63a08d59be362ec0660bbb13788bac3e8a809e7922319ffdad1301d53c6698dc5e6031ddd974a9482d3382f89bcb2da568b4cde8c02bcda8e98fbe7974a052e254415967445e0619f4d4085e56d9d9edeabb37c2a7428f3a3a7110aa0a76a6f99c9a7580b0f96b75595acb864195aa59334d8c2a58b54d30865fe3351d069f92c024b11521949fa1cc4693cd4d0db53609545e6065e67144042d6c6511a04f670e5983372dc6c7c24e26bdbeca14f66f7042bb1237d1a6ae873589b405a27b5f7b3825d86099026d35ff48bcc86\",\n        \"signing_randomness\": \"75952fc4ef96f39d24467bcf96afe6c79b73e4aaf83d5065586bd3b2f41eb34f\",\n        \"sha3_256_hash_of_signature\": \"6bdd269304dfaac71e546e912bf8ee9a078c62f316e8169d972fbba671ca9f4f\"\n    },\n    {\n        \"key_generation_seed\": \"d36c8a63c673a9ddf970868ee64ce879ae51053ac54e4ec22cda4de6d0b49fc6\",\n        \"sha3_256_hash_of_verification_key\": \"e41b5d79d67db5d7e51c56fd86ebe874f5a906c19b1f512df82f98253143af9a\",\n        \"sha3_256_hash_of_signing_key\": \"7826f22ed4279b2acd4c082c105611c7658d27db6457ad57be6f597e2f83a5c7\",\n        \"message\": \"fee74aea65e7d2ff7e4d8fb6464a848fcd1459f284527a584cb25422852b35477010da24e7b5c517f2b155711ccd9fe33eea120088b3bebb07a32b3b2e758acdc9e4c6c7445e250b6875a8d6ae437ed4fa5f040df926846b5ff9b037be3d7c63ed24fbd93c8fd93d6e841101ce1a08381538cfbbc3ca5cecff8a48b61319f160fb94db4336fa8ba49483cd8379c864cad7c6fb5de063a4bf98ac8df222884b298055fd0a382c5c6be926fe1ae547bd190ea9a3bf19f381d02afb4445791666a6054bd3bcce98391d19f5f5f8088f90d9ff44bd8cc98ef311ff6bd844a62e4803c4c4a5d67e6befae0aad51a1503b384c67127dab2e189f3972d5052126386686158b80fcbefb1bfd2e3d28f6ae10bc01650da12c0fc87128a806c05680003e53e5589b985cb2298f584c878c25680868037c4d4c8fe11b3bbf190f1ff63d1fef174e5c93a38cc65434d872f92af13773d979d51adb10d8e585f47527a5d870c4c7f59fe6b4d52f959641d79642657abab3fe9b11ea075898e542fad96fe2e35fbc4f27e3cfc73e3806f8c2b33c5b817aa8e7856149912ee07772af8b2b7dbb7d8a56ea0b79de45b281eca6d71d5a8e8dc1ae2f7aac32c8602ee8198fdc8fba63b4c11fdf229e53ad1d6aacbda72b8582dc80b0d961fb0f9a8cc4a5652b4e30760dc8fee68b5208f5d214ffc03c7e2029fa9ce6bec2a328c6359273845cc8c2c98bae0875e24af661d2b63f49e50387c5461979bfe377a6ec304986df4b4f0540873b4acc9968ebf182ea31926da8441a64130f6726fcdc751d14a14c033cd3f4d86e3b8b4b26bd6098a6a568fdf446cede93bc6dc759622df94d14ecc86e65c6262e1b40f9eb9bc44575f1308524058f66f11289691abd7325c8aea472ac001c1c31f9ba951a62acfa83d79f73d072705c22684c870f39911bd4d647dc5960da9666973706e162706a888d753323a07866d479e2c2175bed6b8c4b0630f7d933b6ca6380573e4735d1bf3263a07bc5b79ec7e097ac21f371edf80e739bbefeea801cb47c76e050dfe1cc12dd9766e5092ed20a20ef4184028c0e499a56ddd23a272aad925685e7902fe22e1cdd8f44f5de8ffb0e6afc70df3924a2fdd018f65d1cf027cddeeee2f05a7bd037c07c011a145af974a921c46b0f35c0e987e30e96030b0cabd574b89b6d30415c62896da62e4fdff79b046c2f9553e4143a998bcb8a3ee0ef627044502a042ada3ca03205daa50a5069b8c398a475a98a163bdc33ad6e74e8f70f3ec9066864cf651bca936cb9a4f5355c3ab7b3b009b27374807efbd81b9dd28510828b8f3eb7c470335cfb4aacd04cbe63021814b527b0b61a508dcc9f6430f62928773f7e9bacc368d6cd08916184b6ab07f05543ea16befd2c70b3297a59514fea36b9c2c86e165813a068ce2b18c0e8a6ae157751c82bcb35856bd40d9e74c78af1080b6e6e8dae7d8ad01958904d97d5e66409673190847be74c645a4c8b3479b1c03d5db5619db195deec71829d188df30bc118ecf69be012d7aea475961f6b49201695240f5c3a3883a57a6f9767c69e897d1d573d3575e3210ad1154ad713b8a94406111aaba36c2332f9e8a27d796b79fc2001d18021e28dfe3778a8baf52ec2dcfc0d686942130e5552c3426526cd1f412d498d585943e58a38f7c3dbe758e5bd9a6535f7db51633b2c3ab0347b98bbe902be1b9acbf26fc4ea09e1b1b8020ef81255e8e7222e0e42988969384a702eff2b54efefafc4f0beec526a1bda1849d7a3e8d7cdf46489ce410138433f7047b7015d94ec8b6f6115a9c8de3a5a3184914321d8fe75037bdea59477e464f09bc7530fb5b9895037f05c239b1be5ff9afe6ca198d5c780052d740efeb726d922e41b7014d3483294085025d1e45db5d504bf9da9b7d9c292f40509c02a46f4ba04c509df31647948a857c742a8530f81056b8ffb8134f06badedd4f7a7240c6132725d07b15f3e7237bba0ea2df96618c8fea4e9f94010e34bc2cc40b0078270e484e57aca1cf1b34ed97db706d1d5c3f1343f4e5e7478fd3f08fc1f4f6a3b9b6c7d0b8f25c83e1a56b0e730241629f103cbf6d96524e86c15f6d5463ed4cddade7ddfc12f41f8905c2851c230431fc124f973e5\",\n        \"signing_randomness\": \"0d35a93138e5f35fa46550a9a455f90b0f8edb5d6e05d91e1a55404403de0c95\",\n        \"sha3_256_hash_of_signature\": \"e6359fd734faf3c9d4e12f42a1b8de7dda8ccb07298060b3a9fec702d2abf932\"\n    },\n    {\n        \"key_generation_seed\": \"55de571ad7ca2dcecde67d05cba02da990c33e428154de3000dad93dbd1c992a\",\n        \"sha3_256_hash_of_verification_key\": \"3224927a0bf6dca481813d4bdb335c6735a93f7d66bc45a7b7afc8c83f3bf00c\",\n        \"sha3_256_hash_of_signing_key\": \"c78b28dba727ae0fa5d1b65437ef08832a8213a17aaa16945ee728812a16ea90\",\n        \"message\": \"2573c27da4531e0b8672cacaf86ea7ecf3d63e982bb933828f0b38806472d5716b25f030940980edbc5e5a8b13768714521f3a543550712a87bc0c86bb8aa70bacedad103f60246290c58826163edd125a6a0054802db69a6686e01179c8d39f45a2a138ef5166bdd28f043848b3dca910c73be78a57c2a884c396902b26e60abe0be6b992a63a5dfc63a76c86dec93c20c93162beec06cd4cd277b20aa1af9d7ac66f72e2c8ae846b71820d2c6dc0bebd32b608bb06bc7bdf6bc7089be4809fad6f296cf3ae70921d5cf34e9995b5ea891ca41532b41c5110b746ba55299f9707a26326bc52505c15b09a8b3ddd1f9bae9b0d67c868bb2c916610d32255ab4a25c4eecb93272b6992a5771662c36bbe3b03c92b81c694f083031c3e3035986e528c88150fe5ba394eb40659abc3f77232b543c6cf35d8aa68a4915a7d5fa946f36e42325abbd92c5a289ef16d7bb45fdee96caeaba4e733783cc106918b7ab05a479ee8d221db705a30e5bb07c3436610aea5cbadbbf86cacb6ccb8bd3612ece557e593bfb69b57b3c53e25998280638d77653d5c4c4b31966d470eeda2dbd3eb8549cfab102b7a7f9597eba4c708bb9a0bcba001fe698a0385edc1f79b38096701e3bd95c5dae7ee5d8a4560790cf4f2eeae3ee42b0fa17216bbddbd6c0dfe41b48398a81ba2a79c5cf1b3c3cb1172a11134ebf26f3e8861978625fef7d13c91570e87e08767ff8e193206836cca3dd9f5d57513b08be1b78791e45683c91460759a79f5d2002ad755a936f82d2665541975fc4bdf42a814040f773a10d655e6fe15ed662434139e5a6e8df960fc1f5860b014adb80d9cb9e4cd6620459e41387378295a8de8bf684f14e825621b1f0f7662a3281c24ba5f2d16ee8beaa3de7580157cfab9a5062a547c2353e7024ba9af1c7f5e7e1ab830a031a3d267c7af883e53145afa936b0c0293e907845fbbf23a70af8079a5c826eb6671b0e64072befd6462af93c8f832ed5633d842e52f0cb125f6f64385cf8847acf287c1b27ecb5d8ef82e7a682a4a6521bf83fe32766f7a312648492b99406d22476e938176b76741a1493bdd45b33eaf52a30f349ba23993e3969951b1ef5703e22be655361f1c9c92d8cc395f751664b2c425cc7f747a2815a15aaf005c1d6e9bcd443ebc869415a5833d9c9b42ac2259596adee12066a2f870158207a056dc344e7b0f3fa5dfc92a9c405d8e55810939bd439901044990fd166367448651876b079155b66f42260961ad3107635ebd8adf1bc7a4e964bb168fc874b4a0dc005b12d465a66837ce6f34af2fd62def5c69db68dd53738cc0e87692a848214e72f5f9dd9dd3b302460028dd0c1d9281728c4f34407ef5cb4e3b904b677986bdabf66f57084889f44266fe217963b5fcd33a0a87589829cb740dce08dfae97129de0fed628d174bee8755f1d1bde59580328d2dec81ee2ccb8f5d5f2f5a426c50ca533d9f54161f668ded89fd3f996e6c12576ac3d3c95930bad6fe7d05ea7bed57f4372b64399f227aa37e206f5b1fed5ce2cf650261a9a140654d4a97f609830fdbfb21054659928a092b2782d3b6fc414c23b8d7beee05bf595b411d306fa318740c51ec78282b05c92d4937c04c9d972675d88bc0eaab8926a38b3ab197e1abe827f373a34472e2f337b681dae2d17b5b74b4e5ce125b6d951a5e4f4fc6a1adf71acf321110f74ac5e5c5970dcdbb4d001e3024dcf980f7cca65ac53819fc2ed309faad1bbcef7103ca07c9de782a0a90064bb5bf75c5ee69c3c0209017359733d0a584db7c9d5ff05505f0021fdf06a0223dc96c664a2744e1de2f9e8ce59f5ae723b46efce98b349f18de8cc4ee5c04ab1f5ae6627a14779ce5fc383391c27be0bb5e3a0d87769d192c009d295b9574b51b84e566f7878db47c7f781ab982a9873832fb7fd17f0dac4653f4265fd8ae88aa82681a54e6a9459b78d4091275c1e683ea4dde2174a2afd07b44f4ae716c3d4958a40873984e790cff8cdca6e45508f3b31ff4e8cc04245d734fc466c6d21ff01f34f37ee329e2a7ee84acfdfac61d35e4b505249d814b23f0d2fedd660f0fa8189042443fd8471a346acf9efb658f57f491f6f5c04090431a8f593441f20063fd34d8215970ad9ce0c86525a14a765cd0287449e54a67c57f7bdbf8437ac91f1\",\n        \"signing_randomness\": \"ba9d1dd031fbe7813fb79c392db200cd65d500201e06901de740c013e98c40c3\",\n        \"sha3_256_hash_of_signature\": \"1c1ea24fe0554e454da761dd14f82a03e821184ac569fe6705fbd529413c0d03\"\n    },\n    {\n        \"key_generation_seed\": \"0121cb502510c2d23e8e2f922e725d00f7b71f8c49073047c3d627fa4105a2da\",\n        \"sha3_256_hash_of_verification_key\": \"e4170220460ad97cf7f240197a3d8e435ec8bf416b5a5d83eaec4a48e518cb73\",\n        \"sha3_256_hash_of_signing_key\": \"645c0ee80b0f4952b0aa38ae340c2de0f995d9313b5c737d67ce841d361dffe1\",\n        \"message\": \"c609271d08b4d1b414885f2056dd5f6e3f7b2c955a0867525298ce439a191636728b093150e0ce0cea186bca203aab20374dd337365f060e321d3e8f90efe9decea501201c06402ad019bcc38f73161583e5e34ff666b51ddbd758c5f876baf93d96be7c9da0c0ddbc979dcdcdd094ba0fb6e7f28ab1314631649de7e25441a3b6b3c6e9597e84b9033ca501a92d84ae10bc09c783b0e17cdce4b393b50a6ccd99ca19176cc7cb0a71f4466b05e7d4e56f4b084373c79fa639b6009d38dde501aaeaeca0399107ead9249fe480e71d1d03096b72ec60ac8c7556255720797940e9e2fff88a7ba310c833c74256416139f8444ee4e28d2eb4eb920f2de600f97de9296d18d1f356744c2da97824cb7bd43faf6fb3dd6112f8d31932395188c2150eae144888aa932840543ca704b73a3977d33cde44d6d0cef72be00de34b3217ad28507b4ab842ed9b7addda78b9b1d7b524c67abecdd49d9dd3818bfba9aa4e6387da699593e63f1131046c05937b22cedbc72905c2a96451bfc06e4605c0147eeb2a4f89d88da57e072a9be6ffa932f7b672cd44ad03a733afd8a826ff1af6f73d2a85edaf68bc2aa351260d31360eff4a63b5b08bef3957ab20aa32103da8655b61d9afcb3450c98eb3c158fee2e57f9276b6f3a3e67b4fc7f4961c014e1541576cf836c2a57ff698aa5ceda8cf57ed872a157364d3296762eab78397b4ed00a2a7fdeb8389a894c9a21dd790f53a780aec446e75318abcf9210821a89bacd20759dd4f930658c4790d5bc9cbec9244d9e72c3b683129cd288aba960d0b6e84c4a76e131cbf57c82c6d29325a9e5558d0cb7ac2e69176e098425b7579eeb9e501d2812b7910132a2aff825e32afcb372f45bff3b56768f4bdc8fc0d32ad5540a8cdc662defb725abba2171c07a101aa7d8d9b0c1b6394d30356c78b992ba8d320aae4279b394e8564a6507d58623d48bfba43ac8ffc4e4dfbc26735984a29d7efbd0489a0e94190389a996f7f7c9b0b4cbc15baf56d76584609b149273879d500ac3f546e36d1fe16ebd359a2f4a01f82d17010f6a550ee20b8645d59b2956ced1eb1c43952a69f02f8ba821727ed6b90240031b67ceed1cd138564b728ec3939e0dabed18ca45534265e78c6893f1dcffdd91a97a8546f4f5b88adb9f5d371c1152eb588da0dcf4bc92fe12d5b44a8d94e07cd73f3b6ac7603a964ab16582f6b6255520e5542bcf8311ddf90ca501d49e888debb234dd1ebc26f627ab9c2f283f57d84a5b74d5c885e55accf162983d5deca6f7043d2b3e5d40c44e715ffe1e7b9f844460e82f62d5f003e1d108539918a5864223d1d43f2a0f24f168b5ff37b17d08336dda41da837dd85cd8af3e0dde6b43223cd786932dfd75983e789794684910b2e143f0623cffa917438219814148fe486714e87553fe1e2806920e6306452d3ea81e9e5acc917bbe5f7961859229d233133ba1c059112ec8110ab16d9cc05376b88f28285cfb793416740594bf5fd7ebe78f047b24ad77a06ba409e4534fa6768a1d34f4f3356a923ae265f0322baa657548360944edac762a25a416edc6d925aa0053e1f70dd35217b0c2969bfb29603923f234b8cde4042fc00306e6aa90b15d1456ac1ea2107f9df7ca645ac24c379901f15044e7b4e428c0e42f00f1fce6468e94b1386d4f7c95fcb7d8033d19648b2641e095fb007f7e86daa4eddea6dfb3d5502700e9af8c3a168f6be0c1f0bad23e518441e6cc494a20240a689bb507ee5be84201359765eba5d72b0827093befe7c4453a82ff716d40e18bbc53aa9c231459f265c35c5b49a569701db42f95d7ce6c9b51162f65dab8500b161343f6d138607b831798bfa9978ce51ae9981783f8d4f97fe173e9bfb07aa23abc10f9bdc10f80b0fee19bd0923fea3f629443143bd5345729727c8527d2f8d6f0e387cb5334e90a293c479397997e59f081cba48781ef19e358e0119d4b43abb64e45169ec889cb51ebec2df2e53f63532caadb43c6d414f2ed9cca5c8dd9c1fbde5919c5465c5a599c00c21644e87f67e4a0893a183c92b558c0037a38c72a81f3f396c72917ce3aca82522c979086caccb610557c67288681afde0801aa3253077341863b42bc83897e1c8896a44ab7bc94e864035a59c028d4003ebd32f7287f46b86a1399c6fc1ad0512da05a8f6a8c5d400b7e5c22b77494f7ebc2fa557c5fdf235be07aac47708398319\",\n        \"signing_randomness\": \"e809869c188034887dbe1615110f5403175b2f597adac25e69b78dd06e88ad9f\",\n        \"sha3_256_hash_of_signature\": \"8cb70d35e78972db8d74852e3f11db0f071686f5d0be65468817ec2ad9e2d4d9\"\n    },\n    {\n        \"key_generation_seed\": \"40e650fae6859c741ba07e5ce0af95b3271ef851d01bbe968b6f6339e61f731d\",\n        \"sha3_256_hash_of_verification_key\": \"397ad1699303356fce14acb5088e8f220920a43d35e1d3f5012fff3a47a65f68\",\n        \"sha3_256_hash_of_signing_key\": \"f1aea5e7d5b0483745bc33e334e626afa4f0ab3cc68abf96c9515c3a88353bc2\",\n        \"message\": \"251576e60f821d78e76972ec5035c27ca4e0f657d3a611c04f18a69f3f9e972f29b9495ca4bda1e092e2869a05d711f31ef7a3107f107c6f55ac4be1ffd75afbfc86fa26f633486cf48a35c97330d24d14b9c8768b4050edf79fb259ef616fdef4e2444c3f7444ac6175fa8894b8eda10e6a0a41e47ad5707cb1e99de1939ae29d70ec893515d311522ab940cd9aba146f1eebf13c768f6f0321603266f712568adb78b3af27d1ebb8a5f0c2e52beb0520c7f3d822f230168378aebf441dbbc60de643f50618c8e72d0de5179b9b82210b9cd6ae8ad5ffc8a9a79d741b4a3cda1f468b128e1236f1f2b3ae6f51a245446a3f4fcc6307d7629e11f5aab9ee01032bdf18e9e57023dad4b73587e7b47c5a9295abdebfe7876e5d3c9a8ac835befca2e806155bc3c3c1860e1eefa815e375691581b6b6f3ecb1c8dad1d3a0bc4153c6ce1b85086ebbbdfedee0cc2ad1a224bf1071c0187085b0defdc25cf0f76e3fa039506c0d496aaadcff7bfb46cf4649fa4ca59024de4592960d53bc8e4e06e9bf24cdb8df97d69153e3c7b96cf9b954c14d355a3ce7827a53e29592af50a2764cdec7a32f431aa0f4e56e3136a422d19a6f4e5f378af9929077229baaf23fbb52863fe2c44b0662b339be50774653296035e3840e726fd8739888a307f08dc1ebb82bbfb19179b90ae5ae47b7561e3681667572ddb72d1f8ee2b91cc81462e1b9913e827ae3a85d767f55cf6adc867ea400d4039c62a472e194773ff61af70cc61999a3fa9c883d2a1e2af7b09671b844fabe4e1f54de82dfc01d96c031319bb4b761b21c52cca211cffffe2141ba66adbe928f735361ea5da83e9802d03a60a839030bf70414905224f916a24305301dd5c3b7fac9231204b21e9d10eb76280d02aba28e95ca7ce005a68fabfb158ca772d14cd8adec2ea3ed2d706c366c9da51a5057e4a0ecb87c1f5fb3ef4a4f851409fd48c3d7a65c881d9050512cedad600eb01608382d04817976ac2f4e273ec0b10e1235c9a2e7651b1952aeb8af1c797c01d849969cae399e2ff38a9f66f9268ac27e9a3380aeefdb1ec58ad64454a151c912feeb7c6dc813dc0874c45c2a413b56e023e230ea95b930df9b62d9e7864f5650edd678373366fb51bc8aad14a74f2d67e046c727edfb6450b093aaa79d2435f1dfcf368bee7180dc1bd89f6eb7dd7fa4033824d8cce42e67b50e1f1b6a16f26047794e23df83ce5be1417084439e903be1ff9e097c15d6710d763c33cf914ab584d55ca1dfc7a6bab252fd84adb093fd1d8db2f205f29f71166689c112d053adb80eef3357f37455425a68b449511e788f1ea24adca70ebec2997a67ffff16236cd47533aa38d1dfc24b0319b641e5f748406005ec7828045413dd5e6cf141d882ab7c5e6a9bb1c952d00abf4fc7d68b02fefccf7c95a5985142a062191bd6b29a21b39b607c70806cd92f53a6925bc9df0b19fd0ae12d9678dffdb64e697690fd727e432ccb778abae022916da40568df8d3ca27b389bc81df2bbbb71e6843cdadff7cda1dcd0abc9c17bfc5abc1a2c90ee69e53bd965de0a8720fa269b9ac015700959787f0cd26aeba5d33fdeb254c78dbb15a54db2d0f5bac71b73d977f43af66545271f63b78f388168e52647e3967fcd4bd6811ebe8413b4fe3fe3fc2d2b0dc0d35686831d0feb839e431a2eae91f696177bcc54bbaec733fdfbe0a3493ea248c39ba6dd38bb965a8161717f5e9266d3ac924a666a4dfd3dc4e7befda8d437ec954f6e5b5ed3b50b7e39e9852c54fe8d737004725649ff5271635a0ab2562f6093a5baaf921ca458f3a1f2ba86072f9fab02a79f62388479148d1603ba7d4637e4ce0fd87e2fef28b79f8c3e7fca51f71d9f27b5667dc2a53dede0deca6da77187533fab7a9a10a4d52caa882a4939a9be8c776739ad740c4f261c68e5c702bc9cde3067668f6e8ca0b5c3e004aba55ad062439f7e5456d3a062ba0c4f2d96212b2b4f626f24f8540ae62cd0a5efd79c18805f58e38f85a399da8f22e7b7106b6a1a5e5004b80ee796d9ee6b6475884a7ebe602c62de75e8b6604ea0e176ebe013366925cb1f86ad66f9af9850b4b8e715ae5fb00c23f2e059c24e4d0f83752615e0183ef19e402e1748bd00a42f00485b99c114016eed07ab4ede272cad3114136e12d5fd37ae38332b7c1d00a605c562d4a84f508e8c204a007e9c2ee4b2ecda538e430b564fdc35649723de3ce110dc69358e63397ac12e8269c7787fc192a1267b142ef80a13644d\",\n        \"signing_randomness\": \"8cd8e6532c0ad6fed0b04317593798a0d89b0234e9ce0ffd5fe30657ecc8391a\",\n        \"sha3_256_hash_of_signature\": \"01d545079c19066332098f5b32146077919686ee1059d20737910d997d30d51e\"\n    },\n    {\n        \"key_generation_seed\": \"83566f999f49ec3b01ddfee80b72c5349b521e9a0f2489906eb12ab909ee69d3\",\n        \"sha3_256_hash_of_verification_key\": \"a49404741fc49a16a0870fa189845077e55a86ded31cbb227e29c80e75611082\",\n        \"sha3_256_hash_of_signing_key\": \"32f6ae7b51c629c24dece308a85e3370dae9fb1caf9be4cf15cbc521535b011b\",\n        \"message\": \"02928de567472fe94e56946816dab6f3987ec5d7b9862ee9b6bc6412199844c00e9828c501281fd36d46705d678294a906a3ce62b307c237ad64636b99d75d11951c29a79b90c439ec25b652ff4fa3b08dea2fff08880c8318ec2f3fa93dd7f271572b0fc79564f869345f3d998b01b98dc8fbba357d6c57ba0514f47b6d588ce42e7a0edc01b378c4725d10a1138e96a8fe645e56835504f0945e827e7e0440c4ce8a023a10a9c1d1d593649e7c8abd84da9bad77e1429ac307fea98d0f4d2b880e22270f2778e9e5ef290c69fd42c70ce2f4a1cc8b7c0f5d50d908dbc50faaed4c11d219447ec528f3551bdc75356b9d0500fbb15cdfd5f3149c224947de5023d8673b124709917c34b7b3cb5e81bb67b93df4efd039b622be255be116ea290a5fc301b3927afdd8943568448f8e4a4bd83276afa60b3b3d9bc00a78a72b239ba13144c2dbadf3cca79019fdfc824bad49ee22b75add7d67dbb167ffb83c382caf08180ce5f888c94005a3852e94d4ba11ffa94429e2ef5761ec569c9691a30e6943ac4b6cf36086e6078f2c933d694aa90319f08b7473bee42c9a0862eae9a9f18bda11595124d7c11b339627d56378d3fa15e7a92aa099402c5af0809654e7fd83c044b06a3c5e92018f7d18490ef6f1fa6ffb021b450605c72a1e9049b5696a9a42b3c6e07c5090fbcba796a8b4617e46d474f78a0693491823ff78e66b91b8d50982513bbeaf9c5867ed9b05303ef1eec138b8c33ad7669df489d3df5f5714a12acc16c0c2b71c119512c214ec340dc799b40f087dbf9017861c8b932263e6f6685a48e873bcddca36c979cea7b5fb2b6c7a9b670fbd909844ce49b2ca9a241648a33958f950bd18719af81a6eead2e13f2e65ef3449d12e1c6b6bbdaa277fe109919f992045c83a40d004ed3a57497adb3a7b98cd642e48ac9fda3a99bfd9df0ba3b45d7442ffa338d80a2facdccee62b26ca8f23c0cd4de67da58ab7431c4ffdcc0255f6c2552020a84d9155c0f86721d2799002309bc2f706bdf12b05a50791c5f308b31878caf11abe9625df4a21ee867553849fd29c6bb21b3d8a5507c7c0e916d14571fee3f13f49c6171299b39a85f5332a78ad45ffb400c22375fd6b2ae27c522ad6786d1fd40da4b9306652ce599e7ba074cdfe5aa8d6cc9c5c195557049188f669523ad30383ab7c7d4c62223728a21eebd62bf19ee39231133e443c0ebf3092667009a5ed59349b61abcb0241409d035151d9072ae38411c73e6c1b474119687b1d478cc032579c0083613b89b9566304268ff02d160438bcae7d74c99e180b79c5dc0798ee62956734c447b92f4b46f8bb510c566afa0e52d9ec7cbcc5f4067f39f8616a299d7787a0f9f1578029b07eae6777142c356ebbd29426fafcbeda4a2db596b16d7315660ad93ee14cbf162beefaa388da56cc37f1eb613dd8075f4a89b5e75f206d69a724eee8a13fea11ac7bd91e0227ea71f9a3df9590c29f2700cbc74bec2c9754ae548ce4611f4d8a095dc6c4060c64ce9965f9a0190f94c413428c7b374c1907e563a1a13ec6c0bafa33743c7ed0b3cfee27d49eae6d32b532cf9076b02de81873998344c4cc0ab257301651674823739dbd4402efcfd959a0ebddb578093ae8ca7c115f1527b25db8aa2ce5763b3519764ff30c445e3af756f9d73f60bdab8972b9d8f0f9572cd58d338625842bcf7251a398552255318dfc31b52e36a44a0dffc5f320e6fc9c7af9bb26cd3688bee72bf0dc07639bd7f62f6015507da26d2611f90adab99a1897a3eaba674b284026b97c59618beed7e8a98b046f52670dca7a647a13d720f289375b54111c02ac6b44f8019143b4d66dc319a78553eeb7d60fe2c7eb1e9f174ce8b47b99377f0cd2f6f8f7e25507f2b8efbf1dc0e33eb30ff7c247fea53055fed21b6597203ca64b8da1d67635c3ea79b4fa066d6e8633b05220500b9fea18bff86e086774e8540c95bc461d88fe0e9501a2e3994cdf02e18e4fbd67fdb3e2b2c9f2cd521b3b0d3a869bf059fd79a3e1b3650e99639492d41da81ab7e5f6759afa6bb50d17c8fc317e1c83f044aebdb4978a5927ae7160895a0208d66c31e63297a1b62c630965be5f91929e8b1f682f011c3cd60b15c3aa3c24952c7fc03b008ee787f3f45a71f2d6fd02601dc0242000bd703b19c2cb9da5e2218185ee2b121ba862af35b37dc934e8a59f540b03eaf923fefda127315b97f1d9d1c2ab47059cac3c1d4550af6b4ab5206ea7f932d2fefe29e3817bd304b9ddf853cb5902dfddff9bfb11f9a13c9b1e4f5b66ce15a2e7187008e9ca35709a1a\",\n        \"signing_randomness\": \"87e7eb83d143825a33b1d67523a9c3419587e75b2e4073d8d08305229a72ab2e\",\n        \"sha3_256_hash_of_signature\": \"f7f9f0c9d58c2c971e90da0240f2ba6c704a803ad8412cf766be677058cb6c69\"\n    },\n    {\n        \"key_generation_seed\": \"13786edf7c8910f82ffc8a4f53b17a1b4c51396e60f0f0900ace8168cbd52d25\",\n        \"sha3_256_hash_of_verification_key\": \"9b6e05ce2652b833049858ee6720ac6f8378cf4449785f815d06abec806f2356\",\n        \"sha3_256_hash_of_signing_key\": \"6ea21b223cc6e30924457d61b21ce02323b250f2fa0566fc5f2331089fb9dbc5\",\n        \"message\": \"0df52d035aa0a90e6b4fd23d928b4d465ce92b9b167b83b1f311fd237b08032f710fb4c8b1b836dd7c5e77bbe59cf8b4be0bc8fcc38cfed5135f4227b9ad3871a497a5593c1cbfea9e32b5a74362651010ad9a1386aff49e0fd8676e8037d5917e356d958deeb95ccc6b34cbddc3f99c46bbeb8f1f4058728e0f91d3a7f3b4579eccb249715e9c6397bfc20a5d4c9d0d3e8c6c3b42fa95da723b33cf007fd9b1a97b405708c594044c6cd4b91edceec47a8424bb6bb0bddd93c0184818d6f3ab612bad46256dcf1710f0635aec88df3393d7e6df61aa488a44cad0ad6fd6f209eddf4555c3d501143a7a0fdd9e1c628bab3d2156f977d549d66ec3fea7634de9417e1d2905ab9e30be6f5504b4d4ec95b8ed7fd133d8fb803fe21360591bb9173b394467ad5a55d3a95b6be0340039172ef63b57348c38929eaf45c28dc4010f62104be89694617a155668fa6cfa491bd3a5a105be22518454a20c326a1f54022e74b2be57da8861a9c6785c0067e74c6973435fc5fe43cef900b2a83994166dd8a992dfe685181ac6a118e801abe70470293aaa53e8ef44b097ec805636fc6624dc5b6bd3abe911a444ace3aec3a19e2749b89b8eef76dd9f8c2ae15fb55c493d81e0916267d56843105a0c01a9bcb9b422394f49b94b0faac7d2ca0cfa3c0b555455142f9d9953a3fe7e389ada151c2868cd2b285baaaa39128930b613717837d78e8582ee914fddbab9b9168273caff96d36e6d3e3c40629cdee0c78284ddd334a6827f77e08f3bf76d8d1050c8367f95f1a4ce5e10e023234552be6e55fa89d5c9105bda6c27bbcdf96f7ef36938875d74398eb7e12ca7c0771c6d4e5e726e31d3dee2be2b2f5670d1f6eaa2ecd2420ce36f8b5c62560ddb46fe6b5bc42a82d321a1320748b6387983cee35e1be2466094bfa72ced4ab520ca5940b75da9df10c1cfd95ccc602e7cce9300b7705496e51e9dbd1aefd9675da5529e678993bd6a72ab4a983d1e151046e1aff297a039317f18573af77ef20801469c584c854f2e7a57471b507340c1a1a2d578d9ce584e6f6dac92c9134c5f09c7087f3a223ec19a864592f97ffb12ffff90e6ecd737b0fb6fed6fe0bd79251a8f71f47012e185424198aba27b818dd6de768a88dceec7fad523cc63590f0d070e2326ad7057ccfb9bab1fbb2958b7d989f0e07c4e4fb969644080134fdf95e6d38221f54d652b348726b67e83aa44eb351909c2220218384760f54ae11f1c09c5513aec505eaea870fec0168d60bbc06c9270125fb2c2d47a552c2e6860972f5f489c78f5c6952a419cecd5cf38a107c4a38d4c4c35883e21629583e0c8ff2e9d86e209d07ef17a233bda531a9fa0a77d2675609b1b29273567dcb0d0aa417d714beaa6371eea7d895a8945e246d577d539d27a90004a642784794879802f800688fe0d089ef49339d3eaccb519d300d029c4bbd25d2029d2a2403c3b68673458488a34aceab2e9213ecf0f61204cb7e8ba5540632fd6c8b0a63ba57935f0a98b863ce53d03af82838485f4cff86d295440b7d3cb933db3ec8b56cc45b84212b4c39b6d1dd2eb4559b41aa346c03d78fa69d6a2ccc6c8a77036ac67453227aa3da860d5b6e6854ebf88533809bcfee37b5b55bf5254f3a2971f343be72c88bddb9a6a63d4177f84782cad925c016fdef96fbde085f345ffe708fc1d3d296baa4ce2a1b864f40d03af8e55f9ef5e11f08d86d36c78b0ae8e42b07701d0ac1e372ac073521b3dc32d0f8bccf308d5bf1e274f5d5c92ea382059591d6d3f6bd81527e68099cdfc70cb095c4780268859bb4f504625ab8b6e90b18268ae9c8f8f5a7cfa0abdce565a46d15adc4f65d19c204b9064952e85777843d70dda2bb816291eee607842cfd085b231c50af3367832cf86f5aa6b485fa360c1e404edaf7138ca9c22ffb1cfd4209e40993373b57b66b04875a872c30dd22fb105822b4b591cc5fc85d859384136ed12d179f576a24d9c56396c343172e5eb0a01e8a2c9df1c56c444553b0e4a3d0a3e5df849656a6188fd4dcd039e6c34451329eada2cb5265e925ba0960589a4de72ade9964219a18e3901effde0848d0d727b62a14c7460375d8f90dda9ebc1144f07f42085435be83e54d4ca8f76f804a3368cd4a7fc39b0553343701d20e9628a8683c1025cc195e055b9898a6a1cf204e4455c75a3624895a92df380311bdd0ef46b8a7e9a713fc8e95140c034162b2f732d3d9fdaf849aad177bdb157fca624fc06adad4f1b48574841bdf44a1894ec3bd0cfd514a375d9f467a82930d8b18f3f156282ad9f637e1c06b467b240b9e9c228fcaad1de8c82a8bdf367103fc736682908f48b5797baae2e01d202a2\",\n        \"signing_randomness\": \"20706bad6985abf12dad0c1f1d3ea195823cf13c60856a468878e739f9a08e8e\",\n        \"sha3_256_hash_of_signature\": \"0160e43913caaf4436b34333b75b353d98a1d2ac30820798bb99c05f4a36fa15\"\n    },\n    {\n        \"key_generation_seed\": \"d98a515d4989ac31071b91361510b609010a0adda486ead9462c8bb5cd9be43d\",\n        \"sha3_256_hash_of_verification_key\": \"48706d4333486c9fda534244ec7e4eb6f7c89e2d76efa8fd9a59a4048e39e658\",\n        \"sha3_256_hash_of_signing_key\": \"53b913d89aea5e428d66ca2d55d45a8648250faec1ebf1648f3993463e1ca742\",\n        \"message\": \"ca643585cc4e0f2c0bc88d604b743c9eb5a51e46878e07bb8becdb188c5bd762309a8ebed41fc02b5a4eee2a5cdb03808d8f3cd91472e7d3a2b6ec5f4989ffbf72bc65d133089c96d3925e91cf67cf62d0dc5fbb768b93acfa9ded6cd8ec81a3ed47ea66a8574644c750770f98bade47d827b7cc1c28e695dde1983ea2528b6a0a1efb50129a5900288f7843523a7182e941fe58699a5795aad32c1eb10c904db67944983f5ce713a9e9af94bc9719a2457852ca5e183d93b69d3e671421694ac1c99e4a78bba2d7539394b29cf870125836080e1dc3258c2ac0c2fa255ea0e8ec3c9bbfc9d082dff7c4a00783f8690d4a2646658f0ab73e473154679e30cac04cf9e9e295f193f57106fb0f56915318a031905c7038b8e4ed0b8967616c45e633e897b5cf563a71db9504d3d69d2fd4e4303a4af224840c0b6d590fab6bad964f60386ddc1bb4a40a534d80f5d093084ee5a4c66beb7732076cf07e9e784fb8d0763a8dd637581732092b69791eec9b49408a14f8e86726386820b1fdaecae86ffcf89fb0ab74d58a30127e29fc302ffd0ccb021919347f377b1cdc837a86d824fc455e86d68b461b7ba60838f6877f72b0173a1856d38c0ced9202d1127c9d6cad7f22433ff6a6e9537513267a789fb439576e3cac99d2b70cba9afc109058696d0e46ad97fdd02a57d3a9179e51b577ff928d09423c7007bca3fe3744f906c605b097b798196bd7f57276e9d86b60f751dd4bf0173108a2d398e6844b3529010247b60c7e2e142fb1afa9fd619dfee3d80f0391eccd728be6fb75f9a2726968ee8c7e7a6e2d7de2d6a96716ec270f7507abbfe84aaabc442a999151db3a7c6c2cb97b209742cde1ec825f261184a5f8242494a29465c0743fa2a543feeb1c78904a7a3498a5e589a353535cebf65228d369458af088689b868b207a666bc768ecf2bedea7ae2cf07b5cf8316fee19f6e876cf8342067cd820ba9c72b34212e048474a0ae1fe0bac1cd881a783c685ef7469764842573e49fb77bf98a755de1d27b4c174eba8293d757c9c13e09013b387892a8a1347b77be648e6b7f00c37354c87aae0f57a6bd697d4cb8900fb8de19b106a2b6236070003e4406e4a5e07b07f20339e2c05e87bf8521d7ba309940a348d267e45e59b730a3a8cec943a76cc8452f61db2af26f6e2b4ed33ef66cdbc115dd1a84ff2358197be860ec467065446b3f5ba6f625238e24202e4abda85810a764bd210739fb0ebf2f968d4e26f790bd709ebd61fa7062956d583e0e758b1ca290e0b3997e298770da13abc1f70300787b4c4260e18b5a54ebd5fdb16f44442448e25ef7dbc29f020736f1eecf6a465d9973a152c45124407d061c48f2b2cfb204643f3ab462e437490a037dffe7df15a392a072b514ef73391554001b1f151ad8d2e3f6637e2ce8fb937d01550a73603af154bfe0f0b09e8855b1f1e0804c7050cccb7ac8348e444bed3d78bb86112f60db65bb928c39451e89cb71bae155093eb4500eb90e39fed232cfd517843e98c27b9e1c23c81ec76560abf19e2b2849333595ded3df05e601e5be77a5b30aac3e90ccae326103f44186d2b064fd7860c37929bce15169db20e74a4bc44c4ba2c1e0c36796bf46854749dfd5e91ffcd31e5579d5ff61fb51457645a268d17119af326438a53f7e556c0b9433997a86539532da5c50dc03a8ff3476f8db4dc5cd2571a22445e4ddc17bcc6ed77f3535a7cbb58aa2d5cc07a1f6126eef3da9c72e2d63bf53134807a37f15db4eb4cae367fb610a04ed1b964d06d794e85e800cb909ad6b3c1e0c9a1e6c5c019e5624c8ddbcfee634b9ae9f2659f897786992e71f0c9d96de449320f556126c83d52d6887e64a5f3f4d0095d236cca96ee1cbea0136396e814289582ebc648a329ef47c949b2feebd9402a72954b8d3f8e8f0a33aa650e0d83b87638e6ee1ccc62224e2a4f7512cc1a7ac3f2b6210cd1c3d5a4187d610aaeae1226671100487a6ac667f829750b22755927eaf70c7f467c55683765c3fa783d6966bc3b025747708ecb8d8039243cdf78c88de10c3630a8db164a6c5004e83c327cd99ca92e8c49bad0285ad9e0a32326ae2b7e125110daedec9aff830c8791259df39b28125ed6515cdeec04e6f56a008619c9a369a50bcf88006339b338d3c8bc00da698455f7ed2ae37bf93930180018e7f941350df7cba4ea01b868ac36e110935a0dca470fdff675f5a59cb59fa7f0fe83fc665d9cfc925d2da9c4d536c8e1800175850def77f8bb721caf72193eb16ea01ac07f8400b09689fc32d7ebc61a342f1502d41a14edf8a8291b308b0ffefaf394fbb18d9a0233dace9b819f8e92cba2cb7f5043f2fe403c078be438ff0f9332aa541d837bcef5540b51ac0c4acd1ee29125f776cfc1c44215\",\n        \"signing_randomness\": \"1b6c9a94884a5f8b3a0f80f7cf0dd5b2e87419d36e23b6b7469f06a00d15d1e2\",\n        \"sha3_256_hash_of_signature\": \"d3689ae305ffe7c46f3419bf3d80ab2b5be6bf78aae22323116fd2f0e9ed7486\"\n    },\n    {\n        \"key_generation_seed\": \"f1046bb07b139779113a952b97c75be064ae231e5f2b0f77df864cf56a54e942\",\n        \"sha3_256_hash_of_verification_key\": \"53e5e7edc94f86605af6ee7f59f63316ed84d621505dbfae87341b319f048379\",\n        \"sha3_256_hash_of_signing_key\": \"e6621a87839b655b6dd7f3767f5769d29df71aaf5d9316895b3449535b66ce8d\",\n        \"message\": \"d7e52d67ab8dc10bb0d85a34430c04b85280380c3aac35713c0177713591bbba55fb57503af521886632a721dc0b6239f88c8ca954117841273880b66044f6bc6227e4b211de3b437ae1942206af8c929e5e4f78b42f7578dc3479d4485f6c36c558d0ec651eca4b4b108e9aa13cd218bb48da80e375f1a4dd6a3867379cea41b68d8a6cae0664c83b58600f2e44ba93a7830f3f142de0de1878860865acf0e094e3d0cc514a0578d71a82ea6ff14454841750720e36d403925a1e58c2571fb9a942f7e8f00cc1dbe6db9c48fc9132f98fa381b66f3f6c116c6f8b3e6f1b0298efddfe4965fc0f5011d13db4fdeda685fe78cab6cf61b51d52f9b965d7ea9b4706dfdd48261a3a804a8834485b8d7abcb7fa7487a1466c2b3600d4166ad88b08268a0f9dd693408aa58ec5dc084f874f47ce8ec615cc0dc1b33e74e1f049013ed44c79b8e61a19960c2bba502ac5aea194fb9884fafaec0eec731fc8136e56e248a92d43e41982add61c34be49abeb39d4f0e34773411d424419269ac10e903c693dec720bce2be65d71d75d860d01491ab70fe6282272737419de1fca79d45982871d0a149b681cfb55e00f2f9960c345720a0458d46e0fb1e6b4d05b4bb752df04c0f36d26b5db9b80e9cbe9faf16f00b35a1a7dc46586eeeda0c507eae7d1a58bba1b3a111579f48c3cd92a27cfffa754b12d98b10e81ace5b9deb19820d710d7b0a970728a02c6d83d15b774bb5913600accccf3f7ba83863f5b88f5f02b89cb1b2c52ffcddcd744f7ceb35db5ea5346fe19972ab3e990eeb8e024ab316e25f3ef3d7f393802e17bdbe7efc4c681336b54a81833bab95a5804995e31cf0f91b5c6ad86548bc5d62a43d561aa1a102fb199fd78a84d101d3baff8a3c12fd0e679d7f528fba0e82e0b0f6d0f57db79510b8dcd113e822284f4631e8effd01b7be120c9b6d38ce5a092c37d4b6c97f3c52bca26e6597512d5666053923a579e2e471a7d74a4e65e637088bd06bb5da767619ec5bde50170c3530c26b8120727fda9d59a4bfa081870ece87b75407a1226934974bb58ecade4b75f2361f6000f558663d363e1b26210332b351feb4ed09bca7b106cdf561743d6d7d0f06378224e59e54ede84a0c27de53cb99909282585a498a7adc6af402c2bf024eefe7d8ec6dcf528a41d6cfe32a3ea7502b144a4aab6551bfbdf39dbecbbb0edd6e97ca4a95586e9825b065dd0c2a5893d246c06dbe6e8a8f5df88696fcf8807abddac0dc765033614ec55b34574b67c3e25779095e5858e8e4aae365c8769376e2dabefe3c76db622e76670e19fe3f019c28afedaf822a39f46be6da4497b62cb3b5c97f9f13fa9312ad0028f127632aa82d0cbfa18b7646bed39ffb882a69a5c868bb11d7f0b8a1383e9be4c7a623f3a0f953dfb24d2a3de2186a3c2629ea595830c784e6f383d51d2ed61b4c353e97121245be7b4c7bcf6ac3482dca63d3da06c5df7597aa0dc0636ef07f95803c3589694ec6cbbb2d04a9d29a5d90ea152375d892ff61a428aaa2f72f0a20e44085bc87e27ee03cfc6739fdee36efcbb276362304b90d9b69993ba460957c5a2a05642b4abb837403681167aaab94b09cb4143bce125fd2f3f27b70ff02c73fe7129d084d2cd5c3613bbe8a8ca1f04335a62058efc11e2a2ddef2e0287aacf7efbb1f48beae21647134e15e9dd8549cbf79dcbf9334e6fb3cd22d972d53a32e40129ae75f90541c7f58d2ce03c51d2690cfccba192cdcb47deb56501ed309f972697bacf9e63d1f2af0bb42d60dc481e832f75c242012f085990a527a23f93dd0402e6766af1ed7606a6928885fc455f4229d8317a727bd1c4f62f8d1fa9d8eda27fc45d7571ebeea8d98834f2a200e889731871b2ef3c61bfaf4912d55e237e6f1a9e763d978a1cdb1afa2b03cee91039e071a5c9742f3e74d4da799e14c98eabb0a53602ea17a6bf9e421a0ddbc873bc8698427d6c252f1251eda48603169514b9906cc989fe66ba8ed2582733e43e1cb74a61fa4c432054183fb56d0b4d234980f44062f1df1b322b4181ce0b3ee536958940c3d23c3bd756d6a0af402e7ca039cafb81fa95b3c773840d0477da41c1cadf5445c6638cde2fec85004a79023a871aa84616f29c716a17c38e60f9d9112cb2c29d8ef5dd837453375c47498eec150299ea432a87cf8dd3a3d6c91f83f6313f1a35aeac8e0d805c7de9753fc56c2392432ccc434f8f1a7ae9b4978e00b7471234efbd05a4ce5697a1798819605835f5dca8460a2f8262fc7e1c650b4c7a658b70d8a96ebb09982f7583550e45028382ed1b5721bea285922bfc7e9ec904c80f0a922143c38a86e39d43559bb14bc9d203559c37fb46b6cb0eb205df22d6284aa899c1a3d65623f2fcd6ecb33de5637eea275fd32dac00fc2e8c777be53bfd5294c057fe88fd390dbb7ce8268349df80f3f87d8a6563cd\",\n        \"signing_randomness\": \"a4cc6b8c154f268edd6f800e85a3e5f4dd877379f1dd9c6c6f2983d3459f1584\",\n        \"sha3_256_hash_of_signature\": \"630888b618d0633aa91b4680165004061fd8b38a25e8b504d95b988b7664be6d\"\n    },\n    {\n        \"key_generation_seed\": \"78b40fe522ee9e20e1d52f56109adf31581ce92fb87473ab1bf7d976c2e4bb13\",\n        \"sha3_256_hash_of_verification_key\": \"b04758b35aa1590c089c421ca1f91577a359952edecd4beb329956858bdc3c29\",\n        \"sha3_256_hash_of_signing_key\": \"f380037fac442cf5bd9ccc17c37c372319b1fad216ef5d7217dd8ad9e1a12ac8\",\n        \"message\": \"80cd697a7c9391f608335ce26352d7849d9b16b914389bae7f03625fbbbca6f1cae3f89119b5c0a77e52e80b7cd2e8e3dbb99ad93137ba814c4d977eb2045e1217013ed2ab1880fc30a8144e746b6d033c46ae7861cac7b03950b7178f0e51fb705d7c76c7009c1597653174db8cbbb919227fc94884b7aa12951fd40487124f0b026a78b51ede51baf7f7a350c0cfc759a8543cc7c4376689cff384631dee9d261bf6d75515035dc0bba136a8fee650821e345909669894639f69c55f9ae507676ebe93fd3a4ce2f72c6eb5b9d50ccd866608fbbc3a5fb9aa66cc3def83c6dcafb55d55d494fecba7b49db71e858f001e2b1b0f899a7dace402822f28152b926f07a771a5ea97c532597df109e3f34d36fbca89ed978bd26e5ca4ac063c48056866da60623ef1179e166e26f7ee8b6a6b6be218869202cb9d157d86dbd9091d65f2e0b88c40addfd7c64dd27f275d53c4893d61c2ead84985e0af49462284ec6aa432d3f60acab1eb53761b9439f7bc7594aeb802ce354780f202e5dfb380e1cd27fc4ddbc7eee44685d06301392fd38a0092c81bbb9a7ecb6ae12f47b77160b4b8ab42f58fe08f02fac5fdfe98ba50934067f81ffb9039cf44292124edd61c99e773fb65aa0c4112bf09983867c1daf92451629835ccf12aa9929aabf7402b8289619262b689bdb0b86f463a6645f5e7a2fa4d04e4f8c11b3cc5754dc300a5474351b387c6b52df3fc0cf81e3783fe3235e88321a747d9c8736c889edc2b6ed340601841051e40d66708e8e3e28a89437e35a65ba6afdc49a278fde0b556f640aba9972f4eea532a309ffaf86a098f41be5ada58d49a1d5e405cfbb3f31bd628e3046459fbdea63259b07c1a1c588c4a3193f2d853ff7084f431ebc61cd3999512efc457e2c7d273bd41776707e54286973f0b3c99dc1107658c37f152b0294e4f2fd2e20e05fb5c32763c3b8152c8da1ec7a4aedc52c5132b8d941586a713ce68df41615a84902fbbf367e286683b6736a4186d017a6ca01f421a47f48588474f50f208ade874c012a8d2587e4004758688a9fb33f0ed1d6589ef5fcc9cfc518805ce1359fe353617769854a710fd129fd0fd437d578e8cf8bcec25d840f92152f3a0fc0dbbd7586796d128def3399d1da6b34fb59de7ed72c04c1cb9f9b845d9d435039b75287560aecee201ea668f2d81e0740fd815020520381bb74c72314b0e83f92ce0609377f062762b26b09e0beaa8b717526eecaaa5df8efa9d1b7897097847d9be2dbd036c3f9f3b74dc514b545639f30ea521f8fb35235c8338869d4f73977b112b6f775fbc4e5b2c4639e698677b6d47dac9788c1fe80c085f02a8da5b34641bb1b1d1214f47993591db060710bc8f9a34905623393e3fb292eea78ca31c5d6ea183efbe8f1330bfcae75d2074f79435e85f8256f8a3ded815c4c044790ce2d654eb78b2c619ca622d22423c7817d6707d3d6bc2621668adce6c3dc05ad20532439bc6550b172fbe47f62c0038fc26796eb1865e0bcfb7c81f035ab654b52bfb473e1aee72785585e12305d9014141fdd3718400cf0c0fcc56b74b6079621659a35e584c0a0eab2035832d2c86af6a2da590dd458a107870cb8c187c074aa0557eb50c51e7f3c4b7ae2f84241c35bd5b6246b5726fe07bc7ea227fe91fbe9e23e652574ca8e1a8831b5060c64d999e630fb1406e97546bcde0dd7db4e1927c1c3082c1c1b46d1b6395617bdc7becc3d272b2f3080fb150dd8c69274d5154de8a9aef8420b901458aa05fb921ca4e05c4d903545af3ba266e7819fe403d2980486885aea7ec91402a9185e4e169765bbc75fa261f7072f53c2bf44c3c67725b154c1f425211fdded4d89b8ac6313a2e8203483d1f0164c2a081f8506cf420775177a898c75a49ed14095b627de13e4bc43d36238da442ee28cf9374445b3156aa6d69c93157f86dc4e9b0e0bdb6f69d45fb2d79bd877eaf9b7fd1460f57148f52cd5d03f97d0d881d9648039588cd4412a2e74cec6382aa0d2882962498095d8f4f23c0b6af42f1bbd5af0fcc6be20fb01034fdf6a65d6c835ca0e637e56e27bd0e9c2ba59b2914384676bf6762d43bb784a8229e07efcec81fc000852d80ff1ead5a8b42e2ff15d7e2466c1b3c78abf87db3eeb977fd037f06f43312975bc7a4a8815b51fdab4318ceea8f91a4391e553542f6ca1a9c48d060514ac1bacbeccb8fffe0bb614e07ceac5252462d535a2d5ae34f5422ac1d729c427eb598a14a59cd84afe9be3aa11ca303389c6e0992fa63f57525d65ee380e1c2710a412eeb1d93a0b64cea5d1b9874f27cd7c65ffa1701158e4405c0e46ccaa0ee36c13d4c6c84f3982ae3aece3049ba2f8f0a5e575977a59990284865f663a123c87967e308ac8b9ca853873dce25db0b1d4ac9611f9d025462cd2de05123660b9ba5b3cd2cd966cdaa4238a69af3ac9abd3cac410502a49343bb2205446c3fcb2edf2eb457c028133b8159fd686710604a70afe3\",\n        \"signing_randomness\": \"f7127897a49d033ff9278ec350ebc1089a95a84ee6c417461d2ce68c216856b7\",\n        \"sha3_256_hash_of_signature\": \"c645ae21c5b1c84760d6ae13a2d75d8c3da3d68514658aac098de82affd42a6f\"\n    },\n    {\n        \"key_generation_seed\": \"65f17293c523b41e31bd8a6f053f43582ebb48bab890cbb5faa471f30f7e526e\",\n        \"sha3_256_hash_of_verification_key\": \"282eecd8782c35fdc170294a74d31db68d05dd6c090b0b5615e1c09ff8401a7b\",\n        \"sha3_256_hash_of_signing_key\": \"394271ed552636f4859c1cffd06a3c5d6d965165cd1a70528f6c8d8ea1cc555d\",\n        \"message\": \"95624ccdbca2093577ffbccda75546fab85bb48f593f233cc37206eafd144bed6a1522d901ab96c985ad04a64c7849f0555feee0ad276d7527e26f98de05879d511321abf6a73fc4be8c5087064d2b7f9549757c01f4124e4e53675146a04cc416a297c1f1c178236c56b2d5c026f060279d2b4767253ef45582ea8aae2273fb61540eaf1ab3a32f5b46c773a4a4aec210f83123a0eb541bac27be96538266293945d7968fc0da206d132959c59efc8c8520bf981160d296fc1f7768ad8568a4518fe28560ba674e299b3ca219bac1cc89dc4b822590757aad2a5e37b2e3979ff45776eb9ff5a871c160302128b4f2b09d1006eacd5eb926dc117a371deade22f91e0fc576ac57109f033ba411d3a26ff8620138fb7f9b96065146fae03fe48c9d141c57c6b9534819d610fc8dcce17c8ded87c44ddbc8f6bb5939dcae8c47d39bc14cc66283c91d0b6033a8a77a98785daa2ccf4303dd0382d54943d2a13b9b5b187e8b67f8869349b154ff5dc610abd05e3c8ac7bce0eb2e34b7f23181c943f2e44cf3a3def5eb2bc800e37fc887f900b8a3e52db2223ae1eaf754e5155c9c2a052b20ffa88abe5af02e2e442e8d1e310bc060ad465ed7c05751963bf4293653996b9d081c106a0c113a2e985bfbc390861cc3815794e3ec9500bed699d64913d60a259b1a65eb1a10abd8b56c031100c18acf5bb46dd086b1fcf1827e7beeded60a502d94c0a88abf2765e9a35738413db6485149a29f73323109e26089e8ca34aae31dc0fdca04264d677fa45b2ad24f68c0d7d9408d38facf303153e48ab5357c72804638a6730caa2d4e3d3d62660f85e691ebe584ded43f80d631399d9d20d81e4348216c0bc39a9b2b9bc5c45472ed8b69fc53841319b612823a5168d5350703e36cd4fcb9ce5d73d516f339f3b384f39f4d6e2f96d81d7cc5c8b899d4c7e5d452567d5f8e10f6a5e5d800803de19fe91ef5afe94de3d1908a6ca895fcf63ea9e1003b00da55aa8e2c446d29d8d08a0d236cad7552d0d4a0230721edf0464145d58ca4dad251ccbb3fd1e249a56c75fdb709ffde4090cb193a6e5474b89da5d3e0e0f84c61ebefa547fe0df78dea20cc761e6d0ed0c92b7c78352ce6518864c62d52d0aedfd8f0defe69fc76efadfbf66713454e0322ba8fbbf6b09a408f5ed87eff864c8f873635edab9d33f7cca6a270e068f2a1caf0055557840805b2f2b00af9b964db84097e1fbbdb33da920f4a4094b2bbf92648e69365b3e4a1255752b96ff2efb45d22aaacbc2785f405b267df94dc6ae1bf66bb2d8f16c25f1c636bf42f0359a141648dcf9e7dfea4604511a2f337afbcebc7858bb1048ded2bca107aaa0aac054fff21a373d94a2a542bf6e7767ac0341133f3de7b0c74b559eef047636c90c6857d927c08f98a8bee9739623f564045fd08ee3557a28190f104e5d8ee37c013b335420e391c84caf442dd7c2a5dbdf4fd71e785e2b753a589f63f4a646cdf07d82003e7610884dae1de1fef751c2107ee013b918b3a24e9ae99f6728d812f54c446328e37995ac802f0604cd772c43296ccaf2fda713c25cf9451d6ce5442ef1fed006fc1bdecc1a585553bdb179672bb197adaf30c302a7d0096f83cd3ae8645063608252d498f8b8a7113517b80351924586c1f89d7348360f99276100c90f889189e4e5d6cb77e3b0ea662456de6a1fe6ea722a645a714007513ddf7e1f412e2523c0fa2761053f1733c4ebf1dba0525dd116c0d71ad3044300d17875d126392b1320395fd86c75fbea0481980f814f8acad3265d6942c938891351d73494d011db392d19fc5d5d8556d02b450fc08e36e2ee679128adc266d28983e91fce53f9ffb84a0c8cdb4c88e0407da3ff47d445796f51510d94cf870b4d5a993209f030b1d035a920957164eb985a7f903eb0c878bd3faf32a2890f6be3ffcd83e07eb791fe21021c52ad5ce8f99348004a17b752acdfea656729996d4bd7ecddafec30d887e91232f047ee0983552dc1c59f7d762cc8c46d9dcf6715b4fc760bffeec92e11b61aaaa2a47088f3c007a39d8ab7a58c33f98a16544e2d682edf56551936c4da577f65dc2cadab65481fb5ff51de056af3c769c2b703fca090c3bcc73744c716a129e9fe0223968c44ee875621dee9ed9b8d4b36189f22de79b2bf73a0df13fd816a3ff8b7338b5ae00f2011466560cf1957e9d6d074ff31f270e67a7209556f1f4c77cfcf053237fe1d9d28d61caa3c2db0eba54e6ffe985f7902b7fa40c2d4f207a879e981fa052d0580dfd53d0d0adebf52e6ba39aa1d9f0760906d2398682945e795a807f0ddc91247aea904f1a23e3ddf80794d8e4244e96d85caecde0af2ffddf98d43c85a8e8e207e3b7a84ff2ceb849ea9582d3564537d504a0a651cc87f78e24d46b1c883077cc9ac6f9747b707992e8a48120d074f57ce6f88bac95ed9ed3028fbdf10c3b23ba310aef7fb580c4991258b91353d11c17fbb51f6994aa049643e7b8b32ef24af9758561e3cf1be4301f7e35535580f7aaad2cabc00f33848cd06cecaedaf8\",\n        \"signing_randomness\": \"385666058bd22a969a1072ac49722020f00a2142da276772ffd1d0635d5aeb48\",\n        \"sha3_256_hash_of_signature\": \"e493d7a22419d01833a9608e7279d87ac06dc58e3611e42bf317f3b2aa343fa4\"\n    },\n    {\n        \"key_generation_seed\": \"cd72fd2d1e09413cf91a686fd95e16ccb44748364fbfe066bdc2ef3b36e6dab3\",\n        \"sha3_256_hash_of_verification_key\": \"1dd82066c046f53bd8b9f785af14f1ab7c27da0bc298023903b83f817e59425b\",\n        \"sha3_256_hash_of_signing_key\": \"09aac1ca038d9a2bf241cd53a7fdbb6ca4c92462c3fffaf9be67ed0e8abfdca8\",\n        \"message\": \"239732ab6e9221e5024c8cc7898d2df1dbe92beb6cfc24648f1fb22d64d92580b5ff225f33afd10058dda3948850dffcc18c9600a2cc0a8b9c7cfdec174fd78d5d9928e0fa2ad0b5b0a7724e2704332b5d5067575b35dcf7f3cf49c319e6fd9f358e859b22e3528076908792233b2d823bbc9013ae85520c8d860dc62d3f57ad6b79c7cfe9ff72bd8744b156417faeda8191b168229e5efbf34c5acf6d520b9a4ae212e3b6b18385ddd0496de9889a30af2246e3eaea1e1723f80c9e305b1963fa00d71718f7ff136c4810faf416c1ccb2ef4e68ef28e295517b52617031ab4ec210e782aa240c12efdd633d2574a79dee78b354a4cdbb8fe843575d7b5b3f20c654192961a3c2c449e7e632fa04fbe6d77de007c2b62dfebc7f311e4c2fc8c5295c80d8d3e5b4e68cf8f874c0490cc5a475edb660aa9c702c80316627bc26908b71e95c3eea380903c4b95ac308d198cc09ec5c8f38d33687232246c12df58370d679647356a517aeae02380254650c07a5c3286c3daea3493d80e2b70d0c91f1cf8b961b185756d7366c1d439a5e2f4aea5c6b77237b86ca46f153011894c00a9a719b04a174dd5282060a934eabab2fdfbd379d2545447d87b8aed4af057978ffdecfd00bd5880a3c59f0cdf47527994bfc6aaec26cd0504d484368ba078c05e1e48c21f0d8d2ccf0467aa1ec35b0c282499492c20a6b32549bce0e1b778ffa4e5343ca57778b0438b266e2221f11ce22d09397acdc97e88da33b195c3837a44895cc26f70a0eafd7672146bffaaa6f04ce6fcfb62d902f6f23fd70d31916ad3524fa8bc13528ba189cf47d6a159206ecf475387bc45e86a23be9f06baf02ba700cda4b7d981f0b36b826944fb6a7999ee6fed251bf2c745a76075b8c48a05b2f6d5dcbef6193bdd2e65a0eee89733df6758e9283421cef0ff0c51a5ea32711e920d3d702ae01809601593f65485f3fd41e3dcf945cff09e48130d2315fe39b64f71dbc318446e40c594a47a8c95733856366afde6851c44dded175f5f7da334a1902d5c354e9b16d388d19b379df51928e7d9694cab25280263d9b21376cb6c0aaebbc76561c3e4a340faa4517c16746d3cd2ea69c9b1360b9d548646bd4b6c84de2234ab54b225a410a7b6b54d029dbcc5a012979d8987a8cd645ef60a5fe364b8e892f12c5c4556582ffabb21b7f9710933689691850b84fc4d631087f65b4e5abf01721b1a6ff73d55de4c5d833dc2f54b0a98c0698003ca182d449551769c62f542e752decbbb9ad5e12e117f83c2b4e0048f3553493ba4872692d74e7c6c0ce78bbc903d19c4fc025ebe2fd21c749d39e407b1794f8095dc89e4cf4c6c1ffbe5045bd3b157c54193af59befe1e207a18244f2026449a1b923c615b8dc8d53f5a15cb843d1e817aa913b26394f61be06bf8b2e640a3a124fe09f23cefc850f9aa5e0b02406d6f384bf6bde6fc8e0fe61bfa2f6e45fd5d02200fe8ec0cd030b22fd551aab62a79adbb8c7bda2d84654d1a2df05bf8bd23e974b2dfd9efd1ba07c6dd2738089dccd7c7d91b81e8303f2df4d282e380e48fc075ee26d05cd7579405cca1a45a588a5b0fd7d6c7fc72ea7bd350c7f30f5b6b8f1fa9f896e07713881d6bef128df27f75002d7996c9bb0cd920aa2afd462a82d04cb4c4f8ae8068ee594ea6b7f56bb1c79596953b6cb667bdf84b06b778f2ce526e09fc8a2df8693f721d0ead2aba0bd22fb9394173aeb1fab98b257f88afbad9d54f15ab7e6e1e1c4e99c3197b886675396dbbce848e8fef8e7b9ca54ea1eb8c86a9a326aec873c21130ad86ad05db3ae3b9ae8ca5946ba6c14ec21c68a47d398378813e72f9da7d8fbf8f60bf33c6d7e1b51bbc42c949e24275d6732bc41a039cc935d97cf6c3127c5be418bcd71ae6a3135c97c4777c36fb1a2a05c5be4f2b575fb03b224553d35a007b3935fd30e4ccb0d6e6d002ad870d3fcd2f7a5cb3cf958f861c5535c6078205688851dc9cb365da417ce80ed921767b0f4e11885f9f8c1d4c31e3e9ecf066338607819a06697a42339619e26bdb2db9a4974649a2e1d42349deadb843b89f8157ccdd93db4fa60781adf6f12f8abc18497e72996f3799399827f21d976487e2e4f32bd3f5cb6c879fa3cb98794326ad8d9a6a5f9704737c7a5e12c99d8efe802b382e24315c1e1842adbe14c71f0226a976f4ade3a8d3bb1681d3ff3555a34a19afbdd65f600a7a3c0da112ada157035fb5de63ca0e0d40f9d9f7629e3aee526f4c1d53315fde80c90e800d4e3060ed609c8ed44af28a7a214c79c003b24d2fae617b9d76518e9e188f5072ed5982a4f554b22bd10958a6df0175eddf2930a464357d0ab250da753bec53365328d7696b52f86c60cdd0ba75d3bc7a415602a422807e97ef9f142cdfa2d33396f342ad4c4f51297a5957e0376bb6516ab3bf6232aaf24af615645b5568fedee1feb4ba0f5998a5ffad23f25762b34d8124e54a7140a1bacc1268272add15fb97d8c08862dd88f717785f8421832c3554052a2f361f2709efb19552fa0d2b1bcf51b93c252409f885f39113af106afaf7cb68cabe7968faa628449119ee1f9a84861d7f9d044\",\n        \"signing_randomness\": \"c2e390f052290f047dfa9ddb28d1287b74605ce14bef80dce81c609c5d5c4536\",\n        \"sha3_256_hash_of_signature\": \"857e152b8f64979e9c37b8320a377287713511811111caf659fb21acf4ee0fea\"\n    },\n    {\n        \"key_generation_seed\": \"b491aa0d591caedfdbc0c1bd8d7ae2caea316d45277c80bb7246149d72a6de36\",\n        \"sha3_256_hash_of_verification_key\": \"17bc10be1a0419120ddbb4cdc56025360325d1dd591609a5107281036f657ffe\",\n        \"sha3_256_hash_of_signing_key\": \"3d78c0b18332c7b8c349ae3cd91a989ae9291404e555060ecba0e16f3e2becab\",\n        \"message\": \"4ca1a70038b97b62a2e1ee09efbe49c8efbb75f52a26609b17cabf69234640a363a9954e542d176c656bb9c15eef3b2aaa00bd679a521a53ad62fe931a1807029647940a236b3438c050180e61258d244261aba508bd9794b856d4b4f47347b3c4337e1b566113a9399bbb78c721ea7b91e28c15ff1d95afc8113c934dda9c0e517783f65fce73710e60edae7d090d0fe55df2f6ebed679d90dceac189b3dd3b21991a115326dd485a270312f1f7aed5bfec0a470cdbcf3c63b825d872a70a58b075e9a6ee12d1f36ddf1fed56d861284307adff205e5f74057cb39c11b1e7218095e66037b7d00e95998ff2f6f8f35b4a64b06d715752baae03d26d94ddb6ff752ed5c0b70e3efcfbf40c40b5972d7cd8762268737458cefedd09cd3fef5484bb3b333b0ae77ada30c35729c2cff075787fb7dba37b4582e8c3e03e590918f07de8d504d7bd4c47b183241be51d9234a10345e786d73dbeac9c51f50e855a87f062b0d5c43d56a555bdf21398944f41f5b8d9bce023f61b487aaef37403a68131706866ba84fbd9c2c7d090fd036def38ecfcb806f0a0dc2f723b96482052fd716a9fefd7a786fd4d79b024a9e497fb6425785b485fd0944cd1a388c00b5d354aacca398d13af8bea24c6f741658efef83b4f1a0344d2cad8e26e28380d5e059ac1ac8f5702906dbec1e016c149f2cb08b9aa73e0d7acec9f4407ca60120b65d10d9a5d6615067af6dd80ee43b2a58008cde513117e2a9eef5309e0a5d86df62628d60e13d15b3ccd3e8c22cf568afabf79b33c97e773618fb933c42aab9b1c49aaed2d928524b3e2ecfe024d1beb785d3bdc64264c860ba869654a7dbbfcb7baf34b105c6b726d349071d427762a8bdf065613ef6f78e5a6fcf629d83db612844834d5e64b032f1dfd98f8afeeb0b380f9fdd9e4cef205ca84d8dc5915ffa331e5af343468701a3c28a64201b7fb3697ce83293ae2d04be2ba75346fd47e78a555e382a61246a650feade2ef5f83f22715a7a3923acea2f67479698a7543a7ebe1eac31cd07279511e71e966bdaf0668af9850bf49de3edb1bceae8476969cc98364dba69788e87485441a0a73e3e7de501cd2a808e6cfeff6a810a269db0ae79364b0b4f56556c5d042af3ea49f0858ab124cafacfe16c5d37e2a566c507c7aae05ba12f3f16f4e1b5d715d5850729695d88db27ace6aaa7f586a2af87133d9eb52eea2cadc1fa692ad8db7ef4df32a3bde086d30d6a8fc5f0507c853202bc100b53a35f9d534aafa8ce3f87940236c2e50349622e69575dc622ec925271fda687b67c891379039567a45f782e8962926e71016e6797c8e095855e2eddc1212cc140a21bfcfeb26832423aadcfb489792db44b17f8db980deea71937f68f6e9c928578f82242585c4e7f48b7b7710e9f3f04159cc9e0f1824892be09453a88e5ea46c9985948e5792cb0a9944f70d34429b4edf2f8d56b487d579592c41c8a68908cb0f5d5b84bfdcfcafd79d5c0f0ce4ccce24ae53b1a67031545f4cadac8375ab4a3ff6fe723a7046fa449a2c19b4f8be783124bd4b6e65128b375368d992b9dc373363960b280454f1eb874fb74096c050ac6a231ddf0e85db9f912c5aed877d5d52a44ec4543ef825aa34a9ba466b2c04bddbbf1db81d9ba16fae017c75d202464cce1dffc0d437284aa715bf4123369739ed3803a4eddf99dc85ff5b94300d2db3efbd641a6e2d7db82ffeff57c02102ec6e50431e176dae9bf7d94594ad80278c1da757038c84e430896820e4a2b52e756c88e6f79d410818416d42703de45e3c95c0f017e4762aad916bd77c77755a8cd87870795070fd1aab30f83139857c9feca83bd56eda045e9f513a1883415664145d5b2e0a024338e530970346dfc462b1e22757a9f09cf56b7850bedde652b9874fcac28b6164c416f7f0546f7657f7b20901b34666104d5e04d56bbea8a0a6811b1aaa7ba248c905c79cbb7bf15a1c2e455a85c0433a8e96c66a97d5c56f5d61a66d583af34d4bee6bf1ee12474e19d0a30aea7c0b179e958f1bddb43effa71dce47d0fdfa5fe5fb2f987810f286ed52e85a48e877c39cc33bee9a4f06d6ff63b69c34a99d7c6398c47e3d452b2578a0813c2cedc036bc315913e9d51c9bff7a03fd28849f163182770ea5953eaefbffd4f531b71f805c67159d26dad16d49ea29650fee3f495d4ad523e7aded08b0191ec02c8d65701756eed3ac907d3418c1d315e78141e93803e4da36d11275187517a271895b92efad8c4e48e75a8cb09e259e92cc07dddcd58717ed59c8f4dc96f7e5be0887aa334acc85c8cee5eccfe03e94ead55a280c80e8c05e211a917ec7b7a977755a109e65ae1189661e0d585ec54063b5bad9ed59706d2e20b240dd7c4554775a6d2fac89215f6ac3c312aed45c5d71608608a3932ee921e579cc6f2b0dfd5f7fa0ac4a7a72ef9f4611852668a8b1459202d69ee476e427e265f36ecab7d3142cb3c883510c3e65dc90afeaebaaa6ae8e4fe737755562b21c00316f74e6d929f5e76ce0fac8cae0471a9402e2052acd770ed4d158878d2fe3c7e672e0a3b1d780f979526287c095e8fc91301ab5040c7127cecbd5f6734e52437f7464c8ba61f31700f7e8ebb1e0a1ac52da689e1199\",\n        \"signing_randomness\": \"377d6dcb36fdbadfb5bdac159a8c8a5251c0bb0b341f6c5aea870aff35a33df1\",\n        \"sha3_256_hash_of_signature\": \"52f8c6726b4824e6be165cc91fe32a2eeb7f7045bfdabf6152503bc16d605a17\"\n    },\n    {\n        \"key_generation_seed\": \"c06b106089261f6e5892caa8ccff7dc74b654722a753079624c3e8c25ab52d00\",\n        \"sha3_256_hash_of_verification_key\": \"afca10da3cc6faa0189b82b4b5db43f41baafd8ddcc035695d1c451da6fc29dc\",\n        \"sha3_256_hash_of_signing_key\": \"9e4c2995847b419da6a2c463d3a572312d8efd608b25e722ef1a61ad7ea87285\",\n        \"message\": \"d9d39e3c882212f629597dbfd1764ca92b1183dfb69c7a0e7ee59dc2fb5da7dac6512d10706fb394262c5d500b83d2416f2d807931e7976a9e8946d5d265ed198f33eb5587a3da539724979f228aa71978766889f77454fca8b9ec66d8a60e749a7d664b8650df4d479dc426e4d8589e2bf6363f8c4c61fe9422d13a7b94e6a2c094ab4fb41ee9dc35c3a4ae0d6a979db10d9f56352f55037622b320b4e10a326e4ab3e5cde9353c4cb1b59b42e65505bf61ef2bcaa356e7f5b399b05893d8a77e32ce09f9ab85b7b19b7060f812194b031af237f1d88d21a62a468e5ffc8eb86d2932a39f969dad200fb9100f43164152487e85982e3b3479bd33e02764da381bde501228e0018aeb10071f7fd13b70fcc6208e81f0550978c8164869d00904ea2de80735cdaea4577bbdb8ae9a9c03f6c91415ec985b37a8fe11ce69a761e8beb460644c3a91b2038ae55056dcd4b4a5d58403a469c7d61c3a5da3574a3a664e6f3a48560c08aac36472d3acb1d08b9790b145963008e0f8feb03360fa6386cff252b098ef36e1e686751ecbfb7ebb0c2fd5c26ae75113a8c6939915837ff32f41c1615bafb61dffbbadc5ce4dbce666c929dfc0168ec8c7c932b1e359ccfb05d94d69a6ccccc837104121985634dfa4d4d481188bf02cd03e6ddc93856be66422f7d808a0df9cfd62bb108e06d22b3e3af2b12aeb5bc1bb45cffcc0fd1a5d33415c9857a02fe0a6c499bcbf5cd50acc3de11db89db8892656fc6b3bdc7490d7329b6cc58f929d375e4b757dbd51c971ae81be1bfc8d4a4919244def0267354c30dc685552df0189b8da9dcd4c64579135c60ae3359ea003ff05ff7ce22a32c692f1024a9ff88dfc7f4e74f355e79e7de5f59333d367c4644e9d55948582570b0c6f751410dc27c003aa3418afbf01a29cdf9b10cf1783e91e76b451deb85f7b006c712fc20049c778a0155460ec44a5e36ff04b8d3d3035337e7c00508338648aec2a214987b2bfb2d4c0b654697cf592355a7cd5b4a121adf04d6c5461f73a46fd4f0824546de0978f7a4c4207a24a849cd0be256b15f16511d523e45611db5466b09e63ceb13a7a0b87dcbec2ca765a44b3d85b2b3a61bd0d1b23f8194ac7050cf4b5eb843046f2d606425556407168fe9e383515f142a6f77916b3daba96ae39e186bf60804a709f63669ae3930c50e1a734808cd561c06cfe0b308fcab744a9582422930c96ed4b721d9f10105300e60aaf75ac8d5084ccfd0fd13a11f3bd0941526f56a98f1dd233a54b51dc447fea687a5b01fbda826fd3e0c9f04dbb2d3d35c0365b85fb98e03dda2326261d547425a4efb59f9a7acb58197368a4b0b94aeeb32dbdec25821cb193508568e348f5e28603390bdf42a7a743c5d7aa6a13df97ce93eb69eb66474e2b0fee9177819c96b17890e030ec2a3dc3c26641120393bf05045fdf20a70259ae8cc81fdabefbf32eac669d23157fbc7ae60bd06230857225c02f0110b77d78dac0f8fd6c599725919f2d70107d0c212a4b7b1f7747fc4cdbdba214d47b5ebfc5a30420a11ed8d92c6c9aceabdda44a305d692e9f02cdb85069a4d53d99de2e7197f2b0bc09c6455a215488aaa4330f9a8e0af7f661ae2df9278f7465e8d56345094a864aefd0ee56094219d8c896fe43786e36783842c9eaf8f004cfbf7a404e0eede5acd80c4486b2d0245966bba97b7ca9cd0870fe929ab35e5201aaa04e40552ec92a7fe5fd68980807abf15f37e671b61c3971195bce24aae15a1655e1caae6d818cafa0785268576f13bd673cd30cedf9fb4304c8d724a3efc201f17775b8c8b7c04c53e4b33e18fbbe574e0668cf15673b6c874500251c8439ab13bfb49d1870bd81d346f6b4ab00a56fe809ede4c9b8ad828c704fd831aac27e7e74e44b92a7ecd40f6b79ea379e56c8852dd0f3dc80e9477a5cec91d4616ac384451c1e3f1b458dda93fe8d6941164d82ca76739870bb029f929d6b9fab4d63a0ace8d128fd4fff6901ae90e3d1a0911af3a0089f01f8fd27e842c6f579a9092b61653c2b572803e07fc6b68a298fb8108b36e463df9a404e3c3f9648c108660b964ca9e2ec3eb42f56514757cc056ff64ed906a627f1ce4edd5be1f596c911c7120cd467db5aecaea4a0c0e9ca428698f8f55de14ffffe7cbd6456d9fd072a2cab023062e83f08135d420466fdc2624495ff3d117233e15460c62d0a097f24c589f9e686a28309ef440b73bae6a1580cea96eb808e039fb1da85105585e4bb6dc6370ca5b9f678ed8f6135fd00b29bb9687149b35b855fc21f60227e2b8b9eb31cecba551d134345db9b65254ebf5e33a37407c3f39a06c104aff85e84148a17b09c8f8ba975f21953683d8a4f93f2a4c2febb29daa1d50ed67cc8c3967e978f3e2ad14f0f07dac872ad520aabd89502a3302bab1c61d4e0523f52b74f6ca72c1c7c19fc4ba6259e197b7a4e47538699fba25285d323d3800e66366edacc57ae3c0a9adb84f5ea9b4b583baf875221fa184b6422c73705bf6ac0c98822959a3d3e813515407d0520f8ac83c2709ad9a9ffd9f692e1e21153f3af1bcf224d46f9f403bf1c112f734b7c1f9f4119577df4bf22ad450cbad05467e5ace90c9dab3797047212f100f5a513bcc40a5847ca1b4473d43849fb6b9db1bacd7e9c0f4331816d3eda9540b9696f0e1c5386b04a\",\n        \"signing_randomness\": \"18ed39ce4686b4f6c9eb2472d2b08a4f79f5b2b939e31e1d3c8adf674fe32cbc\",\n        \"sha3_256_hash_of_signature\": \"ce689ea9c687d72d26ed8e2025f3952df8b981a4e58126df5a7757324b9cf7e4\"\n    },\n    {\n        \"key_generation_seed\": \"a831e2e650fda885d816bee52b008630edff29ba11d219598d492bfce232f112\",\n        \"sha3_256_hash_of_verification_key\": \"7cb9258c072afe4c001a6b96d65c2990a87bfe0d97493359100105e081c66eae\",\n        \"sha3_256_hash_of_signing_key\": \"c8e741cf3c331d34917f0edc90339c05244e08b5bbad3f53f5d460376041da9e\",\n        \"message\": \"2ce3da4330738682ebcc4feae4f59329b593ce8aa4e45a28f6e262f812d541ba587c256d9d1391e459f5a66cecc4f23610f1befcfb2ccac1aa66c41ac443cc94a597e7908eff20513b7c674dc59bcf3904f03d9ba0743d01b736011e70fdfef65f959c96f5d8ec49a775a961970cb96dca2ab3af7b7b5a3582c6c39d33c09c083bd4d380a6e7989bf14bc01c0f6c3dafbd56f286ee7376ea11ea6071d700a4d1f63c9b7f6b24d2e67944898625d3cd3e441859326e59f9d9004525d81e0859b90b2d1de4f3a9b8a3c40799f22a7d0ea7164214cb9552b2b4c82120b9eb53800854642d952b99d1d2829b56abe237ddc7b093a57f200d139e592223c7907813605d2fc9ce85affe3ee1ac91d735fa26f482b5f4bf033ab50e88676cdd16c92d943f6eda95372dbcaa644957d55ea11d056c99f6746e329937aba4f6c3feb469132ae7acadde7d14993f528365df96d5b97dafd1d73580d577e9642cca9acac4a2b8d5e6eb1512f6563960502ec80ed356ad991fd85b7df1876b4c71c30a0e65f0d6a23c99ddc67e884503351e4f490d35d4b5cc4dab8c67258f2ba968cf7a25f6c9650e021d4a796f47b80eddf7c777d31e34f0b307cd839e6ba8c240929e13d3c7b9a5ce29707c09d99878ec5756a2f83a1f5093c1d996e4cbf09689c96f92810a4a613fe4a752ade13083472433f2ac3d4cdcea53b62afd7e3e4c6e16943b5ed37dcb75ab9b989dad633242f805c3d3598b6356762f214095438592f40bfb4dc34d4555f5c3a534329cb66a7cba3d05ddb85092beb01db96c2e3c823c82f9117feaef15a1cb60a89e5bc63713fe3a13a5522e04f2f4e93e67185b0b7e3c4a6af3574414aca13686c7b45b3c59954c592611d260272ec53f42a6cafe44ea6067119519051ebc8ddf7f2e9e31d9c967a4c805fe6b82e81b73d7d65697ffd790f8d20030981dd2167faa339ca268ff9e1f247e22344ed5912af05ba05c4bf172b8676320a6b5321f85f26b1bc62ac3099150c971e482f708bd0df3bf7f6d3552b8390ca040b7940cd227d11d1e41cbe3c35ea6c47636e842372dab1be08ad1382621a4fb95511e05eeec0d0b52677e7f4800a50d9f40ea93a76572be298223d97140a934eb571c93fd4ee0cf8f47636d1fcfa510963a9e7b2faa6316132c1aaddc6b7851f186033f8b8da31889b7a195efb4d21f79fb81d71cc234298edbbde358f1fef9fd9ec82d3b4d1a0bc729f2fe8e888ba78fe8dd9d07a6284db656af3061da4f09758955089c779f89753047500d963c5fb6ff5838390a27b0a24ab4745dd53f2f88a20897745e99289d65c481aab0889d9a21f183780cd5015b9177b76e2072a852e83a140dae1c14c067c7793d24b82702d0fc80ce5d0ab220157de1e86a6bb4a860e5531acce8e1db4664bc5a770661d050d4d9e952efad4114f8f6e3c4aa9036f951829affd91016f381249b03042e5e0b4858c2ad0ab19bdcc802ac87ee2a7bdfc0a58f2a190deb4418d2127c85d94ce769d4d4912a126808dea576687bb382aa4158b8a97dcc07f1a018aef81c17838d223cfec4da68cd2180a85457228aa9ed142d3d4675b6bcc9689b1c18ec62f8fbd2908f1f4212ca09a6ddd1df93d9bc0e135e2a20c74af2363104836903259786e54d3225332d2ada9c8df9425b41ed65c3fbf46b1e9bbe6b7947d42e0fa679d102f1a32e33f28149ce89ba7a5de9b3bacb87f294cd8c1480553367266cfd4fbcbdcde07719b58f1960ca6b765e26b69decf54c2056a70fec72a11524aca259d1bfd8992027578060757c528715af2967f2c7702a1770b21b7a0dd422604a66e2c8283eec64406a00a0fd3c17213c22038c5d35ab977d52e1ce4b5a19c492410d46868f226aacefecedf7d7cbbb7a3eb7bd70faa3ebc79bfa3e3eb7c4aed84ff09361a8ce35abcf48087eeaf053e962705e20c3dda095fbf5ec6824a58de1eae0f93eb20320a6a4c59335c0aff390bde3e7b221353893ff38044071473e0892319837c047ef20de6dc21203787bada05f76e11b849407bcc699a635e1c271e3b67d5de5008fb558fbfaab0a1753e5b4c16314676e2d8ca04ebb30f7d240b541be0973d72c0179bcc17c9ecaac33badc6096ad06cdd51d7e1b6b282975e9701fd4c1ca0bb7b32f63122999333d1c80502c9f87835d31407503564fd04664bb3f3a64855053dc63b63f065e6bb1c157ddaf5f2c40243a7b89916f5423d6d4031abeb305dd7e34f7e82758e8acbaa8d88223fdb76ffe4c285e5ac026c8fc33d9786a5c693c2b478e3bd50a511b8f343b90caef0e24063d14626d4bab8cdd9172236be01a7e60c941cd627dcef44e2e4d9431f8e7943cfff6e10a4d33a63e839712995eb2d66e8f5b0dd9cf1a0fad60858f6e19bdf44e0a5e3c60eaae2009bf558c6ea76214e572ce5d8c9c68e82bf578d193a8d88f40b12903dbc9fb2a7ed7dacd8e80c2759397dd2f36d3cc7fbcd12c8aa0db74d1b81bfb70d5cf53153a900cd13a09d27249fb7767b8d8a91b7e414cdc6acd021244d665c8301a97785e6c6124c02002814e766598769d084369db8af5fea1251b8ff6df42b07837d2d51d9fee4e224b98238f889070087d4f9248e4429fd11eabe5684f78c2bca296fd6b0748d0b85213cab145e9ac8e15684c5fb1fd8c2e95ece9a1a31f32341a96f4deb517f6574f656bcb23dac60bc993d85733e7dfe9faad181f675e4d37762d4372bce34e6f2becb6e5eb\",\n        \"signing_randomness\": \"b3d457e5788014f33ef114e51df35734ec6293813284c05478c891587b5f4d90\",\n        \"sha3_256_hash_of_signature\": \"8b3da907d300673c01db2529f3714693088c90c50d86c1177b1298bbcbb06784\"\n    },\n    {\n        \"key_generation_seed\": \"475ff8bb8d6e1f2e0ea29f87c7267a0fec7272352e6f666c995118f1ed11bb33\",\n        \"sha3_256_hash_of_verification_key\": \"34cc01ae654e8c1576e257ea362cf69013a29271b388d3dba6023594aa1c09e9\",\n        \"sha3_256_hash_of_signing_key\": \"bfae909a87d7d6ab81636607533221104d4711f2d6c2cd312207b28b9feecf35\",\n        \"message\": \"03ea23a940dba6c41fb14b468a9517e563880a8c503e8bfc3335bdda6eb74497f25a7bf557ef551dc2e790c7a9cbcefae9aba1c6d5e95e9f401d8fabe977d1efc61138c444a42d80ff22fdb167df54a4d0ede2e5ac81d4d4f88154aad49ee0903fc59127cf97856c8499b20beddf55469f767430b708408f35ef6b0cea888890ccc77f5aba498d9a4e52739b76187aa469a497f4e244e0f4d6394d6774200de72c52465cbc12dc75f55b51e851a4b87e3e79f0d9144dd39f6382cec8b0c6dbaf214d4510817e1ccaf2a2b6164f396059ee49985c9e537503992393f50b9de3d1ace89c7161a7516e7fa038340bcc307659eb79eff84ce5e38229fa4913ba73fe17bbfdd7c395de17c2279c94c002c99ad7686dad7cc80c3a5640119e8b5053cbd5dbc2e08a3672267afb2e63b77eb44c77c6d329bfe85c4ddf276b5c114cfbb98ab984fbc16b76651cbfc7fd62b6445a4bacc43b445dd369f8d0ee7a665ba4f2a36d06f5f6cc2129f6c86ff31c62e1b1524903240668ac404e3ef810d5b0425879fc1867ccd02e8bc5a96afc58c3e673a97346a2f68698718764413939d7caa06984b4f62ffe4e9d518f1c1b0a669a78a0a4e1185e54c0dbdc680340b8b4c324d4bb3b0f2c6f10715906a660a50b94a356be14e47858a568000cebe74b80cf439b958284109245095ebc9f2641e1175f682d751c27f126323099eef6d01ccce65f5e0346a0fa963bf54edfa4ddd703105467bd8824d9ef66f7eedf34d174977c3e9746850ed30065b82b91e1287d507e5d6db86497780f909259f13f8e148603076acb10a46fa5a29d4a5d66167aaa48beaa487edc17d624d2786dfd5375853ed8e60b27367d84283a9e433e39ec3f24eac7e083f46aaa39f9c6941733a443d7be2194cf273da40cc687c43795f970b3ccbad26cc16ae7c6b5bdbf5d4b60ad35f24672d1cab43364f666d253ded63855f9df76d1d67e774d921d9eee4f794af3de174c3dd95fb94fa6d6335c10923a5a2576d7461a648009d20f81f87b25ebef07f9cee01aa6c4a143a13607d21bc8fd142b0fc58a540fa48c667da28bf2d36b56bf626db289f34dac12a7ff9ac0cacb2385c1fbfd0c53ac658b4bf0931b904b8f70797577b43cdf0a18872e9ff8cdedd231d2dfdcad4c9f157aabde47624954e46b5aa743ea08cf4d1f1a2dd20d2551ed7e7d98695e0df225e1430712c2e72d9a377302fadca666ae3fbad7724b175a809e1ea62838fae8b1d90cbe403cdfa84a3cec3809bd7dd046023c0106ec21877ef13c10f78cb9d5057692a765d8a7ff29642a3c8621fe550ddb49def71c42a25c7ec4a6ef9a6bc69ca88189c00835f85a4f5585e70918b581c385274d465d6b03ca29df1d088cd3180abc91ba7dde818d2bad2247dfc321365fa72298dd29ce951b5f08689819ecdd921798446a2cd3b89e3fed67ac342a1d8204a3eec4e1d3ee299841804ee7c16e7517235683a6353c81fb8c45e6efdd2ccd95c60a6c5446be07fca77877b645ebdbe6bdc9ce1ff0b79f312e82b3300424b381822fd23a08d3479feaf4165e878926f27b54d191381489322a0169128f286a537b4122e898c45d388c926e3298a8280a5cad8fec71b0f8709929c34871e240691f6a075f37f06f5dbb427f655603c5b0128657ac0d666a307d710a6b55ed63b39b1ae743720540b48c6f42229494d32434ad3cc192e9fcb4591338e0eca704359bfb1a2ce154a5ec071295f5c409cb90ade903fb9e6cfd5bc17f9576a9635157a06cc5853f607b31c900fc01b46df93ff98bb15d1c9bda511a16fa522e5bea67b8ce94a14fea22fef7a946af3a8555514ce887a83d1363b47d01d75dc98cd7c93236fa5ee60c095e69602c1599258355b0b174fbb9bcc0a86ac00a5965b0539eafae284dc6f9e12931f13caa8894991c4d4d7301f54d8a93d02d810b1f0fb3f6173c0dc181281ef76f3f091d81a69329e0f064d894cd768b8f4b1974aa64a785063c37a5908c64db2c9455600bfdceebdaf705c7bc701ffc85c0047b492f07b6d5cf46e078afaefe633af50dc9471e6e50eafb6143d1b7b17b636e0594ab3ad65c7236cde23b42655d60b3c5ea5c04e67d9ac084402347790fbda69ab5868f6634e410f445d4b15c36b406b5876163a0c86e69d5bbc59b9c9c31a3a7c2fd02c803d258bb3a880b962ae778bf7ffca9ce016ecd11858cf042e043e5f547dff03e81601e4600d9650b457da21fad9c29c5bc80c643599ce399e441cdc1cf08fcc0bd20054a7f0c9356635fcecdf650d52c53a8c2276f8adbd20bea25e0111611262a0527a6a0cb183ae59e2e891c6020ed30418823efd6ee3cbedbc68e40c19c3f7db72ae9be6f9f221617079f3167b0f41bb631fb3254a05984cc272e032e6e4d6295c4fe54576090b271c52458158356a009c4929d9721084a70c161b00a09c622d9a4265ad7029c1e2b143ac993b736e7a6e3ae94167c351b1faf82d36d9c2b28684d6bcb9fa7541201cfd61a70cbcda1e4cb082d1935f625871b25b0e2a121882bd3b7d06c05906d274841828e50e00e0a26d177c3c74ab88b009a440a7fc20c7c4801397f68091f7201e7731c17984351b81875543de2749022c46ee13bb91a7ee10a372b90f52a7ffa96bfd5c2afae5812f3ce36edf3c20353748fd6778710abddb60167ad10a0abe78beb50dcf0718914de1235ff474e67c1afcbcf4538b0cf1387927206657e3b3d1eb7ff03d0ce617cdaa8b9155a9442e1c86962ba5bd398d5336456e22832ce9938de855af9ea\",\n        \"signing_randomness\": \"216e1bbbe8a1ed813605fbf1c5cab733589563bcbcb9f6d96491ed47c75fb142\",\n        \"sha3_256_hash_of_signature\": \"ff383dd02b67540a349f6fe739de666b201163e20be1ef62d94a2036d710a463\"\n    },\n    {\n        \"key_generation_seed\": \"4c8030efdb74ec4ce3425ea4bc11581e0d4a3e3ed5f651b6271b1243b19f0d09\",\n        \"sha3_256_hash_of_verification_key\": \"bc006d666af04ab31adf44c42c0ca246bc34ff4bdf21f8baab7f0444d999da78\",\n        \"sha3_256_hash_of_signing_key\": \"06f2dd409d0fb7ce1c0aa68f606a37786f6720c17430f48f2d4a66d591466dc0\",\n        \"message\": \"7706def93ec22d3fa1a667d6fb0854752882bddd7d5a05efdd6ca9d03640d964d0694e45069ce44e532865a8c64a9f66c36645b07881fb0f5fb29e7e4d08b7d11804f0c061c420742d1f76c5c19db6411a9f150744ffdde7dfb75f30be8b1f3f062f2cae88e29df3e7889ae2055e3cdb8df99a1ef894cced138c64549a7367425b2aa07b3c6e195f21225e2471f9940ad9666e236b6e2ee4582c35b8df15390be3967c2bac26f38f144011862646c8efe083d176ed23b37cfe4e77d450954e206aefcedbfaa7bd50bea4153d3cc85979f7be2a3ee886c888d76b6a1c377f8a6629111d583f90203e481b415737fcb53e96c8fdabe6add75a2259cb71eb1f8d77e3bb346de1b3fc5e5119e94f32eade36dcfdaef4719919930b32b4f511f10470644ab94648879e08878a0e630bdc935dc3f311dcf6a0999989b0295fe7990c093da1012b867b3cf7d94a5ade06ec4ea7d75545c5f87e7a213e3f7b20e87d6a392bad48e2ae9c66f44518d4ec1904ec3e78ed361891fde3271a8a420612717f69d57141c3bf404a5dd456ce6604f47e3f2a766b10bd0d50810851292ea66d8aacc425f1c34fb96af5d9f06c1e9f1499c39d261f9c7e6df5d62d26b7017261f6d031d11c7e9ddb938e25bfa7be441af6339da7b7c72f680eaecfcfb3f7cd8f09b6682f77f332d60bb2b9bcd9b1bf555013b3c1776af1fcdce64926c51e7339fcf3c490947cc61450b450a2fca4cf2d1047664786ea56e95aeb0f1b7694a397103ce41ab552f4b50bde866852973806e66efffabe175fad22476cc8ab2fc6aa8aeb4482d1656687c749637273ae56fd1e7e35f6c8d52bd5162aeb5e55e8b08ed384e2690567309819db8652ed0d6dfa7ea3722a0a05340a8deabc8c2ce776d8524adceae34fb18cc105107e505767e6a42802a59918c1b30d21ea0b1951e741ad352857b98e827a25f545bb3fd56fdb1716290f8198107de52172d1efa31249a3ae9e29463568af590b81f1e6d89ba75703d2219bc7366f62d58b2d70550b24b9503ba9136508f43b13776425ac556335eef4cbe5bec32dd0853bca0b3bd94c9153ac0f637b5ad954c35c777966fb002d3dd2850bfdc3d4af219a5e24ef507e7355b12500a18310b81bc6de223c447e6d457a2aacc1282350c74c1f6be86b07e0167df5dabeeae8ca2dd9d0b3cefe05b8beeb979f2f429087b7fed8d7a64a3bb9c2585060948daa8a0ca48d0354e02f0d84c8207ccce71991f63a2e299a21ea1d3af85a4a4396a89688ad301146658e3380cd0d1143c55d262c888383d6b962e7bcae92b4bdf4dc7817810e64c6a392e1c4bb1af74314b5182a78940377fb7b7744d0562920438634fb793f8a7365c6bb53059135f89c69cfb52949b0b45df8ffd79a6e98e5c85a2cdabdc1116e39f481cb31eb46f14f16d3fd563ea7913eb00da6eda4ebff91136858e667b842fa00085cef4b0b1a898d080d0622c398f4830b63e7d058d891980714aca1abc7355ef049fcc03ce380e0a4ed2a53a5c1da28fdab7eba5502970ebdaac975c55c261250c0ce84979baa8458ad71cdbb4e48373c9955ff4f72fb716b57337b84a031e063c215bf6c3e8cf8cf578e5ed49dd4d133ff16be42157401141cbed291bb81dd657669266bede79fea664da9c3710c43441959b0220b5fc61d22c6e19178661ca8349402d78c6a898f15de11c61d2c428bf7a4b712456d7c488d7320b4b4e4679a0f476816e7b02ed7e69b7ed442df4449cd8745d83bf962a061328d74c677933abff35bf7e85e72ba884d6e1d86814ceaee58da01fa9fd4f01533e44b71d4d658eeb668a5a5c64826b481a9e149a09d04703225c23df740400f8e53960206bfa3ccc3b1f3e7df97297b8e56fd192f84adb9c4f3859ce4f59087ff1d4bc6330af8d1ac4668294eadbc7677a9e2c650bd1211069398201f0f32498edd62b8739aa9b9a8b05f986ef26f2175d5bf47bd8ff4c4472920b7e6935dbc1661b3215c998c76f1262c2c73ae20ca0a5938169a279a6886e500ea511dfee1e04e6ebf53c944a99a1f832500918105238e8106541622748b366960919b00f48e15fb5fb45f7cb3d1cd6834599f008faf99780182a007c6dccab3cd9e777d1f297a7da17219dcff88fdaa0c3c9dd6550204c030a56b35b774109ce487d2a7ec117163bcb951735a2e538a125d22461619f03b2c1d1cad6a952ab8ed959886832f75d65ac3eacac2208f98298df7de2d7cbc111353053a1eb3ef69e6593f0755aca06de49d40f5ba38cf1b509d771e8ac8f9a49c0d859c6b030370cda28645aa5e90ef050ddd4c1a339378910c42b0725aeb5cfae323a7e9c99e4e5ff57db9eab91cdb84546eee8e31717c2d3ec809809691559dc3d14ea092f5893177a9bba47a6dfcdf264d94493045784220dad5e195aafc8fd38815b7014ff7d4c5f9a2ac01948f5e34d2d5e360471499174cd1603fc0f0298d6717d00c5fa8d9a01e2b9c6a1153089139674a72409a317144bc0526aa5a8c486a0839bfd989cdd91bb61ffee0d1e63b70feea429b995a9c832f18fa251f6c24aca40d29e428ef91ac12a6b15575eed3f928b3fce5ee8175d49e61b9ffb72efcbb2cb4604729fe5b7d3d49f9a25336d81e95381749b02b77fa651795cbee37401421985444396e08f1577cf726e9dce940ab2521e8e7e86ad893ea8f33550e403fb01a3f28b3efdc89113510325a6227ca214a90574e346c205fe240058219ebb879610870c088460509fd8c88b00229591a6ad3e44c113dd2cf2a978dad9ac811c912678021f0531ff2af46f31d3872fb1bd430d07117551f131eb8afda5363\",\n        \"signing_randomness\": \"b3282bfaf3a5a7c2cc1bcebad81f6438bea692a2a7881561834ea6e1063fb119\",\n        \"sha3_256_hash_of_signature\": \"0235bbc77e60c2e3b0c27c72e3de71dca54db799c29d30419b742c3f95861416\"\n    },\n    {\n        \"key_generation_seed\": \"6169f833ec1bd619d833f3a317610574e0e4aa852e891a6581cc90d58cedf2ce\",\n        \"sha3_256_hash_of_verification_key\": \"cf76901aad5d0016efbfc20b1fa04127c6f826089fd56e14db3a182ecb310510\",\n        \"sha3_256_hash_of_signing_key\": \"cb7420179f9a1d87aa101c3caf11b668fad3476cb93d90921cb99aba297ee26e\",\n        \"message\": \"fad876d9d852b5ddb908cd07ad26773fd90365b2e1e93a05bf8a7cd8348d118cee74e872969c52628b5f673ad4c735ea55111feb4048ccbcb2e7e027102fab0818fd19dabe5bcf3a16d2582d89f302aacc040b27e9edb271c79d639291daa766a5e8af81f0de192a3bf12804770af073c3726054f2ea1ffba982246e815a752989d96697c8176611155ffc2eab032b13c7b510786ab51bfb6f3a920d89ea798f650c187c064296e7a13bb850eeb86cdb01b296fd59f9b8957a3c675957ef253a0a074df7a43a2eae4b453ea44b2978eb4629197caa61ea93b8188772fb43a90cdd7df811aea2e64f1666dc59d2c2abe528893e78de7cf6576beae0131cdc6fb2ee7f072d7e8ba71a785814f26759e283a1f455b4d33e0072f1ba048bc84a973ea33cca3a643cbceae21bba9e47d458ee5c0097efc93c83f00601c9501d908be542071e167c5c0a3a0242ceca360db9139a5f252486a6aa98d524800da8e6ce4ffc94211a79324ec913f69cea38777208900644b0db714907d92f251c05537fc4c88b45905de409d48c5f40407d81ca282718558b3c600e2160c6d59a5389da78c13beccd5fa5a1bede26182a1c824cc3d53cb696e61ac7da6031b750e245b4d9f352082ed19c40f588549527a263927df908539393bd7f9a923ead8cb47e75b14068e8abece890bc11c9a47fb20e9d0bbc50933d41e20dcabbbc0b4bea0dac5df2452ee494a3ee77e33c814338f4c9baa4a6f1a8c2b49fd533cd80ae986e0125d1faa814c9dcad003447cd693f9be97ee7d7fb112aed10f9e2a3801248787180a5296da56701b9deb136457e3cbda34af046214cfbf0cb2294263cb5b8ce9d77de06c314cf536d61abe808e69bf482ada691a2d2d6f2b114654afcdfaebc4cc499d0724155b718fafb46ccf4713567109d7f16fbe43906811afb2ce00ed639ab6d379502f2b51461374136a236a4f23f8198629b14c2eab77ea3ef0dc028fb6553bfb9dccf6ec8b0fc7f758e682ea4cd20fc201671e4e4c963f09a79861d92a01ecf48dbd76ae884bbe95f7d479f82606cefc75b2b509dcbd1ff329103484e30af093d0c04449af23058c90a75ac67e1bea7f0851cbc526fce0c15ba333d0cf261ae48eac1c3f362e21c27911d85e2a3a12bc33550f7989bafe8e6aed3211c10a00e3c95aca4d9d631afce4cd479eaafdd82f224f3dac6b6e8b2046c5e125c7509b7f2a67a8c29063b45756c162aca0fbdacf9f302a05344f385fd69ac9103ef7aafe99fcdef2df17c6003cfe0270cff25cc6e9900f65b6671c663d32915084a969e44a9c3cc8ba37a0fa0abd2825f596b6a8fc6d9976d9e4d91fac99f507ce0fc086fe28f54556e18de62ea7dd89caf54df53366d8be055ec829e5f3d45705ddeb832da8b668911283284c373c14ccfb798ce76be8d776c608f4c7b4149ded290a409352b65e56c8b1704a1010059756b5dcb4ae69c00b12540647f856e9d3fa3087d2b986712d2341299758abe7bab3bee37b5215a3ffd3af12292a680e56f2209e628cb91dfa75d7d700691653e04b1960f3c678e15f9f8963b991a6f17562bc997f1ad21cacc6749262209c6d011dd878d091fde064f919639cdaaab971cdacbfaa125a2e8981df8e1689162798f8f6dfcbaf42e47b9530e961fbc8a7cdfa04722607a384e7751aefcfe46fa102cec7631ff241dc008de7112384cbacc30c49b8125247e52064f97ed896f6d59c5fe85d3f86374418145bdee4e96209db7cee7bd0c9e272821d52250728b9052756bf66f9ad4f15fa6146fecfd778bdf0685682e3a6067a1ae3932341b91b593253da94abce2ddfde39e87c5bc358dd35884a3d2740dff567972c4171ad2521ad75c78a24d512fa8513f34d68157a7e9269d1b109983747ce8d1d1747708f5759c989d8ba6456cce22b5011a2a42b2468f6a64ffa8dd60aef205f370e227dfcacf85db3c2f831bef9f06a19dcefddbfa0dd765181cf54bfb865082c57791bcec307a7a151954e912d7d5b5ed5fc70fac0e14049ab485a6eba8e95e0d63455b778257d997a53a519cbe857e7a4343d77e690852b34ba0449dd144c4b0f6ee8e8c9ad8046d07a78fda6e020cbc7f95968720d7e68edc695eb9c99e61d903d21ec760906eb025b75c36ae35577857a3acfc148f26a153d2ca1307f4008af391c88b8b5dfcf7f31a41fe390043c87353eba23d74ff03e5302201bbb367176239ae6c641e36b815c61ffadfcf57b0a1b090175dfb78bbf2111c23a3e5f76f9cb4ab7f9c31001cc26d7df446efc93b0f6041f84c6523307ab0d15f0d7b3fe47b7d51cf7c5f8ab70c47e90a82f3489c800dc3e8742a376cdd8e9e9f6e60c768b5a23bd908e8acc1c73a1c9dddefdd5fde21dd1325bcd348456cc3d25348da95ee76e71ee468d5aed1c39cb218f539b9bae0e77b96d9af88376ac010c29bc6dcdc18719180d59046a1bfe5bd5bfa26f6f6c51159dc6803001ca24d6100b68ecf63b918555d4275ee4a9db47062cfb3fd826b582f4f6d6760792f2151958f3aff404175f881e89ad8c54fe78c688092e5ef1c676cf2faa095a972c068710949ebb457f2d992dba6373e9a632b4a470d13ff832e884a34aa7cb06a78efc628deb480c4dd056431e5ba33bad636976b2d911339768a95cfd8558da49b030277ed7f246331d5919ed3137a6328785fc71b30174543959b02f3d680fef5eef1173e6ee1290ed93237c3c6d3b31b51fc0d1297f95c5c7db2fce724fa250e4ca669715e06c1da5efc0c21f83852212eaa8140a55f846aa778fadc416416eadbcea0be528bfe1a5da4cc93187c13a3eeaaa35aad3da33cf6a9623f05103c28a101afc2ca267eadc28c17915340b93e015286ccf687201c\",\n        \"signing_randomness\": \"4b2536f147d24463d945115894fc53ea1651173c5611229f0e782f4fa4088591\",\n        \"sha3_256_hash_of_signature\": \"08d5793218091d437e5dcf7b3d8f8ba1ca1f945ee29302b85a237e0836d489d6\"\n    },\n    {\n        \"key_generation_seed\": \"105018d6d7582797650f3d0d9911ec4d562a7f61b2039ac0e21d1d0ba021e483\",\n        \"sha3_256_hash_of_verification_key\": \"74291c7724da9aa33e02d4788c72ded574f23b731bf2b57b67b790504204cf40\",\n        \"sha3_256_hash_of_signing_key\": \"63ba04c77c1a573d34b34d567f6e78b58a3ba301a13960bdd80f0fc473cd5476\",\n        \"message\": \"c41fd7f4b1ffc066449482fd8f02d4db5a949470c5fc8e9bd01ecd20e25e5cda275b9c666e6a7603156bb3cf689e7dfafa3e1e312f2fb09dd8ef66580500a0edd3ab047d38d37021a802f20bfb44c2042462928cb320f88359fbf3d0a80f84b0ef4a5a2b36f11b81aaa9ec6d002d08296052dd3357167481e1edfbddc5063eddb4de1d55729f1b891745475ee9aa2b3aadad520ae4288550e7ba48c33a4191a8db79ed1cc70c4bbd3c61e9a2e8407a7a91b020f3da217b5d178b2c40dc8af793a37fd7d1b2cd6a2502309d1c5bb6bd4b1b708086f3734bdb8104aeff98502fd16904306ab425a5936b0385a8531169339ce27eaf2b712be78744c31413b08b8eef43971d27d250c6bb634e39e0e2aaf2a1312adbb659650e143f075c82fbc1039aad257c07e854e295a1abeef9207a2b1e2b13f806fbee2d35f723bd42b8cb4d450b7999e8b7337e0a34c19684cb485dbe180b92c4f4f4d50c5dd770a68b6852c939ed055a1cc1cedc4ac17956717fe65422241f2f24a455b3f7379812b6cc338b1b0e772532dbc1b0158a41088bbcf11149ef99720e1c82327da770ff67c188c27843a841ff720c06b301b0025e81570386707be2fee1ec88f01a4cccf449a2bdfd14ce206f04b85de1248fcb06e5440cfe473f3e3277202a0ed92573c826842a8afa0619c80369cf417fd08f09a1c963eaabd94e1abf56234a19413d265b2e216cfab919602f1e05121546200290be095c1b4803b92f4b2d91880e60076c31ed6205aa6823982fb43c30adf3929864ce69bfe437a30ee04be8fa9b1d337f5d4ea4daf0e5f6017abcae41501f53cd67707a34dad82d3eaa153a32ab2c9670d12fb8c953e42a1a5227324ec5ee57ca3a55582711ee05182ae98ebf4801357b42828b1e10922320427c76a8bd6a74032018a3170ecf64bda2351c1b74404bb0a48952e6f45970ab39f9f87ed7502f7cbfa975403e8a0081e1603dd029a5d19d960b33e75982b03cf22e17b8b6791beda45e7e848309880ab228fe7f710f8341b4911ada664883de2f72367157fadf054dce5fb75f0c1cea3f6abb61143e73acb4aeb1f2a85eab22098d373efdff2d50b46347e0ff9825f3528d52e3335a4461d8c0021354f4e5094a73958f035de9c528d760ef12bb61e2833caf1814f6235806495fd1e7ed1411cfff18374cc5286cfddb63b83cd60164fe4b065374505e9a5f39fe3cd4a37e9a61a10b8e1191d70fb383189fe6a5716fa8ef425ebfb600187083b95bc89fe0c3cddc383bc568bf4ef9cb7731a2c46834822cd33820e4c730c7b0374838458689fa17753a8a40bcee52d6c74e503a9967ca7893dad78ecaa4fe567f4bc29f7e7a26eeb6813b783e21f134e88e9f136bc81bd6028b5006d8eaec8649d0b97e7397cf67c9a31229b5def1b6b783d74420ad53bbb3ed58dc5392884903c6d6892f274c9ee7147ad9c952a8ebd010583274aba13a0d71bd388e9e57127a537c6763b7b5fa5186921dacbf3484d4c7771b3fd6259244d750801d501881fe3405897a727fe796968ce2fa2296d488b03d3aeb243abf8a50089666781316d0b99555dcea870661e496a4c2830035acb524987569c01cd9c8c79588f3e5fe677de1f57765aeea76784cbcc0b4b6c676bdd4fbc6b86aa479b44d7b59493426377c51be218925c442a503dd66a84377de0eb2965e76fd7932af4ed552a7c4247227cd8de72b075a4aeb535364973d086af6339aa03c46d150eda514031fc359f938f302178cbf8c1fb57d83148d08d13115ffdd3ac577d71671a8994e152bd8eebbd853dc6353e6d4bbf79baa820ff9d446bb5bc0a38f8d77f6744f11add58c959a9d74f2d35e9e549a50adf99b9f87af02f546d9b80f5b5f26c0ba1fd132297e70ce423aecf4348bd9257f2d157bb201c829bb3521ff714f87acd7fc410281994738f129dcdfb37892a7dec76fac551012c94773da2aca54177e89782966ade001a45c61fc570ccb2827f15a9f84081eaca3104911d5be41a78bf308e901af0671e5555d7c6c0d64965392a5075bf86099243ef980da15ed8b80f22f197d68f8417a9b57a5090c74943ee316edc2cd373886ff664906e38e9a8fb841a08712bd402280837429ce83a9c7270b7214bb116451458954406cdd7319b93202366ef2f4f466bd4ddf72d9880557fbc51c59ac9d168871a59cd40b9b0adc54c6564d799820278a2e966fe50a2f720f14920d2306e3e17e0434b18c1563dde3b8ca078472c4f43d4c1e2049eff994d991eca2b2c2b73e6ecb7990b5a732b4821bb6cde2064143c3fe3a8e04a5a8e4974d4c62ca9946afbafaebb4408d9b1690cd30e822e27b9c83cc6f7b279bb9ddf6d96bf77bdff5923190debe712c87e6b96a1afef637f513934f38785e72bca27f61e3762ac2277a5ede727d722d7898c368750a79f2e64473257bf90a3ef50efa978b84cbb16a732bec0e19125de6ad7f4b708455ce052328bdb2c16c538ae2de08a953bc5af3bba461fd15486153d8be43607a994f235a037bf850ddcf33d587a43aa8546016e367f3c354f49272b1f5d88b4eb4ef8ecc9e265129e13a19afe0441c08991924d8c6bbf317ef16bf5359d6142d559f305d50d9425393053b97fc8731b10c695810ec15b05e490dd67717f8267a228641cf80b63f9659196845170adc5ccba4e275b927f3715f545a04b194140354f47ca8a4d047398662b8244d2bc69a5f1c959e53fdb4703dd1f719f026d9bfc8232172996a68a796ef06b330277252f9ac5ad0b5ed1a384b3c1628eb64b44fabae3c82ac832b0d8ef3db517f3f15eec7e0585e3a12cf00539f0d99f84e5beb5a27fb7bdad38e0c194b376350c0fe8dacfa8f03115d8f92a625e84c657bb8d144a072934c9769aae9760e2816768076021035a80848cbdf1ea706689d89\",\n        \"signing_randomness\": \"c690f61416bbbc1c53c1395c9eeecb2c78ce162b6f3c7a14ea7250103bac433c\",\n        \"sha3_256_hash_of_signature\": \"cff8b73eb0dfd1797b872945fa5564f12735c60fc7eef84514c6adfebbb1ab18\"\n    },\n    {\n        \"key_generation_seed\": \"cc500183056c89f775fb02709d12987379d27daf9af5e23948f54a665d8d71a4\",\n        \"sha3_256_hash_of_verification_key\": \"659de235082d3147e2a1a33dcb96cce08f5db220826ab2f723be878ff81ac7be\",\n        \"sha3_256_hash_of_signing_key\": \"aba7a838cb3ac2302f97f89fa04a2e580bd4382d5797061e5a9382f2eb6a963d\",\n        \"message\": \"b417391dda578db454aa8502d8f984fb6cb01141ac5a7f5ebb7435bd0fe1165e9756f5be282dbdfbcff4a66d36e4719ee5d68548a9278c5676956dd1f423daa92f8fc945b79b161331de259d0802900d8fc9698c1b21f6f693a1896a0528d32ec4e5d14cab9e19fb09d1dee4868cfd84e3a584ea0019ae3071f107684cc03425352a08c3550ce5ca00a6320e88bc94ed0d901e098217519ddfbb7611a0522f69ef0b4f1c5a925dc410b87c91c975ebad9dc48b8b2e72a6a5b5aa704db6ab7becd4c0b8e0697d2a3e02837f4b126835d6bc1b80d37c0379c0acc83dec9f4dc387aa62a28012f0a79afe9cace1706647f49c490ae5a34c004921e15f2419b094cd460b11fc35f331607e430f1c2fee18264e8439d64f1c4979bad185052ade2711733313fb9e710956151859e100e4d7bb521e4b268d33cfa5083a67643229714d626a93fac1ca22dca5c210d48a4e025127a47b9daa26114911da0c7ea69d5a0d57bc46d1e78644de6ca35015e5b3d1b3b0269f0075a9474bc8ff574c910ac48f7369c72a7a40a565a0a2167bad654f498e1a358fa83d084150a379a8a0056f3e70439ce11ebeacff683ccca6269e92d49fd0e6f7c663e7e540104a3cdfdc11839986efcf1e31d054c2a817c402801a8a5324b2c6250465ec143ae9a4154b49117447c48dd8114fe07d58d72ffeae5451da7d9755b6051a12aa064517d33edea59f58ab074071777c4c93ee9f5ea719f063577ba9460548a25c4b5a02f82ecdddb549be467dcb52be80b9eacba5444c218e24aef4359c4ab930f8ea1973488bafc850bcb2718ab6eb1598265b2f9b9cdc1daca424c8ce3aa03ee923c279b027c72488273297c1f7bede551e2dde54a4873febf3ad94ccfdbd1dd8877e6abe181f4760672d357a5c4f846d6d3c5550f12b902d6233920f24dbf4193f9c5c07575ce1c4a613697b08b2830c0299623b14659cafcaa7c15e215792014eabea4b1c6c45311417c0713d39c21109c1ecd7be9abd6253ce3470c5c61619cec5c4ed4f1f76df117642d43f52ce88acc3888b937d0cfa90499a5bd20ac9b05717be270d031e4d3ad5ab177496960c6f6baf3ef3637915581f38a2d52bf3c641492508bbc5fc022e7eaa6e8ee295be27df748d2c5cbc5b5b04006d53f7e59f2c3768a4d2df36702e12a45d2a5d0f8a13d3080523d16437477eb6aa99dd0a43b4c52711b5e3b1aa9997704b6158e1fd2821df288439bbd0043d98ee357fc0cf0f915072c3e74cf7027be2bf777aa79d81bc1c07d4e538af6b7244f351298854e31501a3004131bfe73b4f799996d02c87c4f12e05de1d40a11fb0a1f5b199865aa9a663fcf4b7798155f142c33f906895b90b0c4a3f6e144181fe27f52b18c45f7b0fe15bfa1e4647ce2975f269ffdd4c0458322c21f936b4056555f4d67209c18ce9ef4de6f84449e53c84c91c2397fa018b69b866b4a182903d24b03b7a7024959e0a5fdfcbafb70952c5bf4a0ebd06fcc2e1f4c7e58ed280c180ec085e17a128d1448bed72822cbb7844eb098e419390a84866be1296386a4bbd5c8a550493ab795a88747033b0c301012338b0c16d14e6312b0c2de32f3f9eb9d9f63b9f36c7a26efd30d0f22e4292aac646cf56c164774f5c576b535407ca0795ea3abe2223acd59ccb241ba537e87528bd7acd55d437791fe0165920fcccd110949adb553a09a2d65916f7968ab34530b85fe8fe044b9b7321bb5e1345fae0ee291f426b06631c2fab8cb03909262ba73a49514bc80f69df50bf583f2aa9dfa4643374e13a7dba6079cb2dbcd27032f4fda710c5033e3749dae2f498f51f0b8e3d7cbd8b846dc9d971cb95c448ba1395f24f11d4f637f435402276baa206334f76add54325ba4e4d1cffd0fd8387945eb188dc963f17f029bf70f3e4257505479442d318b0d7eae8d9c1bdb4d4bea41a2d0981ba510b540124b729cb4b52dd5ccf39982bba0fd2b8f32109204493f51b4384c82f71ccc43c113202a30691907e75e7776e4f998d2055af51d9bb56abd345ebcef7c7ce8f25c3f622d94cba2c7483f8878b12963c26070fcc7a639a8bad2ad019b3efd52de2070c0c822dadd0ee17489e76c5e70b16fea8a7246cee58c8a4ac1757161d1c9ee4b97cacd77def4e8a6d1c33d83893946d3ce0c2ac42a24acb507b93f2a2586736c4a201680d35aeb8e7ffde08bd59cca8d3d4791e2f21c56262ed8f858abeb66dec8dd49b42013ddfd77cb44d6125403daa53278dcaef68627b3a0ff4e4b5939b4b68a93857049d7622efcbdc248a1af754101b5038459722087400f4eeb24ba3c854efb32ea9455db717db19916a5f04669e137fb56c8a8db4119a593ac7893a12e57b93d4da830700cc74bb8c3e2ed3fd7669c5e522d8807cfebd5f1976cc33549881525b9e2efe48150b843cfde909a921dd101352cc9987f9c10baf1847a06b6f9be07a95721122bd481b855a19e845dbcc768d5ac95cc39c1cd3e5cb3de4ce9c43b15bb083c419b540efb52f6ee3b12a742569b6dcc7b198e3ded958be1544372ae2c18424695fa5de56bcd6a5ecbdf09320e1b78fd5c4afb8e45a4aca633bcb9ac4e1cc5c09958fa8c1690e82db9e6985037a65c91203589263697b5df015c123f6ece7a3459638dc4885b2010ac3ce08178198844ad4764e47e99c15581a5b180e9dfe434a0ce9a1bae05517d3b91571edafba997f91426b268f923ed4f17aee7cbf20e0558230240cb9163bb29f269b261ff2bf69ed218181d17ac7bba651ea7ea1337642caa17fb7d3a914954c0845db20d3f42abad346ed5521b64a5ca08129c26844ef2cab72a075fd7374660dcbf8b5675f612199deec056c2d31617cc5611e4c78fbdd3406c602331e7eb615b7994691cc1540095b3bd733b248a2ee4f4cb2bd5112801dd44ded69d7392cfc65d690a687a6e26fc9798bc00d9d8f575daa76a5496e7a3b891c5f16d42e\",\n        \"signing_randomness\": \"5824111d3e42c01c3d2631c29d90430c899ec553e29c032e2bc41268bf62d600\",\n        \"sha3_256_hash_of_signature\": \"49faaaebf70f932b5054ee45d42c7365662ac975a27a64592beed2f39d562797\"\n    },\n    {\n        \"key_generation_seed\": \"4f932b685d2fa44b0864cc94605e1b51dff510ab8e424945d89e03937ede70e4\",\n        \"sha3_256_hash_of_verification_key\": \"e675b031eda90491ebb30c1cbb5abd92e684d0b0573b53aa29b46b12a3204f89\",\n        \"sha3_256_hash_of_signing_key\": \"cf4c1d304098d50e2b544400f8aa7b0d9071b89354d3a987c9bf097bdaa82982\",\n        \"message\": \"8fccda88c1b129094c62c4bce032b0bffa647770c3c7f77200ac84746de152c7e654959fa22cbbef64cf6885abe17343f6e70b3d2ea38c550ff3de22f411d2732c5f73167c8e5a127d211a4720d13c157e9731648ad6917084773ea5c68a8b841a5949f10b7c8107c82e312888865adde06c6457ab597f536bb64d0960bf20de9b3d9c16f6066ee520da1951a2dfcd1ef5230083e5e4bbf0e6f4fa7bfa743230406150d13389bd572cb9d34d48b6c35639ebb9ba41c4d1dd279ff066a285b5219edf6e8b5ad0204a99efb4351c965c24a7cef77be100506f312baa2f93007f1571e753e4a46b5b6634c73881c5942a018c1cf37f12e777dbf741ce07367b0b020f64ac0c0326f8cd1ac6c9f6bb1c75f1dc9d97f7473848f8df97b45570ec6d17431b5a0aa46b22c0f52d8e5e64025838ec2acfb6e95983c5121bc079aa90396f25a8b8accc47a46c6c38d8c99071c782f00ef1159701d70e2849d50674cade3ba88ff90cdef3052f24a4ac0d3daabb6a3b8142f5e2b55917f4e2dd07c079ae89262d4f2ca17b2c094a5c635ec191eea0f86150dd116f968e3501121f2cd2f1fade90e5dd6468f07120a89a4b996fba8dac6b80f371d7a935186d9c3cc11bf6348124f369b68149c968d2e200ab83c089934c591e5cd7e2794f9ec25a5879a9a287c8885ee88b76b5ecd249c969eaec360c4b2b31068e122813a64540e46c20e181d5fc29676a9236aefbe0bce1bd1cd998318dabacfdb9bc39b00e80b99f62e9654e1ae061ccd188f1d4517ad793178655cb5157cf9706a9d4c2b3c46e53078b4483c68d4d2239279c867f955f6716bffe329fb5674b89cc306c2f1cce0b308dc2545226ed68b36ef2e4552275ec4b115381d7f0974292c2475a3dbbcf91cd35553c491e9f3978fe23c2026a7f3cc59f0ba93174414b88c635dc766f732c9c4a99be584f2819fc7cbb28f426c15f2dc5347a1f5cbd60558d079ede588d91266e193d896176b4fd30a9fd4dd139fd4510a85a6e0c12c1fb4aa55ed73c93c6ceb86405ab5fcb9d82ec0e81796bc6e1d41120557525b66229ebcf7f9487e8c445a7c4e4f23371ab78d6002e1eb7f2307eee4f28a0093669a32a468e5697312fcdca9ec15563fcc41767f36cfc30718d76af1abe6afe9ee9dc4cbf69f76af965bbc8d97fed77034101b650eac0e6dddbb4aaf21de2e8196647ef97e5de3eb4c89ba2330ba14b2f31a7efe4edf98171660fa8ec180d0c03be93770346146e0826941b9081d21acde61c299055a692ff48bf096d49ed7599e59edd7e8895793fbe71c928da5ef93355bab583253066538c286db6b7dd76f93e08194923b69109fa179f178d9ed685d1f35b9d871c59d6a7944f928690791e785a1795d5882120c4be0514b84e022443019036ddf93ca6c4cd71b3f897ae18571be924d8b159e3dc5a221f40e627a8065ae00a2df85a26f79bc3820e7c847968419bba3531a6568b1828098af47b8abe3dfef2a642e95ebf157b1bbe04aedf4a21165dccd36abbf203e30c9c4e020f159ff0b36e1a329269fcadb552a65e966abc1d64713029a415caa1946329bc29966fe6725fbec96c8b29e8bcc6dd7bc5bb69ec8efbe113efdd033867a65863a97811d6c220d60c5a752da14264661b584db5106417e4d34173c34144cd1fd3fdf62b267f21c02f6afa990539a18baaae12808b5012d4dd28db756edd09c22caef8f6ec856c2b7ee954013a268f1f9ab2e6deab925286ce60f93a52e0c153dd0328d5edd954f8b51f15fe3be5abec8593838cabdc8584f2652db3033be28d0587070416a058a0acdbfb4f9aa2139de32f421b4846e63e3b27e8a174e0b51bf091009bcd6c8dcd663787b902036d8a79e69387f4838fc5e88c6193cd6371ed2c5613e1841d8acf6126706f69ed4ec9be1f3f575fde3b079a2d6d3aab20641cf91377a55af32954a6f9b4f39939669e49b459beb9fcc9e2f494f4928b1be671d85149e24b7b97bedd56b724cd42868762ad723c4884ec9399c62a50b14d612585ce47c83720b61e71ddc714bd6a9bad9965259ff699dd395365fb87d303c526dd015b5275438a27d0de92819c0922ac9e27752ddc5a75f79422f0bb403f60babaeb00488b4c2760de683bad9027b8959b31a3d65d1f0a1e2af88b2d8e5bb593a8a220ba6347d46b5062a99567c58b2c67877eadd6bf76a1a1fc265ba793788041d27c6506b71ca197937c83a26eb251a227bf502625da570de4260939ac6c42934b10c63da6c01c2dbbfd7cba6c162a6f93714ef0a7086697cb326e1c0b3109b86073f60d009bb59631c0de3688fb6246ad0f6720d10ca89cc152bbf332d4a47b889b75245620b79492f2685ec3d2372415afb19e6f1aa1c2fcc3fc9589fd1875e17c6c4faff53371b56f6bfcacc729be0c4b708d543e5763250e5a480b649e780c91b227f0927741156ed78a7c6a3d3f24981636bcff17da2bcdea1cfb6d9359d0b2937e272dabfb3e1d3d1422d7d850afe6c03c7aa56fa4b71bf628ce55a3deb6a3a3808d5dfc2d0e0b6cbdfe7cb3fc313600e49af32b0d8a9d7ce050753f4149733ae9a22f278170bab8e04e120cf736fcbc60f3ff5ed5abc7e00eabfdacefe67d35fce5e3f9053532ed788925950f86ca398be67a34113af2b20ec53f7e3f6d8b42f9e6a3fdfe7b7774c1f3dfc7ba005ff8a2848bba3024d7ff5da9ca8f60a480547febf240841eecda2f88976a173a891ee013a2aab030123d1ec1829ec56d00953d549ea6f0ad916c9c482b91c3cc9c3b2dbe55754b9f627e22b88141f3eb327616310680f90111a3deafb4ad391099e736875dd1b2cfa23d5d7bccba7476621d251373977254fe82b7cfb715dfa61582692aef55afc810e04f8f48d1fd200a7681eb053da3071dbfdb2f4de12f1319251591d874e4de81bcc3bd7737f6bf2d76f1d658b31d5982c30312111b54707ec10e02ba3363ab658e5e883ef04937cf8e99c5ff836238d4b8deeb2032f6dfd5a6822ce6a07945671563f3\",\n        \"signing_randomness\": \"da456bd161b209e73c80aea198dae91f0261a76101b07a97b032b6bf9042ead0\",\n        \"sha3_256_hash_of_signature\": \"3fc68b08f8e1f33ae6ac4fdf6dd4990694746691c4b1b8a195bb618e0cb6ca0f\"\n    },\n    {\n        \"key_generation_seed\": \"59bfff2f319d9eb2a5fbc4375681cc7c63932037bf34a150bc8262c7e2cfd752\",\n        \"sha3_256_hash_of_verification_key\": \"aa429086b7f02e56c7652b57ef90154efa80856aadea3f8b662ef0db6ced37d2\",\n        \"sha3_256_hash_of_signing_key\": \"e549b18471c5c87a9c8964bf7ce5660a86d079d7e83c5b478895ac62884d5d8d\",\n        \"message\": \"b4c55acfb26fe29076418196e4c51ff9fceeb15b9354b2bb00da00efd403da4f578cca0e78242b49c400c13165f356bf01495f8e9f20d1c9ae7ead44b69c588db8e599e48a9192e9ee08d8327bf04dabdd6fada763095664bcd37e882fec465277d838df141a100270128971e75fe794bddb91690751884f77ec386f4942d47c04f0ead1e66460b6e6a95dff06fb656ad28e10fc571468ece042c73edcab9ab3ddef223f7b1ea2b358741680371e5332e6b92e22a353967fc433b80303d11696568c10f4cdf54693d5bf578173064eb2dda85f336b0cffe631cbbba1ac2eaf18ae5a85b9e87946efeb0650730f43c278bc5d9855737724da423cf041052f12e09ea747925ad83a532f2d66723fe8b3822bbb48dcff8dba534c3eb1f796f0f46fcea8586bfedc977c89a9866b08f8e22492c4c041a19501aecddb878b7bd9286c841ddd406fcb97bf659fc692a605680aa82557db176d69d27328042f8d6f7ba7adb6b0d01e0a1c685606d2f98cbc0af22a379a1d34b1381eee30acd13381ab8d58bb274bc3a51bc86e37e836fc198faef39865db51f7695bedf165560b397c7cc867f60ad8fa52c7b86f11f6c52847af17895dd7bc03799f155cf2ad8114fd5405b011930495de620a3b0c41b4981ec6708c447266cb6ee063dbf583833a9b67295b6e885dd3bae8b36b8d5234c6710a1258860989b8de3e87debc2524154661c138d95aeb88f80a7bf8c304c4a15416874ea6cc105305b7d5259bd5b9284c50323f5e9b9d75195f168ffb6700c41aa51c88bccb97417f2229807af25bda5684ca9a3360c8584becbc8818140a743fafaa080578014c2e2cf63ac2a87859656ccf88b5d8e68adfe0451614e4fa3503f951f5c862f91a73ae931cd32e50c4d26ed40a6dc2f76ca69d5f7592d64f659f82a1d66508994ad423767dfb2023e4d0cddd41079a9e2e840a3c68b390b6525d5d9478d785053d8cbcbb137fde06d4f7dada2bea12fdf8282432989ba7a94dbb21b982b157e16a06aa21694022e8e6367fd8972e76a5b56da9c677cc555d02b0ec77b0cfb5cd9c331683454cd85eca85460a9d4b4aaa0776ca4413af567595c4bc63213da4bd61a1bb75c18c4a134b75ed2c80ca4fc485c301f64e072920b4a787b24fd2271ff9677a0053f4b8f05124c0419c9c5f38e6691e9fef7f832aed02e8de83d1f543753e8bcd0fe7a7ec914b1c1745cf1e91d821ef1a50a06c465cce213836b73d498bc1a755bdca451234d0c31049ff494ab0d25fd785d205a7423842664a02836c966bea2eed8447dd6b0134233d883c5b8821ca48a50f70eeb1da0b56788780cbeb8650088b4f9b570178c3d74bda4dee1d9ac219976cde7c67167edb58aae830500fc8894f26a22c99b3b61ba15356f9c856a5975d77f117cc097fe981dbce5fc68838faa660e1412a03b1f16f4477a69f045efcec34abc3be3d5f8297c57f4cc3746ba9f61d17d5c37d083c1b27844f8791e330a595bb0e660ace1311d350a83baa4caf5887c3d8cde76d9f4195c8f5421df8ac074a62247d97ad0a13228cf81f813035b710a331459fd97ce1e69649c5350432cd70a1480d83f34405b5bc88f2d4cdfe34b78570df9aec67f3addede55c724fe05dda0f0c4154c694c25a5b9631a6bf8b4cecf2c184dbd3f4305f3dbf3a66aac21ff7909749179619b197bd7a6bbb38b48c26fb93a5facc3c83760aa778c0e721e8110c7b74fd3778dcd2b0ecf704224e825319708e84263221dcbb8d513edbd3475305b718c8bbd23cd34b3421fd20fcd90b78b7bad46fdd618b22db913f0cf9e0e92005903418d0d213f552db8b330f851294d0f3918d2c75ac0c040cc1d00b6a7783cfd8e6531edbcac077bede82cb5696c95bfdabfb5a454f2af4f199ba5d0c5b84af449066a9e4d4ca10f243c0e19dc7df3046fe4e7fa4789b0f77fb69604e4dde264bcfd400af8dfa1dbfeb2849fb0265a58e3dca419d27c7c1b884cebe1623746f6bce9475591164fb71ad901334d61aae49ccaf10ffa51c769598dc188deb51821bda6b06a1c054d5e83ca7d78ea96a18607f64b40d206c969506c365f20f7b9224281b566794ae81f093e676660cc5fa5c9737f2523f163da0975fcb4c80eada7175ab643fc5bacb6a09a585328c9263c6a209a102f484f3a68e1237d8eaeb3b97b000722604a82cd8e3318538543e59c1b4f8f0ea19684243b96592b83c26910bae20e449e1a6ceaa3b6ce0b8c5c40887009b1d24a2aeeaa76d0261a7ef92accabdb8609e478bc6971db2831b60cb86b0db09d2703e4182c5312345f182952c07fd92700dfa77577ec4903e32b85744d5d641be4e94a4b4a9d6cf2295245f86c20051112dec260ea84375fd8cfc8603832eccc70c0f569f02b97f82d7165c8548d3593426b388829cfdb876d313b99b13a2bf5dac65c670a172e56e54ba42f0e27adc09f22e1ec82e80703ab8fab40ada919f5b390ea30bf7cdbe3ecc3bde0d20a97fb79fb4b7011521529d978491fec3609f2984db33ca578d22d698827d2305dfc4635ac0899a4317fa7abe9b23e4122e67667cde4b6a9730ef788dc414da230c74591563ecbe622257c2fc25ceadf8a1ca77aa533346807961c394ab90174007ac14b211bde0ae697c9a7fd066add922e3ecb66e29bd8949a172dd256e149be3b156fb43518c90682f7b961952b7dae5100e22377cffef51abe4ad4582011b7c82f5c8e84df9c3e07550823fd39ea835e7a58f3c42456a57366f055eb65117048c64bc3e18c12730c1516c85af281917daf3384f252bb32b38455a76b1c2a1d7ee35eb33604ecde7a3b9061073d1954ccc256791f4cb675df2a5b1a90bbabe02f044671928fa2344e9a2be3889db31aa5cb4e1bb21bbed29699f52a668f2bb4ca7503bd63e952605833ffe183525259acd3715824afd15d5791635829df307c78e76418f32cb9d55247f80e78384c5856133faf210de219294f9eff26aaa9815547d9714217cedd0ad343c24ef45f6ad824f4d0b25888285dd18768f375e97cec30a3addd12f0b4bed3f4761b651894c4d4c0\",\n        \"signing_randomness\": \"36549cdf9a7962befe3b25626c3c863e19266a86a808af8169bb45648362bb7a\",\n        \"sha3_256_hash_of_signature\": \"77b0890219a4281d5ccb39523db4dfaee4ccc12df4530944d96d26ac761fc3b0\"\n    },\n    {\n        \"key_generation_seed\": \"7aa85b04ef52a24d71ac238bbaaf2cb5c3a1e30e63da72d6457edb88ed798993\",\n        \"sha3_256_hash_of_verification_key\": \"cb190499efdbcdd25e05d0761ac8c71b29da2fd070f4f6235ba203702e43b9d0\",\n        \"sha3_256_hash_of_signing_key\": \"3c06e41c96b1cb20a6a79603e06c30faa0d619d7d88d2083e99de472edf68aee\",\n        \"message\": \"6d10d72dce67d257b3e4ddd086a77837604443e042672984dafe5e209373a5de4490cdc870dee4d91cbb29ce13b42da7d10f0eb7425de674020c8cd93a6d261628b09a14d41ab0dda98f6951614cc15d92b3f6e8101a29d83009dac5979fe7fedfd6a52097247c2797a24cb0c794a66763e131e63f25641e73f3ababfe86128f1c4ba0e8f2e969c536370182935355671ea8f04bde1d20b8f82ae47752dca6bb3c38e962a0757565bdf6b60eac3fefa6954f2a53a87bfaa994cc7d9795aa0c46faabde6531d70bf852d5408c9f92a66061cc0cc8909b8396552e716d12935909e7b601d175d74e41cf4ad614ed757c5733ce59d3eda69a7661b3faaa779ccdb16312c996aca0b1d53d30fe0be70827509573123832c3ecbda80e73d2adc97cd1ed3e04872044b4d29b28f7cc5bc98d27ebadb4960e4b162e5543e126cee59e3a8f00a7e79ec0c7d89e271928efba36d13cd7f42b6e9ccfdd4b9497bf94f9908032975ade56e504a02e7585effdb7496ce1618a4ec72ba5126c59d8b4fe2e55ccf24d19dbba2fe352ff37fcdd54d7d18b606a0e515d96cc0875df8a366e9f3e8697844394649cb384fa7f4d471959e4dfdd12ac6d85888f626d47d978f1cd7068614e99eb9ddfbf2aa6725352bab2bc7819cadd1f0c3174a90ca52f0c32360c09c8735220a0e9726dcad069ee31bb70f2770fa2e40d59e38dcd47d2927c25aa44c5f62ffe13da2534a4d1c40687b99d6501790ed490a76219dbb0881ad38972ea7670c50e3ac753e504ec1754ab20b5252c4822f4c7fcd068078ff65ba9a228781403f2e422b3d6c915908f4acffff74f623851abaec4470b41c42b45ff1a0fedbc1c5502eae04845c9411f8cab541c6befaa64ea5b1140487fedb2af5aeb9cdabebf33210c79f55f4c57550843fd587780897472aa93a60e62172d74989e24292be9d9ac01cb324497feaaf636ec3b1b2b6479df35bc1fe53365096073da80bfb49e9e05d5350557fa2a127c1826bf10933e1236bfdb4795e1f1242a817e21a6908d8e8ad3138f3e8a55837039aefcf48853b37d4c03841f67059c6db174302a890901b7e197b3a126ad82420f7e8df8b218ac944b2ed8099836f664a12b1917c070d63987e8a67348444fc61b91a6ed43d4f99da04405086276e3c059bff80e2afa91b2a9bd8c2daf135f0014079eff8bed9ad59ce1ddb3c19d10edaa440cbf6604a899d83de3f14eb696586cd7c831860eea5806b7195955e86481441204b752c5f3093a388957ac5353cf5c4c353a4038df46ef796d7d5434b711977462b30ca72531bffe8fca1c20fec83117c3cf3dcf373e8b9ce85c5987e29fbf87fdd9759b384e5f172ba20183fe24cf65636a2a37ee9c1f8009ffbf51ce942998f6d4288e6bac6f4ed7d2d5460ea6ebcb65e80d73025fd4a8b05781254af1fb4f6396e340612da1659e664cfb28252ab31b025ecef148e15e21213338321088a3b42e9a1d4e0cf0279294a4bcbd7fb07c5e6710e62512ef9afb6789419048b70f269a58cdf6d7809926d4b287710c66625cd5015466f4e973f5c0ea26b5b40e2f8a72bf8e5f639ddc3d9581f5f0f2d4c2cf4d1c550b434e122f01e03e192d87e24fbf750f217fe8abc6baeb2efc317bab41a6b6d2751eb43638c73134b9cc2eddd3d496cbbe890db75738afee6b4e2d1517a359e0157a2afa82afefb6480d22dcd131305d674bb352decd9eee1876e567fd766176190a3db7041ca9b8dbd6dbbec98d1c6868bffdb81b82418210e241bce7163b7b4c4888d1c540bb4513dac37510914adb4639173d48f355e97091c9567ed08732e14d82239cea10be5ff00008a7dd4420f1fe4f2ee647f1f42a4ca838cdba24dac8bc8de6aa6fa86802069eadad937b40fa567767072a264fcc46809113a88ae9e52366cd946f170606c6b4d9aa97fff6a6d797779a13144fb0d3200dd9554601d16ddc63b452f7d017d08b0bc6abfb4cde1ceffb31d7e2d79ce3e9700ec8fdeae18328e41980b2962ee5bfadf3e5b437b8e195e94b00005cb181ce2b6f41a6baebfa51eebf38072cd8969098d9d16095b2393a96b91e60ade95015c2c634c676ed10099016412d7e5146e8b404795d6bda6dce1eee6e5df17d6a0b4ba4debb6afcd5d2b10508f51e69a04a01207113848f525dd0e396e75b5a4dab61801a5a9fb1d25e1025b0d43ffd77b295f2536eb2075d6c7dfce1dea7624639d549d8b22ed3ef8bb2c3b97813f9e4af4eab08bfdc9bc4b213d376010d64020b6beea9656f94eac6e4c7b8a5c55052a87871bfc6d8a20a357ff4a1928309c11874decdf0f4eb6486c982e42995223c160c684f91589ef02458e7682695b911599f04f849f5331f91feb053d561b9a7e5992f2126066444af80a337f8c59c7b43c06a8e03424f7ed1b199f99aa62082f5e8c62eeb0f0579ac6114a04880dc1452048d9af1d22798f6733d28742eeefcffea849db064fc7ff01f0f1fc768d5dc41730b98f0346289663f8936cb0bc102a952521b5bcea6fd20e49d7b4c58b159bf111e4b0336e11fcd7d07d0ab096abe40abd691fc85ff904edd1a8a9c619596cbda6bb15df1e861774897a6036f287f7d1e3f42645ac5d9157ff14ddd6b9833ef0da2b422e9744068d16d77268268507ba2e4c3200c9250d441bf4436c5d2f6d4a7aa4286f77e940450717338382222c47f923db38cd1e20028d69c7030508336791cc576fc7b69673ff13a1a474bc0727d93f06331171d7cdf5daae73aee5d41c2b830efd1f659de830961ae9deb839937986dbcec5e7719ab2670cee86cbf7c04dd1cbeef503b5d0cf69f18d2c0267764ac4e5784bd0e44205507e82f8c7d4391cdda2a4983e981394d74b00d4b8ec59657844b6e382a6c20a96acfec6986800f5e5fa9729254bab17ff7683579c2cdc5c4b9b86355bb7f2bebba86e8df295d9ab6c762aa8f72fad41326364416f4d78b809cc2e82cd740ea277f15a4ae0056e9961e54dfe3bb8f4a9930017d88c3061b6eba25e66ca405133a0b0a105d794559741f139a702dad1d52af42dcdda24a6c637b71a061d5c14db108d0aba3a576e896df980ffdf66d8c24b7dc5cade789d02d91640fa1\",\n        \"signing_randomness\": \"dd19a7178e10aae315a835feb77d4c5720aaae8cdad01a5dc163e893c132bef6\",\n        \"sha3_256_hash_of_signature\": \"fb6a845b21507701c7abbd175811b1d32133575f029725ccc532fa986b08d08f\"\n    },\n    {\n        \"key_generation_seed\": \"5eb37aac625a26b562b007905c12a73680622f7fc63f44d028fdaa3853d13b25\",\n        \"sha3_256_hash_of_verification_key\": \"f2097d0bf0908e5974d87347a9d97294ed7e95f65345a14b3cb09e39da219eb1\",\n        \"sha3_256_hash_of_signing_key\": \"860c46b4a53b3d40e810b3b3cb2b913c7e5a6ee903725d38317cea79c9e4bd22\",\n        \"message\": \"6b74d923f06203a493fb1bf164101d07c0b54d0e93a19b0fd34d21d7b2b5b883c7d7264bf4a42e1d403d544e1a435a23f20857110d8a6592b345195efef37993c4f113bdca8b54531df85750047b9f64bbd3e9289eb7138a0c80f6a23f4361188ef4ffbd00bb2460b246429aae429c00408f8e0bc6e38c02fc24f9ff580e8c7eea3b375f32daa1d6afd2623a85165e6533f030f2c88a88f77fea9fa7d614c39775bbe392aa3bbe3e3d540f7b10f6c0e15c4fc0e804f2f070dd17c25a0b5e910430ddb93ef4873427d83d92ceba71801229abb484da33b604519a08a53e949d0da6bd1c3af65bcce2d238ebd7a0ab5ee96e494012587ca5bd08dcd31f2866254972baadb8370afb368c327dd28f4312fbe2eec2306425ef85a2d73dc57108bc656928e81a1947c04c17c697df152d8cb4f07bd45f45bd140b967d0f058ab369131d2c6cb0c9a7a9aa21f511f2215ef74f6bd99574c3403cdfe819ece3d0c7a99a0c2cd7a59c7e05935c263c95b696ce4e06137e52aff66ab1a0685079d81081a208378e1de16ea49036b8908bd981946eaf821c3f759f3534c6a59be040d3119474982ff325120a9f7fdf7d4b0d28641f52bc4eaac37468182ae4b6f14cc9757ae9c42069d388214da134299d2c1122eac5a310a265588d07238f88fe19856645fc352f669387a92dcd33f96ee72f7df8daad893fa4725de9ea9f558fc9223fa4205fa60ce549ce7f3228eaab1bf39e00d221689797212a178ae9310c2bb51d0d482fcfff2a6ebc1c636140e47b22179369ff2b79d120061365c764ad0e6d1735cd16bd430baf2c90c08a3f4ef1a58c1a3723aef9641eb5ff5d71f525fd03e28dbabb8c50a1669c81eeb25f56734ad0d5eff8183ce65a640cc686506f0bab656afd1a4186095c04f38be3a96255c39ae2367119cae5c2efba36cef814fb4340107dbabd4a8adf95db200d6faa76dff9ee89f09bfa927ce26d38d8f1bf675b5d08a2230867bad34aeea976b82d8de30902d171390d9e70fb498c31a983d425c37f1a5a4f816a4638f451730dfc293fe4b2d598d3ba8f5c63a764d20ac9ac08eead6f44cac8fa7184a0af08e95b1855c814c72503362194ffea74a15312e6b1bb67f902a7f67635f1bd610baa58be69c5b6f2ac9cf3f735d926d219a8d92f9eb2d7612ea6b55ced5cfa50fe855feb24cdf5042c80fc0cbe4408a6f4d0679c876d4d0e29160d258d3374c5283cf51d948e652a9dcbd5a57657e6314ddc47647b6eb981704dac596ca06faa8c1a88b74ec490e5e6fce14e4d0f35114df538712afc050d645c3ce9e3e994aba891811e4842574baf2c19fb64e983eae9c02c2c1e1d5addfccbba3baaa439562bfd31e15492513d9ef3527cee6857799ac4cbaf705ef977c617d967f70b87a5db465f8cf75cc8933a14246366f8b4ba88cc52c143830bc287545aafeddb89608c0d9a3e050a58bf27c9853b7449974e9c9b98d8040a0042e15874b41862c80cecff58c7fb566a5a714dd15cbb25d1912995513f534a4f7209cdc30bc8f35cd165b56a5949ccc00be4e4908ef490a9c3ad9f5de3d3c703218a88754386bdbf98dfda87858e35597677b3576de27c4614a0f8c467075a686655d90a4ded3d5855568cef27f37d199ac5cae1761e5082c4fd33c5544bbe433013a620a83dde9df0e9734b4121eae13f8d58c14527aa52fac7b177e556ae7e4d928209db3c11ba82abea72fcc1a95aba71e8542dabac3eac5496fe5e141dcb9c635bdf64c2d24644c524d761737cc325a390bb9795086c7da621bf3fa166bb4fcdee338433332010e2e8b28d5c5647a1ab76875d837580fa29dfce44067145e19b12f726eb3767299ab8142e498a3d50040212f52dd7907950f5f33a133ccc224b608240a6ebf62be1ecc53db6e1a5cf709cd33a1ebc87b7c6c66017f33ebc734e231705c4dfaa4243f6ca3e625982e6524a4246f2069cb5eb1dcbe304c5761f641127a983d660c870c093c784c7367d819342d2f50dfa12d6acd8c125d1a46640db54c932b48010165d21abc320ac7e170376a4729690a01a87aeab9ee45617c59e2ae6889360f862a742d4785f4c38b7d73f9feedbb9598bc8e0683f744b829f8a2402d6d375a75e0b7eafeb3ce19a010fd0daad1e78f329d7b7185565f5e9b8fd455702d27912d6a7fde72373fd444f7297ebc374371c6c1ded57123fc6d1614b65e23cb88bd883f0579945d30fd74b3c533ab29cdbdaf7b480a7e8159eb2487f7c921d6adc5a125d38934e7dbe014bd760fe749fe4ef88c8e4e6b3b92a806830a31d00f072918026f0b5abfb3cb4e517a6809b2c5165f1e9d337d0d7b8dbcf3459c77f2f2828940150770c2c514691cb1e41018437a894e98dc22253d1b4dea77a9a318f9f1e90d7be8f87566f572338bb0b4ae771b71e55d2856307b0f876c6a1e591aac05ae5b58775b107e7122107e43c0d31b408729bb7ece4894874b17290f7167cd8f6ec2dd3f110dee6127c7031996823cedffca8e9ce1df170b1b633b1a6d7bb010a65649172efadc508114c7cf8c189eaf024d431f045f2d2a8b48f413b7125c5d182be16ba1d7ba1a9926bac8284cb93c19e529775eeb194edd334f4f32f712023fc0b28a3327d167e81b08956056ca2f32562c271df32a29dcc50eeaf897431ecf7ebdbafed53cd43a28352c1861b18366355c423335e4b25f7a093d89724e94d1606671babae09dbc76a2f12d6096e754fa015167dddbc8d58bb472446a809e77ed17ec9759d90a911bb01b8cc739460b2bd5c663eb8cb5cb62403e5b0a437f4a07e5663732739a1c34b56d233080712e62b4e338f9993acc7e38f966fdc62e843f7fff6ee0b5ae3d25e6366888e1b897afe3e14e6e3d879a4f42de78010589c333b9182d6e0bc3cffe858a2f9f0ffdd0535b3539e764b2b8f915a52a2fdf62e0446ec4d01ec9d49e016c39b0b656df1c34ae0d3fc2c542e4a097a6a028a819fc12fc0d2a1b3a200ab44cd49802bcdbafa85eb4427bc7e0f76721708ccf66b67eeca8188eaacd473a32007d7a5245f3e9a1ab8635a34ea2d6f94854d0c362f6e0532b4e768ed40745dd27522e01f93944b757f7f3da91ad5e189f2460c39d6ee99d76357045d43cf89a6e4b164b169d2393b002b69e7faaf9d39ba\",\n        \"signing_randomness\": \"36bbca07b1e607f1175c8251dfa3768817dcf6dcadf0742e0bb770d167037855\",\n        \"sha3_256_hash_of_signature\": \"3d39fffced50a66ac72a29e51ec4f716f5f7a301f53043c8ff37da2a5793336b\"\n    },\n    {\n        \"key_generation_seed\": \"bd5234051a9dc47c21fdc6ae50e9c9851274e0bdfbf6139518439c983a7c2ca7\",\n        \"sha3_256_hash_of_verification_key\": \"ff9edc855694f8f7abdcce1b5ff68303132cd0b2186a702dc424dba4731ca3d3\",\n        \"sha3_256_hash_of_signing_key\": \"f1984577cee151286c0e9da9efcfeb41d2a6a60c0a08c9a005d5172b42f7a0a5\",\n        \"message\": \"5bc8e0d21ec99e9112eb2638fd0ad8a707b1e003e755bdd2a9fa3ae2a7aaf2dcc7840e20337975355a8378dabbe7fe55c5df23a1338942bae3efb19d4addcc7db756610951ad6722f69020206efe3081a1fe3825c00f6fd2ea4523fd07ca7b49bb505da140c31b30d4ec13ee63e892627bfd35fbc996f99a02ed48f523ac60cccc8c33166a65e8b2cce4ac847678ef491c191252ea482470be12f534238448058ee7cbcd906bcb6f4fc827fdb60b80f499795789aac6c4d9ec7ec6516973ecb8359d87a85c2141e720816daee58ca10020e570c383137ef80ca87cc1035d046705be7ccc8c1221d66d1c913eda9aac32a57362716f0cde0dafe236bf10f995985d912a921d97c218739eb0737ba148f45534c8ddca59ce1ce17392e9787d1cbd541e9955dca4117e19e34e17c462ff1ef17343462beec5e2ba97b38c8d2685e0320628744dcf11b808abcb23b957dc52ce85ddf07398faa8d8b1b832d45dc8ec8e5dca4d5561a796416039b68dd91607ac8678b313dd6c6fa7079c3106b7c10dd3cf738594ab5b81ad3bb10f104c644d034d9105c6cc8313ff2b78e9e341142a9df701d92f998b41a1a328645bbab771b6ccccb54a49ea39cce933ee3bacd49ac57c01787bbcf4c0951e6181f97a40c2cdb17db23cb9353c9fe6fc2e5e4a518646ac5e08c1b7f863cc37bc08ba0adeade0c97bb6f339aa94f7b8a52881707baddd687937329dfe6d5a30e68e83320272515a45920451c30696caa9e9f156617d2d73413cebcca339e9cf7e046fd14ff8f3d2ed92087804a840b03b892c229d2b9cad67b020caab23e37a0a7290f5ee31e92c895060ed2b9a527f0473e1e73c38e5addd2eef2a73376e484d50ec6d1d0e43d09bf9b944ec84552f76887f6dcb6c520f042e61c87634f3722334aff60d55b82d611e90ee25471f79c518ce8f6fc3eb650193fadc731ddd4b6376d87561586e1048efa5f4716c3233f883bc072675d37dc814551a07d2604a3b5cc59bc94ec10b3acddf3e87f0f5c726cd8ae6fb77fd4898f430d64efb56ed05bbe0712fc439c6ec8448a4bc07e51309898489e7733112e8306a6fdb7ecf3eab712a5da0fdb08d797b398fcead03de06e863e3417412e92163877ca750434a282ba5656900ff372182d95d08c87ac696b7faf3441ffcb30527e7b285ab22cb3bb1f60c950e4c1e3c95b28019ac60bea73c21b9227ce35d6d73c7bc159b0477237245ea5655f171501b8403b05e015d453cb9b1fde6a2c1983697f89b7a2f7f2d04fe33ce5cb063721943591058c8ff115fc30472dedd1c3d7ee2cb0a9d9b518040621fd59b0acd9bbc1fd99c957270866651ff7f33e38d87b45591c97c3656f2cc03e2567f171ce92f39e878b1b5ced150047813352f927df8ca4fd7d951f017bcf9125fdadf4a3bb2a71ec57dcdb929d43bae029f1697278d64ec090003be3d0b9364e1857bd08d674e435783a30f4ff4e5a6d42ffa21b5196d879799a2f57fe25f5bab05ba51335c0ff46ba0169e2895a39bf21bae62e30381ee86b8ed59eb34114f320f02a81d7b67e7f555798614c9e7bb48e080a8675cc1c7fc0b036b7b077f11ea502af96dd4a764ecf5e30ff6a1d398c10f31d61c5abf3621cb2384e2d630888c00f290d56eec9d37c48b33f570d5aba6cafc74beecfef073e555b291ae54f7da45f6b75d7e0b2ce2b978677802b9d81e8dfe6514a6aae887e00fb2086cc5b336a14d99b88797d7915c306e7930a80250602f76177b7110663a291b57980bf9771db8138667eaa6a6146d39a35e61ff3839705e701299b0482b5ab815c0648b11049876a780d3dd797e36ac4d877e522be25e894df9483bdc00ff2b1472e948132f6f099b25300d94313d8a5c5f62cdf0e66b59130b060b1c1c75ebd59a0bd1457e0ca418fc78d6e1efb538ba167f31f071dc000d4d7ac502944ce6689eb02ea8954ba1bc1d10d0cd28d9db865468de9725f38c9d115465177a388c83f1f54b58834a51b793b7934b4dd6283bd3771f2dd325eba3d63aac75cfd834f2b4d0d947bfbaa385def4119bc236eafd01eb273a988d5afea31e2ebc0c582a11f10cf6021ea915402340018e596fbfd49afc01da59957d4ddfe1c618a9e517896ca446ab5fa9e7fe0f86e7a35d519bfe5c803ff9f81c9ff42de50ffda352edb79ee178be120b31c210884b1cd76f22e1110344d3d08fcef86fb8ea1d8db544a0575dfc0f406ddaef11f488b2b32b321ad157308dbe5904e9cf3e963c66408634a5a34dfe197e624ffe411bda7bcf34a82c15a87b54e900910bc125b8bd8c44bb6787008857a85ca73738f02324e354aa36c7d09ea6737f37cec2bfecd7e2e4ed2d1de3f98a0c4bdc4c215c4addc8485436507c08351072b2a259d221e6e8b374d19ee15a9222287fef2ef82489170ffedcdd3abc90a8797fd5b8ea6b5b699de9ed2f8c918fe07f7c1cab34dfc4e3200a5454189923685720779e4861b419f6ad097ca837c1a9b7b636fc6c9955565ebebd079863af058d6dd432566833e7c90635556cf1e2d572ffc256b34ea71ec7af49dcafa09c8106713abdbf6664a685cd1f461b8da57097a33b329c9419cd5b8f0a14d3a3feb1ca746cb1c5796e4c98f78dc3a6db6306a140920b4e5f0490ba2bbc303ccd240247a2b83e5ed0e7e34bfb0e06a3b99d9963bbe19a8c7cd73b05985b97342c03cfde64d70f15f18d2af692e3487cdd693ad37008395b8344f0e7d5edd92220da136e6371fe111aee7f33bae92d11234d59c58c0e3d606c0b72bd52cb0840d45fefecfe726d4c9929191c4f1cf2c1091df681fb9cc4a77bba2cb8543b70aced12ae0498e0600d5fc1fdda34d3f249392be4a3f9f94ba77e1e9a9c2f86067e6a7bd31004d618eb80d1165c6ce58c64e1609c028d1966203d5ab17a1033a3076b1052f7454d8503c344b857b98804ef6557d74fa4d9310bbb2fb4be6e86e5913cde27c0cf8a9b9e67586b1b137e3eb6d2f72ea8cfa75897e44d89157c5365760333567d5ecd0090e06fcd4d17237334d8393a527c0ca12c4560b2724c702e2b7bf70f6f2923c7d3054d7ad65fd8daab6373ec96270027cf859a1f07e421464e1173a01675fd50681456d18bb5d9646e2e858991f88c47e2e60465787f24b4b6804eb94e3a59e13a210347e4fa7c132e6fcad0c6ede36f2bbedacb0efa661ac1beb0eed29c27d5\",\n        \"signing_randomness\": \"10be13745da424010a4f901414c6f585562b5aa748ebfc2151868aa90e48051f\",\n        \"sha3_256_hash_of_signature\": \"c38dc733c3284bd304a4fc01cdc614132b4f7f6807c6facb83820821e6a831b1\"\n    },\n    {\n        \"key_generation_seed\": \"fe9712be4c4b2729f37d1d25da1dd312b085e9fc0b2d8c3190bf3eff3af7f26a\",\n        \"sha3_256_hash_of_verification_key\": \"eca97e12fdeaf803505e5c559b786deabf0eef20817e376b5b6f67b6e1375a91\",\n        \"sha3_256_hash_of_signing_key\": \"2f7aa250045f2d26da4e57b96cc0fd6401477cdb59e433bd1d5501413534f1a0\",\n        \"message\": \"382ed5fc4109efdaf3172adcbff70a9344fe980dda36bc7cc4607f36c6cee5d501555c63a58ecc6a9abc51179dfab92004e367b058f58bc0c25675a8fce00d830f13ea9463b64d1a5555c6cf8e739eb2ab16ed09e19583e1be6eb451ebcc4ed8e8cd54c6f07b42da2c49c7c1e673cc46091c3eda8ccfd45989fc6885792b8911a55a47d4b84ddec588f8712b066c3a68f37fa98112cf2c903d41f09fe812ceb7776cdb3cc73dc61952980aa903ae1d2c301eb8529f4db1d21753c9c04eaba92f5b11bd4885a01de79880195c0f8df55deabe0ef979ffbda4dd80f644c18ae179abba963a5437088f2f5be1838d3fc223e8fee7995a49f54d2927de12cb174d1026329f76b12fd28b074fcda2e6729c08aedcc0bdfab3cd66b42a38066d25440dcbc8eaa5f630586cd15ed356fe8f54cfefc39b8bb899f76f2e2ae0e7687d98c2006b82fe82f1ad5592035172a3cf41001de8d92674c5622f2b78e4fa2d59d8738c7e6fe8ed4743c3a0e89920ca96cc27caac62de85f5bb8a5aca0b1d367eba76fc8af8fddb6ce857485fc268686a977ec9cd29b2c6df38f059d28e43ec4cc3317d5352a99bdc90d590f4992463bd98e0cf5106e39ccebe9bb30b5200576d01c7ba85f8cf030fdc245737a8bdbeae04e8fab1ccc4d1436c167fb2d8f0f5250cbd7576639f3c8b6d4c73bfa224a284b6ba1ca9fcb915f3a4d1ab94bdd238f07f6a1b83651ddef970bb55832ac1ba49fbd5186b2ded8f6d1a0bf463abb96fc25dac64c483ef13bda7af41f7d5420a531e818da809080ec9a9712ca0d6cc63f945e24f5bee0c4b455666e04acf76843edbc7a484ccff9b3ff04575e92e41f57b23de76fb0afb8209fd02da0410fcbd6bbed7410da76c67264784904ed441b1d55d9a0ea305c90110e687dfa4139a6102f6e4f84c4ebce6554c9f4c9954c546c23c9f900b75d4779d1c43d3523b50fe6ae52fa2edebd41fbe709331fbbee02d13a68b7563a15ce815a60972cdae1d89a1faed129bbcfb4707b970d7b8a9577f17ebd227439f0d77c2a0ff8c731fb05bddd20b3d4951aa50fb99451be7ed66b69715336e4a2298677fe67d82c28cb7f657bf41ba275dd99c08924a36d24851274a176b2cd80f2ac74fc70990f586b9555ab6401e4a522f882a64025ed73c0b5dcd105a08b539fdecbbc5fe0ed506040921079420892ab059c69caf09fe1e1731565d20e798725a8fef2ac6c170a72ce08fde5e686e07ee84aa7a6e3aacb20fef302bd46173c30c3c616befe7eead714b921fc568368b7d122705aab8a3ccf5a6bd47025dad3e5339382364373f2e325b432f54c7ef1d341685e6ea16901d2b85f6dd2a120b703b05ea4b51c391ec4e3e0f0e2f92bc5e1831c1a3735c27c081a22b524cde77574ab68bda2175e2382dff3bc3332c2a9c98919ab81378ca1b9c2443b2cdb73a19b831255a8959c12d945ffd37abe38a7b2c8d0f36352dbf0c8cf1e4d4e9f2366b1356a7394c38076cd7dbd185e1d1ee6cc75a7b5a1df0a449172b72d4e62769da891347158f47fb184b26c89256b225f18d322284ea050cb98eed7cbbd5358e06d3d1ec31f90487f985e21877ac6594e3ceea2796d6d67a05e111bb17ea00bf4fae67cb99b5af28c474be5ab5a55dec367ddf98b1353ff5e3c9a79e531d0706a4a94d4509c62aa0dd62f389f6a6f6b6d1963792319f658cf7b56c655b66deecc752b070c5fedf33d16c90f06b38da72b3a5883d352619b84418d74b3947c0af8dc3fb4d82e76137083417fabcf8d6716c0c1ab372bf544f9d67da65c6f9e5d24046f8ce60963d60a6546c470862c4b7f6e0ce1c21e912cba43c8cbccf5d8c01b551fa2e150ff8eef87a34140d4d509850e105b32427ae2a32ef67409a687422a744e6e5ea26d3f3aae558b8facf236c71a9948ec6fa6087525583e1f7d00ed338ffd61b0e49acc543190e3cba1dcd35d8463cc35fb3877847fb3c0ede0c4f5ead0272fdf446790f44fbc6ced75267fa6313c9414daeb1768375fd93eff2455bd8accfc5971efbfaaf5d8bdfa99cb3ba92063c5c82e7b60629112e39e8658b71a520da2959c6b97cdf21570021e97432165b1892642180fe62ae9a570fe78f4048ca1487b4c9cadf887cc4bb472d1ec8702b5a1c61944408b7d6215b3a15ae5f151de53af96ffe682570a497030f75e62a32bbe612c0de3f9842e21ec99a96dd487ee23ca4a95b5421ac5c21387830866b7e2290d6b61706680454a0fa8040aa65736a834b03e06d8ae50a421b709098199aad26c6e5884c10d0c1db7713574940b73aeec208805dcae7251530cf7f69457c36aaa1e2521ca78b97ca6df827dea589b9b6c43322fa6620d9fe845a2239e1eaab9a865f345d6db74e103ee02d4deeff52621e9c3dd7697ed99024bd4190a9405f71d331e8e10c5e819405c1d79d3070a7efabc8f0f38f7587715774804aa77a938621b0cb92f2e33115d6e357ca9388bdd1b92ea70d4d69f2d71fb8ab1c4b8d0cda45940b092c6f3b9acdce68d56a06e889cbb37145ceb58845f0cb37c03a3afae07c5efc629473f7f51877f659a7e27e719b1bed2d47e5ae761a53a207b98682d9bd9f4c36343053770ae580b80328ca536f88854a1732dbbc5c1848ccf93978e2af8edb38c9bf5aa2f8b9ac6f9152476102b9effb810adbc4aa566c28dd9de5b40714d5fe79bf047eb215851a466247ffd215df47f43a44a1f49417147f8feea3d5f66d1816f435218365bb4bfd48dd5d5f95536cfd562440dd1e5cf33cd5cd376d79fafabdab73473eca026d8a5ae01dec82b545fc78961a2661c592d9d7a3919e8213101b5ec03c63655a0aaf8d583e2be94ef5b59d45a7b84f4b7313f6bb87ade9a7214ef0a632935a89c54a3e1f65f857fbaefeee72ec538c8c97b9c71e5c346d93992d2caee605fcf3157ce060d68ac2bf056e367e390b3e10987c11c176b43a0da06c078909a66e8982634a1521ceb1d6f85f3e3e4376cacce2f4f2efeea837b6506692ab39f5d4d5795c25ec3e6e93856534b078212ca47a91baa70d640baf3e0e938bfd27c028b2009ab06971a79cecb6b3afc0628dad7afcb476bbbd16073c76e298b47738060895a9e326da9e40da132ac677bddbcfcada489eb1acfae1d8d8c8a4be5094eeeea8619f8b6a909767bdc7256a73d7e7fa1cac930a8b707016701591ff03c3300ff615e8ebbebe592a5a40ab14d6280f0730acc637b269d983c8dc02c678cbfccd074fcb775d\",\n        \"signing_randomness\": \"041a79840e95fccdf0bbe26286182953b5ce90dcc87ed8f5222b3185cbc630d3\",\n        \"sha3_256_hash_of_signature\": \"7614cb9e5e3b265ed77c650d18826ca2cff05cb0896d92cd906a19f576627459\"\n    },\n    {\n        \"key_generation_seed\": \"a17c85ab7f3bd1dc8a093e5613d46489364dd10a34efc50f6b77b4baf3784c33\",\n        \"sha3_256_hash_of_verification_key\": \"8eda53ac9900eac9fa2bf4774a78478fab275c5f874085877b9b5d9991db0a2a\",\n        \"sha3_256_hash_of_signing_key\": \"7ceae48a4f350e9b3cd255bcf59f15b7809e4858191ae2fc053c10d8843d1964\",\n        \"message\": \"af5960e049e9d5bb49c5108c1320bc7725a424d61c8de45cae5c762815dacc4ec75010abc9766d816ea534326354639dc4310d40a74ac6f2e3c1fbefab35f0349bfd0065b3768101a24fe03b55f1528526e4e02ee14a13f70077672533d6a3936e72c08faece7f1d534f5c30ac68b96bb7380b752868ba53cbe6def94865bf41540c1f1d56e6871b97e410e66b42cf6711815543727b9f3c4626aa0d0fe124ec67b172b386db55870564153edd0e32c5ba28b67eb4fb7ebcb16b529597ac5a9c15bfc98538435364b9d4673530b0dcfa2ef6d3608e4085cf6c686fb3d8a250046019ce06612e7689b6a86d3c22221cc94d6b8167847ea3c653cac187679796887a5db2097e571277f6b00c4746be2ca345fdbc2425a73d041d7e6087e0332ba0fa8f75229353fbd593ec3a3ace75811b9745af1a3504e1aa935b9c7f2b13a30f2f19229f0cc8f5f556aba0bda441ace205504579109fb3621401a0a48dd8625b48a6c35fc74a7979fb9806e4d979ce7a9fe5d5f76547ad52bdc993326977b562198cda053584fc467f105a68bb3be03eb37ca1170117eaef663a874264b0c7597ac29161ffc27832cb09e72b8978da080a3a2dfc1a0fd677572d57433f16c62d3685c0f82719e18d68f19761aebc5bf86526710abac0bcf411dc07676f44e663293f7c46e807ebab1e85b2cc6477e9b11d6cfa9e695b68635350c7169d1a6d07b8a1fbdc1941c67b603ea1522e9357491f04d6be3096950480b8dde49156b1939a932e4200f7a0f1141d7fd5e8123a32a6db007e517ef33f7c0a442e14a4c8d7d7b37e0fe8a1e6aafddcbf19586215bc7cecc5c512232e581e5211d080a91bfe147f7b9c3d51aebab17aba01d0a1bd4064de0ed40ba5d37ebd47ac8904537aae43e087e2e2fc9992d7b2b9b4b4d6fb03cd3ef9d13141b33c26da85769320f89d7eb2b4dc82cba3d303943bb5b3d17f380d1542286b5c3e233a7e210cfa545ca8b67e7bad62ff77cc2e8a8e02b96e6a3c599ad292f4496cf938df2ef97fc38355d38f1cf7a25b323d84ddd44d2fda0aee660715bff4401bb222177bc323ca9d4e6b2bc36ddabd7c28a2d1dad78e2624a07b0e9861a3337def6c44d72513cbb9f3d4264ea5cb7bcd51a504d0d113fc2a22e2a33f36936283ca0669df2f149f0cb6f9555ae43139a4280df7a795b571f71ee9f527b0059b084622b3566798311278c489019c3fd0e7a9c0d7549afabba032b9027c8d7e983853c9c2748f1f93774eda0773dadf9294a0a5ed17ceec224bb53c199441625105dc1f97eb82f2ecaaf7f6bbe814e7293c7c8cce01b26e8431959244d7b4b51230d915213202d0bd540c9ec03f1124d7a874f1045babc3009fbd69159b910715b3cb09bcce5af6463e3743600adaf601c61103331ec91538e9897dfa7616509c010f9afa467fac65665c154595b57ee2d06f790ca47587fe92705b2df1363671b6a5263e32b5031f63cb7680d71f34f7f49cd8df60b1c8e7f60155e1a3c2bc102818aed9439f949f5bdfeb1c9e2a2b0f18df1056cdec0434360c606fc47f1a9e41c019f01e586e129eb9225a3a5b88e115422adf1469c34217b614ceeebdff9ef0ccb7f63260c3bd6c0f979de9a304c8873e0b48ecb2caaa52759a6a3efc96c9d9c5b166ee45086ac16f3942f2bb4c13388f0d278bd5d76a2e5717f509c65bb9b24635dad257d2f441f7dcab988b34ddcb61bc790018deb98ca4ea494b17ccc5e85e0e33a1423ee7903692e210a10ac401772ae1a2c452934684add79326e96e88fb639243ed2524bc25e21c64a8659ad6598ee18f8f34de18d78fc1807cc3abf9bc8948ce3e7b884917d7eb9a99f2cc99bcd4efc9bf24672ec11eeb1f709f7a625a383bee16eafb24ecc8a6b3034c92f9e2987247abc78af8d1444dc4cc88535b5660b0f7a1cd4f144a70f9c8f28e722c8d61a355412470b285f2a7d23c4b4f0b4398ddf88b5cdc0bbadc725953b2f6c919b4ead3b9fd5aad0dae857046ee64b3a12272c3635250d8790ed19f8cea5b5125389112aaaa4fd4bc0bc3015b13e346676c667cd4920b319a87c90740ff00b46a5635a65f613d927d25d4f5f25799ef4a62e743353eeb9b8f42cad733c64c73a59b92503dd062f43bd404cb070c37e8383ede8c18b2b0923fe45d14a22726d194c9875c58d281277557c0208204b56d27f053047d04a8caa70c01f473bd95f4312e1cceb4364590670d33ee59cb0abc196e899eb292e83f6f5421f76eca28cbb04b079dcd05d0d857b2558ac633edecbb3a5be49eae44670e81e52e1cd217d9e823bb312a250765753f32937f7073f45885230627f1ae0e3276c1f65cbd9248cd5c43ab0139382672ce2458ccfea6e2f0a10f29d7c2081434a27804c437915bae89b7068cecf175bbc590af58345566f58b97be0197fcef0ae7c488a6f24b2391bfb1c8abf26d5897490b703d6b1a16e23883ba8b637ae221e40abec3dba15415ad897f7a276bd4c092d26ca79f1a221670eae6dbb0eafe043c171d37b186246ed74779998217a6c681c9db76b1fc4f0291c6f9294fc6202e9f866b415dcd910036ad778eef77e1986dd2adf2839bbe3767f76f67a3112dd12a3c0503aefa4c651ae1ad925c647c01382c9cd73dd42d56ac422a43afa7b9d6e4c5e5d8fa87900e8baa1b6c05660edcb651e43896f656856c210aaf71e586c0f876d44601c89bd536e6d773356a2df19b3debe996d86aff1ff9e3c9ca9105512615181e527fc99ca3fa8c360e67991d0917e5582580c3710d6cad450f5a296f5b3cc97c57a0a483a4088aa9f3a622aa689b8886ab69a9f990d2a6b8fe0bedd1297ec1809382e0600416f3a44f06646d641e5e597b0550ca5132bb86228194af93b8fb29f369ffe162a94891bd00a83748ed992c7fa815a5fdf812c2bb049a218812e8245beb01099b850562641ce543f22361a205533d31823ca4dc86765a0756c5a7242fa5940904e76266b5275182554ca760139576d715e9d137551d5441fe530ed5d537b67b14f47cd4f0847c217768f83ac437f68751e3cc3229d8c29d665e20b8d86db6293730ec5bb3de6b9ba84015abd081a1d8d4f4740d2ee04bf5fb80151a65289747cc3b8377f5575950b7afd8906ef63f5cd74c6b62526bf3d77031660bfc69e8df5e12e759cce54bf14713797ff57b98a18b05f52170813c60c3a89373040820773d132e5d6777143e182bc24a39f0ff8f042bb1612d6f569bafc5f8b1b5ff64268248182354f71e842a41bf0407559a0a1a291b166118c536fe4ea279d5acd8\",\n        \"signing_randomness\": \"2c5f98c1d26fd7bf95d0484ba2e1826b2d239a62254bf5ff810cbcb16aa265b4\",\n        \"sha3_256_hash_of_signature\": \"5d697bf80707cf773d11a57022a3bf07f0405e3bbeb4fc53b2ff175f2a84604b\"\n    },\n    {\n        \"key_generation_seed\": \"b29d1f35b1b45f73b03bfe87c29511e8939b79e9ef63aeeb55a3df2f0a4c104e\",\n        \"sha3_256_hash_of_verification_key\": \"dc5ffd6a8e42ff5eb008e2d5517edffe33bc83307fd2de08be4154ed167088c5\",\n        \"sha3_256_hash_of_signing_key\": \"40ee2a9c1da6fe561d78d7ff21baa4d23c14ddaf3e5e225605e10a6786954118\",\n        \"message\": \"a0eaa0b5035fcacaba131c5f6148fbe8e492195824e1632c68742084c1574176b24d1161562c8b5c33bd4b35dc51dec68b8a4f4fbce0844a2be4e47c5979ab6698cae307999a5c980c0a1bd68cc1ead256f12cdfffcf7f89c2e29c8164588855760263e341a7783cc0ada52a7eea333973193174f0e887704bc4fc6bf49630bc40bbcb0753d88a37a73b75c23d9758f70ba25f57dc6897a8f727c2a0c09e5549ce94219cd5987fe5a6f7dd55ded82a7c036e7e6cacf0e20ce6bc93307c72d4d9615b56c1e836a39d579ea22012b381d3b064685deefdfac4e1212373410c6b64fcec76554ec2403a1e3715fa088f2dd64377ef8cf6b19dc7665b8c54311c0bc925870a84f5d69f4e14db0089572842fc5d2cd02943869e752d1bc68395790e7a23417a85ea024fb28dc26f5c2f79aa0ee9c273215221170c6812fac15c859f3ba9eaac86f734a4be9d44210ee37437c28353c7b3e65482876a2edae6e3996aab9eead6190f15874ac1eed24219cd26b77c54a5b614610e82aec0b08a13e3b77498be8dd3e2e39cebe98651b19a41626cecb03377156328eb03242d74da9e8265b0e25e3957fab89b0eec7e9efd31cdaf443d05768331ad5acdb8203a7368b98e15c25b1f8857bf42ac407add600f3445037f4dc3466ee716b8394320b6212400a58f2b7e40dd0102bb3f0f1e445a93add8460e2cf0f899521d1e2f111f7d280f8952611788d59731dff55f35c7a4ebbfc190654ce8ce5a778fcb2a79bc97495f70a848f5402167b8c904b4b3e10bdc563e70ee262b6f98a8001dda9683f9949bc5d0680af3fa6ec23203d6f9adb4c9ffe0c59d11b61b142759f37e59ee599da9e4827facbdbc1173a06accf32024db7d3e12dd7dc22b333762310a1dd6c2ed8f20d6022a90853731b1592f0684519015458eff0b3eead10285abc6c1f482831764a349d620f9556e7f207af5aa3517b70bbceee206189f48383045ad8e55464e966fa8932d7166884eca0952c8719ae59581c3c1390139ded91fc5d9b11a1928f4092daf7133be7ef61d3b28b8efcf7b0270fed4e9cb344324cda7ccb0d9a25db8e19e154e07d3f2035ed9b365a5e88c425e6121526cb653c426596def04de054b6a9ab6bd934b0bf6a7e29789d485b9f8f0fdaa9827f118d0a4b6c82ca84052e1451f6aa1359cf7eaa520dae6116badae8bebeb2e6b20b80250d9e9e80d75ee999c191a9e1619403f3898456df5832adbe12180bdeca1ac66a4b0a426520714e32e45413f027ec50fa6cef724f471121118849c8bd1753ac33b8b7093d690fe3fc6e26966bb5f57c0462bf9cd4a149c8a489b053bf79b4c2538b016811b8dd85089da8cde715461b1323fdc7ab2182d71e51d481d62b8976d36d8550d4f741a0cfdab71517764bb4062c2f59bec9a5323af9b97b60b014628f2cc319074ab327cd0bf2e2f91f590a11999db054e8fdd5685ff6813e61daeeb743a8be4a075bae6302de37498fa177aed5bc80dc2b8f3802c3b00a1891f2c7ee8bc11488d247067499c16cb1efa1da80fb843b46a6c7513f9c5e4132f1bb005ac7ad6b11d09d86d40f393b9d66fe672fcef4675b834150c04725bb06fe402663f7ccfa124e9d5486cf96ee071e8b0f30f9e4191c8040eb46b3744eccbf185d61424efc0dd52fdce77b15563318d40f9f780e0afbe09c278625a3a9746451b22b638a34c90c9703b9145712c576065344d95d4a73eab1623578f53c23172bd069bfe1b0b9ea332fe6596a836ea455a33b527a97424616ef2b60571915f7035aae111d73bc8e98bf8ee4b88940d61fa96fbca28e134ed23dd6db457ce9a1974dd4969a1334e299e75e8232b54892589712a061bd93a3538a8c93a2fc592d742010a680816cdf11095770ca9858e13ccab4ed1cfa92049e3827b08b3554dc9e3261335adf8b9602d1b8184dc30bed7bdc1be098e4925b6ce40c256d1145380ad6db5aa6e70108bc6f31fd248b8fd941177342dc9fd575fa862f6813a68b47500f3589b041cc98d3985ea603773d8f2708ce27c3f7495653daf141323597aa69f0450ba6e2bc262fa6619c2711a2b0263231ffe15bd444e39fbb82b2ac3528a53f328b4a825bbd801ea80d848f8e0aa158c86b1416b32d28aad319727709443d512f6448cbde137bcfc0143cde94f8034db2ef105e626e8045bcbbf36d995b38b690d337c9329f12b601d1d4b407e552c587771d95677a5b472260054553adda82f86aa45c9f1d45e56a6de6e7fecc30112cd3b37a699b3c0a9e8953612f5ae75a62f80856da0411fdfc6dd6580426c04099a335cd7c4aaff4c3a0e40680a22a0c9d5f55d0084ef7388c661621fd817d981e46ba32ce01506ba4ca0ba6bf5441c775a83d5d5c929c94a009ae14746cd6e7b0df11f4c77f19a596215793fd1e9b7d8be8775556f0d4017ee6a8e236da47b84cd4c12c8ed8eb6c132afea0e85459bdf34cf2a57dc64171b9c7ac1003485c64beb64929d318b0d4fd09e987157efbec5176cb7dc6c51f633adcadbc30933cd6b1305e18d8da27fca1f787459935aa3f06f37718de2c135941ed89adacae1fa5c498ac6b9f416bf4e3fd5274e877134e249b6c98144cfcb91d9729972b98099b500d940300a4f45e2059049a795a4eb3f1f78be58e1a3b79aeee18cda56170dd7391262452b8fd2067140a0dcc017e036a815c4fc180738ca9269f7e9793ce6bfa38c04e5589ea3c56088e8644e400d1801567732db5861c1432103d00dc233a7f034246f62e6bd866ae46e6391e8711a3fc4bd31a1499b58652cf1e0ab1d1ed99420e96ec4787e9b0dc99aeb385146b223a328b201ace6445da97e11a7cbaf5501a6b02abb9a2b3dcd166d183e25e5d4c8030b0dc4916ae6fef010021344377fd4a4c214951aec95a6c497588e3327e3dc5d7ade596e6064eb577b66274ade6b4f375067c192241f4535561daffc1e5b28028f7ecf06ff1fde90ef7e9bad920befc7cc8bf86cd42d06b9d6d3fd516091105a1c025acfe05de9810fec3f2e1d0777b9e9d91ae8d0559c597a7a265fee91862a6d8d97f526a2c2c1a9b759511f9a9db8cfa73b1a841a267bc0d5fe5a62c327f445546dcbb85696e06475ffdd789839e9b9bcecb72db9221b20029ddb8d5a027ea431b5c92fb05ff65e4e1e1a0b449084e75e5037f11facb8372fb191bb634dd7e3ff18993df293542cff23dd8e9f895152d54e707a999588c284b1511fc5e170b0f02b6da4e85d83996620d5d52598be0179bff8a5572da7b936279b4d5505011fff4640a6256a054f5b1311e73db4aa7063295546cf236424fd00fbec5df692632d2560f2ca84face289facae\",\n        \"signing_randomness\": \"441e05790666636dafb42dc4d2d3e2183a415d2931599b2a23032a5535e5a7d9\",\n        \"sha3_256_hash_of_signature\": \"85516aee3c4bff439ff804c4d09ab1cb91260226bb536d4eaecb0b90d1b1d530\"\n    },\n    {\n        \"key_generation_seed\": \"d85f9623d2aa808addbe23a3d5194581e2adf57e938582a1f2e5f1b92f5c6d20\",\n        \"sha3_256_hash_of_verification_key\": \"64e7734fd112f0bea1cec0eeeabbbda48752f2c75b6a79d82f1bda959dd98613\",\n        \"sha3_256_hash_of_signing_key\": \"04a9601b83ad43bafedbedef4743636554f3a99cde80421015aabe5de7c78a66\",\n        \"message\": \"be77569f5aa8f8dfb68b574af2a6dea55f555fd5bed667cc0d399e7946648cd6b9a154a6710fb9fee24f00f9bb289f347c33abdc617ca8ad5399ca3a9636ff48c55c5d8bde3aca84097396ceab19c495f5de778e027cd009f0203fa9f610fda6c68af4404bd6025063207c14f1c178d17f6dfa03744d1b24bfcdcd914cc1889f2aea3a06c4c416025cf7badd3abd0fd163e584fcdcaa4369bfbe91702e006bfaa0c44148e96315f5b460008ebb8341a8d5c41ef79aa5a2e910fe4905562699f1ec37ccc749a082db602d59e8b9fb557c1c703c085c4f11b87de9d0c4ca6a3bc6bb92573665f1c7b41649f22ca22b84aa1526d9bc9c65d25ede5d801de7d553ece115cd0fcd5f7f5a0ae2b6c167fb5936844bfa55aaf28c8158f0d2cd06207dba724deb9cbd693bfd2c201829216bac743dc534864e8f690027a113e3c50092554adc7520d8e7a45647ac80aecd748f34675031be3a5b632f8d369cd2db425856f726406da6058643b975353a97e40b638858c8bf9fca5e22fc20ec66a52597aae136e71550c8f7f6311b88697c562570c8d71206193ba569a9f2fcb7ea12363595caa24dbc4c9813fe210da7d2137a2861d0991b35f090be74056f22188e117285886261d947fe481b9db491276e8c4ddd475007707d1f564d413d2b8f16e587f50c0cac24af222d42dbca2faffd4e88e0fcc04f9cbd89fea5fab8753d4064fdb7fe0ca2851a209466964f96eb97c76805b191dc27c803c4650e4f0ced17e47b37c1bb84e74f6f99edfc49119431fdb4241edf45c0c3a24916640a579a5762fef84fcca2c47bbc7fac81ad14030b4558006a23e38c775881932753f2905b0504a0d34d25fa9fe748b7b02423b749850107d7f59200ec81aa535580708652811fe859df5581ef449531be96567b735c86b63af88544fc44d8e24737170a996d11c9ce75d940c08e27b17eaa059efa7481cd992ab394efe639aba8845ef57293d9a21bc201924c7b28c42bf5e6afb4ff86a9aaaccf88fbdcb7720feae474ddca0a984a3c3423485e63a2d6e5a18d646f75a00082c6b5c950aa02c15dc575bb2b33dec038217c9ff0af92a61721c48d3122a0481a79d34cbc8dd750184679a9cad0ce589e94823a1f46daf3d8b04999e70769a63fe34a32caf252c9e7d734190e19504c553861c55be282530258a1897c412c82098631cb3e9d630e5b7530b1edc2e28055a4bc662ac62b5e624f549cd613af312830dbb35f2bc3789c9893c446fb217b5ffd8799b19bfbad96cc088947ffd2ed84585e7a3939979cd75bdb3d7870d041c1dd4a767e699de6b394b6f16c84ffe5311ce0c2f96f7b947a82317bb4d5b31be987a8dc72245f41c444977225879e87b41ba2d79746dce7ef05b61b4b06f709233aec7278a07ae3f106d6692a03fb4739f292248c7f1feed90df8e3b688cfd5eaa1bf0a1343f90b9438c683bf147b0bfabbee4dd8658bc0c4a2b6915e67c9d1994c7ac1b8310c7f8278c637f1138ce8ca846c7e19594ffee7a9ff7a0f47fc0ec6893227828203f454f7bdc194b2cf51a9d1bcd75d39b89ade0a862fdff9c86afef7a4ef3181367d394e039882039245492de748a4ed1cedd7d226323a8e923a1ae76633d6c5c443f953260eb8ffdc4c6a3dea3bd3e0a6453c02fc550df46b857fb394231f653054ad542260ece1b6724037b6ca48306c945e396f8b6433532b118c3daa4161ce9354db416c6cb8a512ec1e8c69a56584cfe00a110a0d775eff4bb64690d78d84a651aab2463914bfa190163155e88434a59bb9665402a214150250fb8f4f1a1b2d15be5f4109d493903eba33cad15b6d7ca300b2e7aa8272e6d0f7de7db49b9db3fd555c09a8035ba0a80c998efb534a1b0525bee292c3e15a2d729843b48251be3087513c956fa6e978b5357d29b29655ce55202e9a637011c3aa66f74142b2b39f53342d76d6964ba40fd48f2955be13e7dbcb47d1a84907e1f10ccd648d68025649bc743c120a31185ade08f6da54dc1202ae2022dbc76c80035b27bb7a158648c4e073e8e5d9d7dde6f2edc98e2ab55a15ce26a6572cac9eea41a7440c944f837467230e90286459b579c3ce2ab42e4d291e923cf69eec2c87b86cdf3300fa1da426d2f48f4090066f54c6e7cc27333bbe489cdc07b25b4a4c911ad05bce78a595c60833c15fe890e9653b118bd84ad2272c4c09692928a95b02768f1b843bcbd2dec84331a51cce455a632f4e088d4ea117f240fc736f233d20af8eee02aaad1ce7f19a3501ec81faa95a78dc0e4409cf24a5131fc14dd381d3d4c27ab3ab09513e378e59f335e9f8f2f228333c7aaa1761c4acf956fe8aa000f9790c0e6989e90735a8905f2d88621976b79de73a724ddd12480ffc8865d441f68713b4cf822b13612a64cd9137cea5bfc72802eedbea1e4c1e4f18bd05c8c84216a7a41ca5b375c12744460d71af3037764d2b282302819ba4747fb4e3138a621200547ca2539cf6774822f2db87bb72c3d8d4e916d4b749295c87299a33db71aa9f8fcdd41226fa671f2637b45a2d9eb6764cb3babb96d7ee41548c0886d40bc2a110bd66faacf80ab7e7c1eb343551724e7cc44c7e5208a0b2205e83e6c4a812ba7278aa2054a368b875f8fe95f2f6e18e1bd5d305b5f82d54a57a01a01b89887efb49502e585b57882695bc3be8abce0caec588b1a9f74e62df6f3733814cea7ed5eaca0be11482b942c5b3bc1de407dd6cc766b3f3efddfdb2c5c93f6a656221c6ac8f9e4c3c53a49248163bebbfe4d6b7fe090e82156d10c053775d7f2cac0f29f2b4b2a506815fa3c2ead6efb1e0a2c54f59b7c8c26d84ea63dcddce258d1551ad5cd1a87bad5124365ba11da261f913272cedba0bafa117b79c9f41aabb244d3303db7a16e93655963cd8d1443ffb6a23dbeed579b9588d2a16f89c8b02c49f11b0df8f723e17ff995fb3c6a496ebeb152323047a701ec29bded7ec955f3ac787a5a688a2491adb0ea28d3e22fd0ebaf275868873013da2faf6b2c4ee9e2a1f49f7abed754d0082665b898c29f2a561b2cbc4088b84d77e20c49f8dd8638980422ff140d07e6f68f94a7cf64489101baa2a85e831bb0e12aaba96d672442250cc4cabe11bbca90393d87f722c1626d90486d5a51618969dcba6b3744ae6bfbe26ef4b315aa446c30423aca7a160ae87aa3ba87a236123801534ef71743caea000fe91df11c33a070cba8ae528d887490e733de63429b5e3651aa689e593dff44f5864864af2054ff718e837aeeebb21d823a6e3194cc92e0c1fff3f929a6ab121ebc4acc6df9ddb6d2e92514bbb75652341e357bcfa1ed748f7bfa80dd7725ebe9f86712ed1e0157cb8020e492520f97f11c6154cae4175c97e8e5c578317b0\",\n        \"signing_randomness\": \"78956817be49e15a10b170caf1b48a8e76daa70423e509963dee560185ee47b6\",\n        \"sha3_256_hash_of_signature\": \"e9681f8495e8835ea280360e3ac524766e082a8bc94d3af78802b1a621078d58\"\n    },\n    {\n        \"key_generation_seed\": \"475206e93e77ae0ef7816e7d85ac28e0e429cab0fa189936e2a3f366565ba4bb\",\n        \"sha3_256_hash_of_verification_key\": \"b2ff8a1dbc30dc88ab66a46a80abfa33cf7a9b9d9526ce579aaa94e8fcebdf77\",\n        \"sha3_256_hash_of_signing_key\": \"03a65cd32437de7ed097c07b2e0c170bf76574b51938660999aba7d8715b45d0\",\n        \"message\": \"c306c50a55678175b5e6b2f0a725be274e968e259fcee98d8e17ad109ce3721ab8d9b485aa0f4b5d473f8c4feb385ae170252baa109650b0ae5769dbc480de486193c30b3dcc3c4ded154c31b87e31017befcb72f1f462e0a5b6323a00a4f337486e235ff0018be87aac92ffbe4e474c1c26372be1a1944de54f957b562eb41f65aa1a415489fc4f41fc74fb335c0cf4cf29bb9a6af5831f8c9ed231b4607b7efbf66c555147bb0869e9a56e1375ff27b86f2f880438414f6ab12936bd929a21176964ff690e2f45d59a82bfe307075058d86c597e9bec154d761520965c4197a1ea320ef6168fdf3a6884182e37600d839adb8ff19fada89eeb8835f16534488b142bc94c16ce99ab9be74a9290accb4ea9fb2209f8289d39694fb49ce9c538af10d13dcc809ecf54a4e8c281f9332553757607501bbaf68aafdc1ff616a141ac1841a50b3839758083b4c1fc8449e6498f42062d952dcfa6faa8f5946db7eadc4c574b8b71eb008858bed46fa363ef48374f3502f966033bcf8554e150875711eebfe1a44a9b77d076eaff7ca1f8e7c280b068ee11d708a35318cb9f8cacae1234a7161f18895a133a2035287dd0caf93bf418a530b36a5b0719de283a8612d117382bf6e01ae360f648f601b977124d20130f92e5d9c2a3008ace6d9025cb631cf2291e7016bce3402641f4b1f440e0850dfadd1d166ded765869e97c2f3d725c318fd223bc24c88278dda5c58adf702a6984fb30446afcf3b174c672e2898264dbc4e8347ce6d222c04a6d4311fcf676ec1761b0747dbdc2152b226e1c20680898d6da9d32f570a327689ae8d6ce470b82560ba3dd0115d06470ab2f93ae23c6710995a8683f308276f3c4fc748af6f60784ad57e18a1b477c90c4ec62491d26ab35ed4bf36f9ada1eb99cbbf722a04aa5a4e5ac678dd6ec44fac583e9f5b4b8d3c3f57f5d9062e071ec40e0aa7738165825856480533821faf9da520459f97b78e0d884696f7de027809e6317286d89305f9873d11bf74301491aa42c4fa33374373cd039b4d4ddc30131aacee56b65fc2638ccc7be9fb3501717776da0dc101ad9cfdc1b58f6bab629b3393edccb4aa9d6e13cda0456da62bf3d9c0520e6567fe8e68c481127c01693716c9b3082b868c2d274c929e69ebfbf40c83455f8295f384e516614e88f3b86f0dfa86032547be714f038f2ce1e740ab7da1e4736f231b8a1b39aefe3191066153d1f274e268dbab540f89121250089051e9270ad1bfc53768727ae46e9b833716c9c5a1b2687fc0a42b70eb57b1383181158217dfac8066a5784b09db3cee0a43c6f2959f0b1b462ffd98a13c8ad905c1d5e733c476d1d5ae4eb47650345343da10ffe385699e1998c6fd9eb59f661eb903de038d407fc455ca4d7e81bfb7fc689799158d0c1da982c945bfa05ea7566e9796343f0a2ccdb3ff02b0f37ce033e724a5f6ad7b7da12ed6834f6c2622ac1ad84ee86d28aed530b4b52c65d637b9486c70a7eda038f24112ec477faf86cd132b74dd4d77e9b961dd85f8f624a9ec9fb77733d522bb8031fc5b215e61b0c71e42b27fec203f8e0305b9f59cc8247cf6b9cb1c2e6d3ebb04e7b844836b45ab01803bdbaa990a351691a07a4636aa9011fb376f0f3926f01cc6f97be6ff6ffd3513c45e1e8803c24e2f06111aac2ce010dff33e4163525f1e6544e0198bacb76ae4fdc1e3ce2efe14bae102644af5941b36f599ec75181a86ef3021a63dc5fdd3bf9cb6e62fb55536d5bdc2fa90f7b77d35fa81ebac8a485fb0edf02973db0112dff71faf02f035b103dd0bb98576c6fb490a0d9693bd80b41aeae2ac3d82fbe1683a414201ccf7d04a654a72939b5a5b739f2c3b4d58cc5ae2c8d8c8a2b0364c9696bb491087066a48b382d2975cf54515f4603b0509c1e06d4bee68d8a4749f60e34a96d94fb76960c98c69590c2b16116c3add854c7031f11ec598f9e60cf86455a2959e7f836ea45e8a033d23f2e4e72c13b2331e3fb5e614e039195e00ad67826c28bf0a62c1e6d213ab1614728b5192b25f7ea2009e7abb54db01eed14bccf0c643582aa530fd64a428ee43e5c8e14d19117e1ea52996d7ecd51b6da36333fe74d15f793189e7f80df31562b2ef4887684dc656412e3fdb2420e48e1f20c0dd45db44d645fbfa979d7000d0faffb567a46dfac966053f5c186d72e4f5d656a737822f9f6cb510241ffadd6feeb1edbcaf6d22fec7217d1e941c0995c56a0bac3b41c2c2efc1133176e840f0fad1224f84bcd6096e17863f7f6e9ccc259f8838342ce654ccb82b7500ad4483c42d7355956fac645163842c71273b25aa14fa9d8980742f5b4714d2c7b84e29ace7c089de0c29e032d57beca90687046f4a6bfe69ead0afb47d42c660ee419aaea4e54b6e9a0f1eddf7267fbd9606531f56ca2ea5e5fb7b8448f8aab8779f713371eeee4e9486f8711708fa5cf3b5ad93149c03708249aa4e3455144bcc8f227ab666dd717815be5efdfb5e6102c63eda433de006a5f27235e4807a0f8447fa4ebdd3df52b5261196345a6190375842fff216a8cb741f61c3f6137cd4bb371f63a5a7783aa497eff21783b934294dab3e39fe9863a55d6b65801213e01dfb71cc74249dbd1b65fc431674d6cefb35ab35542f9ddb03068478fd7f766625c78c6332a11967767fab412289f29f28469641688864059e55b8855977a315203abda86c84e059ae275c88a3636bc7a6fc3ac6c80670f9e1b2527b3a55c6180aef02c195406414fa4ae13f9823a125a59109676af9ba711f8ac36382c0c9b60e68dbf0f2a082524473f44038a2ab9025679e6e5e17777fed08c79f91a0355cfa09acf45173b32ca7e63482e07522c300533a51167b048a162bdd13dbf2f038f4bb65620baf572d22fac1f2c9d86836ee1d90c567d51440a74559ad09fe10f94649da4c4c13344f57561e04c6f50873e08e3803657b9e01aa78a9407b5ac0c39fca951cf48b6f682cb4726a1d19ced12dae2da5408410e00358bc5ff183909d75af7ed9edc1afcfe47da56710e87a97115ca7d303a7def3592445e1e4e06c8343ed76cf10b2f79ff0bbd0374a0b12f88be7989f022ece58868a6f79f3a00c01e58ee05cb873bb9edc7c95dd40cfd0c1e6775eb048caa244b425387e15785ee3bdaa76fb359de6a04bae00039875a8d37c5700c5acb0b5b66bc4e2176e29a9c0946f7d9e9303ca72b15d751d84267fe44e254bd9319c3bd5e0676202234227f3fcc236fd48922231ec9040d7f699c954f2d7c3f1365a51b6fed191fd4b64ec20bd6a613a08f00bd83604814acd5aec2be75d85b2cad3d5b01f1886bf2ea5daa34be77816c950850e5781e86ce34a2ec58d3ac9833555caf1406b938a4b95e3f204c192f08b400713b1e56b797933fff969e276e31c382d1b3e618d08b62095cc9d7\",\n        \"signing_randomness\": \"93548541bd44df1cdd3aa05815d7b60046eb877a7e6e665b2bd2bdd5445caa57\",\n        \"sha3_256_hash_of_signature\": \"0b38ff985817c5e9011216c0c17e60e05a541d934076e63732bac095b5c34ec7\"\n    },\n    {\n        \"key_generation_seed\": \"edb27f103f12e5deba85fa9447afa1144c95eaba03f793930be423863198e64f\",\n        \"sha3_256_hash_of_verification_key\": \"ec191e14e48c5df01692c2ae9e5eef2ee1f04801cf07ebb511fdb3806d1482ed\",\n        \"sha3_256_hash_of_signing_key\": \"35278222fb8d9d38d9ab1aac086e9078b500961ec92d5ea74ad3bc41511b4c34\",\n        \"message\": \"019d2e9042577e7ff2b89835921ed5315e57e9a28240965da5c50d97a7941f2a504a3e38b3418ba30ef5706e4789b1e16945de2d59c601d240d364bd5d24d0564e5018b5652846a09269176255fa1e5ec579878621d778c633ee9a7867daba451c6257d479fb83e4316920a6ecd47605747da7539ea58e63d8586addbea920e2c0937cc14c5c4893cc9655d317447421c2e37f5c49b5d9f467edea8344b3d985a24cf302f7710159576a2f52d2086f9fe65323f8f778298c2028728c29e81306493d19f1e538f35ec179398615f1855b753d5aecccbc93682aba846d87091b4ab309cc89f3235b1326aadcfd1f700e37bacbee62d27b8127ae6e1c8fad8e12bb81ceee64c22d8d679e81f0d2416566f7dca7b8421913f9b51101b6b0f6dcee92e2b37053723f16941068747adf29fb171ac85456b425d990348b45c8f012124c591cc69d57afe679162dde7fbf522422ed9a8cb54325fcb6dd2a4f2ad342e9d9b49baa199825e7b33d1e18c20d9caabb0fb4cc621c654e2014b16d14a00aeae8acf601addbed3b6c2eb38afeb33a05f21dcc34927b9db0f470088bf6aa1146d1e1d9b54f06ad61f8534568cccbb7996421282155c4ffb14a8dd64b943bc6060ac476e0806ff350e85c3158788ac926ffee263220405f87b2d8b7b7c41ba300fcad30dc7e308952c582a46f737affc215a7dad16df37d65507c9a2520dbd0aecf2509ab0327e739a9bc4a8144895b92cb10089571aae8e589b29fb30841e293a627cfb141039023f8fac41f5cabdc6637f89c547a463ed25e3eb44fdc535f93376d7f445985a0ea82f8966a9816839ed3dd9c663f0be87f4af83413e391eb7b3dc9edc558813f9e0b9aac6a83cb5a11f3ac32ffdc0cdba7484b28feed06e5809112a91ac9f5c722f34595cbf4bfac3dbefe769dc502ef0f16132cb90ecc41f387cd509ca7fbe3cc09ee556c38e64612343e4b1278f81c16cdd3754e447c895cb76d9f7a6c7c9242e33e5b24c137a826596076cfbe6c6853b5728d02e333ff3da34846cce4a539afd94ff285b7653915dcb4f5a90853e940504363fd4c18e7775496e540347ec073aa52afe927c9b87df5405150f031d45a40641959806cc6f92dd36c56451d147fc91ea815f4bcca40311594eae472b780ac7f6a5e83c8569c57cfc37c37bec7f633a580e7b87fbf9d8464300fac0f5dec5aef1e9de56649c5976f8fc321aff59c49e98b5e88a09859a2e8e423b1b894b1582d8ab2a606a151940cbccffbdf89ffe42eda4624aaa397fe4c23130e6752414cf9eb011bc4b8c16c970dd75b92d3faa4473d0e01dfdc75b434ba6202e484a869889341a6ba60c2f71a512fccb88b691e3a9f6537f2e2c8110d1007b12a8cb8e0aa1901063aa0a9f16714b8b1aae1b7947d5d77fcd75f9162bf3695c9ebfbf7ece8c90f59aa2432cf83e788c8f5763a3ac25261376ef33bd0c1a08bf0b1cb78ef4fa00fa1264e1d41c6ef64dc8e4e42b517b32a6ac19cf81ef1a7ef853849d322dd7d66467d4f341041694985594dd88919bd363d117ed538b7e3798af76f6e0cdf17beea642c88857f775b25113fdf14cef830ec39f9a599c8ba6dd13ffda5d43498369b953925bb0b053298154f1d1c991ba85efe59f8be3a9b728baa2242659bd6a226d00879c52036bf4d1d82c852ced44e387fec9363dfca77ebc08cf07910def21c9d3b16114ed18c314e0f79f891dd370804f0541b067cb7a168e8e6c72177ebe41fb611f060b7d1c4c133972dfa453e9ad844a19aa34a30cf1712706ccb1729ae83a664ec68223fe2655ee14a8d4fc1a8feda8d684d924b83a8380646f42a95fd9422e48258c5914dc8f88076b90580f9cbae6deee5fa608fbd3e440a3a84cdb79924456c05696dae5fb15f1cd480c4bf9048fae98b525cc91108fe892caecdcdd5c16fc332b643f9e869573b2c97eb1f4bdc19149400f14163d0ccc34c312e35da0e6be8d7fd81d621772a096af7d0c44cb7eb112d88939703dbc1878dd105bb5d424738457145f2fa52f02aeb579da73ce5951dc888c50125922dc115f3688ef454fb16348b191575f7466177231c132a61e2b82e6cc64624c4012e0128aabbc8bfa003ba07125e14cc4fbb187e716b147179ebc931ce3191a4910fe66be3e7e5ba9c43c09032ab519d5da6ce5c98849ad100c709df010e5bb73570c650025a7403eb8ffebfc94ed96314dcf328e31046864f08d9788b1d8d8687f374a34bca48468792834d4c62ef2555cff7e0f900d6b1120face7cf59d613e4b9432756befe581c52c0f421b43685e73b1d7e5c8031ce82d5f93c8f3220858217b9d39375fdc45f3fb685f43a5d16eb61952b73ef362fefaec1e78777c2b14f81d480e3258f46417a42f58d96e74ef466b233b8b7abbcb199c9bfaa44e6928ac96601771f27cf2b485f1ef8eed84209eea309ee0033f99ed12825a2832117fc006ed08e1234cf2a47f15b361c6000e73428716d7aa481cb7fdab1e0b0528c21a4f9c24dd3c820b0d70b11d836915b9b3824d1e7c2d102142da1c0528ab5c8da352e680ea26fdce9867034b78101d68e2c61a93eea9db2f6eaa4617c862f4ea15284b1760474dae0d32560b1e0cb0eb7509f82361e9909808cf7f394170cdc8c3bcb0e2d68a197613b569118140b9da5fdd5ba2528dcb34915292940d7c9c34f11f4419917288c97ff027f6adf017f39b9299f401b2c2cb9e9c6d4067611bacb9d99e62ae0a11ed4276985bc5cb800361c5bfa0e4075b456b287cd74ddd41de9d5648942d9397b50fa7cd5e5b79826ab1dc31da0f2455e1cb408461362851e8ee7deb62d2ebb72d4c4bb6e6d6ce3ff8f6fc77dad8283cabb9bf6f11b804db676096c673d381244680f934ba76f42cbfda7f79db081561170daf5562de7370f059025fe6b56d2dec973f751203a9f17e5c5aa5eaf3ab62004e7b391dbe12601413217a5bc951e714bd2c5147396e5b0d55d650a2d84f792b83c1775f2f3c13181d9914a9c21924b3f0c2bbfe3b9b1dde35e9e71ba9cbc886641222d78443c0ca12d7e583cf52033ad8fbbe35e6f9dde1afd91e42c79adcc5ff33c0a3425a496ed869324ca7c9a19c8447320c98046bd27b260efa8015040b6ac4c582b005f3ac804d3957ba4e38495e72c29e3f031f24b1b0e80f9af94de81f667577075d90df494b6a3a5d561f73406ca90905e5bad769ba73e88f516dc41f425b892583b23222dc0b2cbe14a3f489c936b6e6f1fbc07202d130d64303ff9087e5df24c49e3b9264884bccc91d5aa3c856ced4c14d0f775af88824d162c813571949c8b3f7993011a7025f6b977db9c5094355e2d5b4f87dc05bb8e48c9daa0a42e2f7c4daf884783f507677aa6fdefeab8ebd6a27447d2d606f3cce48529901904eb544e8aa6a42d3bd93dfb559a9d16fd70cbf80f4059f6820a658c268b983b30278a11ef9bfca44c71036ada873ec88c85c2ff8360dc804c3d\",\n        \"signing_randomness\": \"70cc4ecd8562d593a19a9af8199da0c30a7c395d025376f8af726574c5bda314\",\n        \"sha3_256_hash_of_signature\": \"3279394dc058ca0ca760f4f001af8b065d126ce8c05b26d79fbb72a0db31b923\"\n    },\n    {\n        \"key_generation_seed\": \"820e9d484b9395611b6a68a424a26e20780c66b220d95c28e8abdd91f0173593\",\n        \"sha3_256_hash_of_verification_key\": \"fb343440abc57424d4884275612cea202eeeb1a02f2b951cae86b8ff96170946\",\n        \"sha3_256_hash_of_signing_key\": \"6a14b5ec11da4a3abadb30567428d0183227e5d367e2654b7febbc8d6c6ed611\",\n        \"message\": \"af7283d2e4665d58e4d20fe0fcf99534a10579efa3368178fe7d7acdae57a6e5770057ee4ea335e5fd91c82f07a39132b339c4981c2df6d1fc4a4132970554a1a6919a83d87f60afced2bdd3c63b87c69f7594b588524af87e60cf78388fb22517f098dc71b58b1c1a4b054be609326fdc7c3c3122825a960022801339745f092d6020a38cf0498f8e0c22eb39e37efa079201fc969dab3f4eff99424c6ea43875ec07301fb44ca7c15e24ae21200fc3f6236043a936bda0ea0d8cde2d343e74f6a1e9fd495e6b836f1b1f24b6b0ceba6ec1e1c8006efca0d48646a0365320e4f5836e6ff98c677454354ad5a2be0d860263fa7392ff1ecb4d0ed62ca1f04dea7fcd6bb45a334f225b926b704d0ac0eeb939e92e0f1095729f340f53fcba00f9755bef2e45c4c147b2e6aefa8db08624ca79763f0259003a72aae395d38056bcf8ff9087feecdec87a1215313b2173c70ad9691275a82063f7347a0b7a321e3b6172f53272d7d0c67ec4a815ff99aea51a98b8ce5c467bf6874982aa92d20e2d1b86fe57d239787f118c33bc65ac26f1dce92500c1da478450f4ff173133269b8d675e39e8e97b5d3e95b934551b993cbc1320ee795fb093166537a4bfbac8029f0632b2cb1d8e5bdce8253c1c2745986e6b942f37d3900400319402f7d359b96784e219dc72171cf4cf9a4811207ab5e43df252fcec89bf7501b6ee1a84f7d4191d8dd3d4eb7599ec499339ac977ec8f36cfe13af9d58c52a6392310f3e1f2490517d367de4231cd3bcb5a45343dfb459c833a9c231de7fbe0d9472ee6ef7f7d63ea71c32258fedb339e0a582d9d92a13e6fbb749aaeda42fe503af6daffacc38d4204dc302bdbee88e405386ca96e4a7cbd4a1ead15ba20c7f9c44a41c95596175003e937d5d543f2c0112a273baaa826c351fedd9872663f7fd3d1acf0cb9213bb6ce3190ca17a5f77701a3978a02a8218859950b3e567cae4169a5028d92ba0f9a8b9553811ba386aef0e0f7d231f1eb702b7dc18f47b8ea2f8afa201ceca72f97e3f4dffe60a510f3027e549be8f8835c956c66aea51dc239ba89db435bc069363c79f0fa803124cb60baf1af9cb6186f2756aab4c3b0146c76ac91887717b30851b8f41a1426f778841a48a17b8735c7204bb23f6742b13edb9965f3797a1e70d2b564da173e9ba96071ce9d89764d52bc7eb463e6f015e7a2bf94288565c90ba0c5bd2ac71b4702764305dcb92940cfe5cca5ee5a6ef32505ab8e6df77dd3800341044b761bbe3d2a1072dd662731c3c126171a38fd5603d9d9ae214786cabb9bd21fb4a0814745b45cabf2f414bb81f7c8d39a63754e2d82bd020fe6a04b735c1a551f968fe16fd9f6d68c43299dc224097758807c52eb1106ff94e8a52c06f5dad54c5d99be041867c1232d25b655621736effd50ac67c820615b39e9a27a6a1779f5f8805c0111bcf95d9c3058dbfcdf7ae127aa62f8f1dc0751a612a876981999d6696c7d710c2ef180214077fe9adb1c6dcae9ffc78c2c2535749cd6b6c89e03ec364cd7f855140b31864852910efda73ecd0477a9d72f4bb36a9b339d5b1708070a118aa142f61fc87ea86e2629c80b198f51b41c64f9ac21a4eb8f295069eac21f36ce65bb7db4e78d2b4f1db09605ca8c437210afa0f29dce3883b7d4e9dbe556a7f9211757284dd65e02f0cc7a9b02805e3103af3747d2234609b26caed87c63a233fd3b1fd91a115dc1d4838f44ac8d668b536d434d94962ff355aa110edda5a8d5f3fc7adccc369a4752d6cf5bdc0f44197b9b3080387d74838a1ca2daece9e2c6b52d6b77b7516a36ebd563d8682da60f4bd7b434281a2238db728bd6cb5f8aa661b946420123d514a2993e7fb71f7e7182397833d2cbe019422473495c47142bad82a1549a22af8ba9337245cc6cdabc3b0a6a4f33546701b2b16180b0052712d54c073c09f7798c5a6c6e8b3b35b66e3b1257aeeb6cf39b79b8f0354665bb5d9410224a9baa1bc25af5525bc5fa81cebb8a19d811cbdfa313ee5fb1a7109ef5856bd712ce8383fb9b4f9cbb999241696d8ab92011ce5ab25300a2b5b7d9ec39a2dedfbb24f1b14d5ac4898d2bb35873e2591b01fbd721c64d3395f00e79ebbb8a3b2d7648c1f7c9b7711fa415f9c1251546dbf614bc593dd42a6c712fcb514f836cf71e1338f0627395a38541d281b897394b7069a668fb644e733ca713a444832426f97a987ab6612392cbf912673948b683acadc6cca05c0ebe5d403a66afff38f0b4fe5e9243d7e68f7cbc7c2385bb78a22a19b962fce236deef5c2351c76fe50318ffc2a6c6a24ba40ea1652cda706003ed7202deb5d024899b82574b9d1ac299e66a3cf7226420de22464ce34aea7b52efd8ea22117adefd51bb609d0479121bdaa11977d4e7b1134be8581c151dcfc982b4134468aac208adbff00f8b0edbc9f7b963eba01d26422e6868f7b13d9dbe956035d06319b7720b6abdd119089df07f05c50343da91e8f2dc3fae74706703fbf05fb126b3e23bca738bea10ea2c0cec04a6f0f5f051a53342e53407bf268deff96d0c305392da1b3e78b4be85b7cf2b06ce1d9e0b0e2a9711836c7ad42d55de2fc2b2278174ab2cb38dd27236296f833a656c240943e7d7eb5a4427ff6be8959652de61000a7dd5f82f2b8e63de1b0dba3d0410b33ea061ec632cfc5ff7208b0b1513348e208a251fc00b79a07b3150310c9a21239bb51ca2ebc234f699463f21889812bfce787dfef28cfa9e8dbc690d047bdd81af08ab090cef657e2bccae74a5fb0fea9c1923beb6ffbf0dec5823101676284c7e197030f5c1b1ae6809b778e2b744f9b7056180d0a109b732111163f3ebe9afb6b3e4855d813dad02bcf40f75b01b8163c150b2a1b43625f3cf1ea780d19b51344c44625c3cc0d3eab56fa2495839690038965dc6b35d39b3226d7af2f7140a4a1db74436482deea66351dbd58f79020bb149f04478b1ab29663ef7b6c62614c31b23e371e5b4fc62c98ba9f1b2b71fa76ebc6ee23dfd00883f878ebde8b12fd4952f98ecbf71a539148ad17ab9cf9892cd69dc6da83022a70f137ac906f883e5eafeeabbf71aee5ec5ca29b89c7ed42f71d8636f480edbc169b830182da20932a84f538aa817d0707ca99d49af4277214612a0ff0a41ed78dc4a7f59879ed4e2dfdcba4ca913d0a794ec015ad034f797bb8a14a58df431c4404e61decb9bd7bdf0b4419eec6afd9bf6a89a9b58b7319ab77e5df6a2ca65e9f628b5f7a9b1fb0e427aa32c2abdaa5b8aa638eb5eb84c01c3ac616d25b4000514c48994ce5b87082811f3bbe8c76497a1b0310a05eb741923efe7f2a89a58fbcfb2097e2b525c7f1cbc1e8e4d97b0c711727f5cac8aa0a1b8efc125814d2e6972fb3e780a884d07d1b0e85274f76ff72ad8e4a6cca7f51a5ee829ae8397192790c7da4bd4398ddb0f15928b18154097fb1a420206761333d6629b8b53a8fb078c2530d2df13e9f54a3e1b1b9f7fadb388885bd3b6d8d2227332e56a8f501492\",\n        \"signing_randomness\": \"d7b07000bf8f8c8130fe7d17180a3e30f015b1fc8fe5692def4dd5ddbb332fba\",\n        \"sha3_256_hash_of_signature\": \"03bffacec1b421d4137b1858d6ea25f0d1687611e048596beb21d5de0f17cf08\"\n    },\n    {\n        \"key_generation_seed\": \"e318912089bf95f1d8b36a189d494731d5c24f1690f775391ae74f663fdb4e0d\",\n        \"sha3_256_hash_of_verification_key\": \"95bc4f56f85769cd1962b00c81289b8b345cc0f83f62028d782aca6bab76f107\",\n        \"sha3_256_hash_of_signing_key\": \"52c46b4fe6981245dfdf0cea12a6356520c93f819286cf32d603b981b7f86a97\",\n        \"message\": \"40a088d9677f671d610e8cceca444bbfe82049e4f2efdc0e6a946c5d1412e28ce47488787d14b1af715313387efcc6309886fe07d4a27cae95e963c63f745b41eb2e8002730469ace46ab135553cf5dbc57f3bb25335aea3bb3086375bb3c34a93aaeaa1b1421855b5e942316ff54948c4e8999d23728b7bd9ab8d22744a0e190739ff4fa1c181d40c757d5bb0d7e36034ac9830d75ddd1b838a89161c8e0f5ec276e13b3e9f4a434beed4d1ac1a429fd83293fda386c0489255792a6cedb5c787a335303f63f01a0dcf4a2b50758e8125545a71706652d4d122e6011385480a169b2dc52f95b97ee109f3f765e4aac35db9fae26b94616ee8945df2aa7b89a8d86453fa2d6b7b3dcad5b70022f5bef6830144744030732b67dee5355cb23207b6bb1f9367728b9a3cea7033cb8b17d51e38df55050ac37f8008db1c189e788e3a8e6409c2a47c46909ecc044cb0074e580d5e16cc4889c5ec216535a53bd50797157aa53a58d822d93e3eec0d12aea147ff3a8d933a3fa3b111b53f0cc0c1a70047ea83cac8f91ed9ed80470b8535ae652dfc475e859c5c3520eccbe9870964f9063f2d5566ebe2790b721cc7b7bc481dc94553fbfdb76175ca6c9afaa1d33b5ec72df9d8e1e15c963c3a130dacd811974e21fe7d9db446a95ae5be2c64b8223fb989dca0b3faf0a3a2ceb67724efbd535be2ddaeea5a90a820434e64f31cd07dc659aa90c013919853e19cf81c29d2d899abff1617aa937e7765a1f2dbd3f4dd202585a5820c0b4ebf978e524285de2bb97d85fad8e7a2e5e39621cce76382ad39ed7c37bb5ed910b363d6eb8150d276aa0ad602924bfab8aee913ed2c73b6315d936ea81ff59c3aabd5afb989317052596b6b27ddde2a95c322fd758d61d4254d42f9156934dffd0b7ced7e665a0deacff8e70bd40e80a40a13147f217b01a233c9064a3e0b5789dcfe226565576af59a21218e552de2d07d92e9c6e30190f80bf8554c73c4414b74bc607b60e3e505076c133e0d42312adaf7bb684703a8a8c5e6162ab36bb79ec3d6dbf77dbfe83a25fa654e01973c25fc34567524f288f4df5a14f21618c8393e4906e1efbd4ef73330acab67f5c64cff27927e6162f0bbe0134d6c70fd02bc194160a3baa21c8e084ae2654b836e115eed374341926939c5fa5ec41f29cd85d1671a517def4c9e4009283af2b2ad8587006448742c6c53e962e6852e50807e3f8b4d5bfc81fe22c9f666370483eff919a3f736fbcff3f5de6da20ecef5bac722cf5823f03b5988f32833febcce9c8307e03df043d74eade0db69d7c9a446674c9627fb97979900f067127fed35b1ca026d989205adbebb7c6de4b0e5e671b68ce014eaa0da22778091419d54229138ab6f259919c87021870df4aae07dd714c6dc2d82cd0121f558c3d2402a2e36449bdbd0ce72b92705ec95a47712d6ccbd70f40841f419899bf3a0b946cdab5541c0e02e44d84220e611c87e78a7e6525f79c2e1f40ef9dc33514c658ab2f1c87b165fc04fcc784c661ed75c26125cf3579c415ed7b5c60cd2028a5a2938def54984c9c93d2661521de2070533a782951e73e1e10ec4e76c58998e4cc5977b6a8a62b058fb9fadae63cbc5cc3f17860726fb1a6d8a3ee4a2c3198b4f4defa6b604c35e70b80081edf65573c4507f2b4dcf420b5fcdabb6b852000d0cbbbbbd8df58e1ed9cccf8bf9f5a429a8afd3a6282458bb5ca74f89024dac3bf99ee16f761c3ef8e0cbdf84de6f15a72c7c3064598b0972e85a467bf03b6851e7a3a7f898943cc7c789fff1b74f40734a308c254ad5b2cf27eece1b3f77dbcf97168edd2cbd4d4510f42e9353ec894f0f1e68d6a66720c1803ba4a210c5cba018897981e9eda6a1af22e57edc0acb8945cb0d1c4ef1155faa8087d1018a572cb086c09e5a7c63f19079f7b3b71ed4a0866064d62fa0a923ff0864e32c1866454490f2a046c896eb43a39e9fcfc7af24bc187ae15b483002d07c209b9b0b4fd6c042227c4509e428e01b8aad33d4baf362d2d1c21797d519aa425f604f33e6843cd1aa4cb5b00f182ba8506a03556aa9c0bbe1c267faf73e5760a7503a74669cd6758c1a075df460dcbecfcf9ac890a7d1e427a3f802767e94e6dbb16071ad233a7d1101c1ec8717ceacd9bac72d8dcb0b6e6359503844a2b2bb682784b017629f26a1b8c0446866593f90906b8edecc44e4aa558fa1ae9357f355d25b76bc474df2476fdd7f43f713485dd778af9ee5acd9be76bc81826f4aeff3e083cca0d9153f8fd53127b4f57dca05da39d76c58a415f42e842afd7cdac07660667376c1710c93bc8ed8970b8f75f44969e47183d6fc1ff5e29376f1abda3b670555e0908c16f2d359e641fcec7047d770c4c9195e1d15229caa5e41352b4bca11d2b46c472ab7ef64cb04148aab7db3860cbccc5cc97e13eef446ce118e7783b6e271ade7053efcb80a14309a7be720c7b333114d08359b9d588e594c76eac9205499ed7dbbbc862a1802d840bb9a30ff758ec908bb333ebc7347d11f5e2932e6a7c5d5e3fcb9bfd3d41889d1887328a82f313c9182231a8e27dc84a9cc6cd6d8ab4729484e790173b7490d8207b6f28a6b4154f2bda9e12cdd6cc7317f43e41d21e9d57e10547fb1c90ac3eb8fa1bf79604909b9dfc89267ae33d1b7a4a0ba108a43241795d8c27a794439c56e8a388f9722beec2837782a7d2b0aa0cce3fb27a4509b4ab6aec3b6fa547a1d710ac525147cb9b016290cb93cafc8ce5649636ee5f6a683b88d95376a4a534adb66bd56caaad83e57b7bc3ffa996b324405824ac3907f7248e71c91cd659aedc246a74e0c46e882fc4f59a01dd1772b8cf31c180ee0cede93ff15690955cac0e1c2c9832456f4939e6218a368fd4f01604ffaef5a7d7d73e12ca1c8ec30e0ab5b35e975be94b7cb2af23642783be8819e740f734ade0f259dc8c60f54655e7c9dbe08d5210fe69fba4cd940ae24b4ceff52a2dfc5573c54cd741dedfa7c2ceb411fe2717f341bb403099595b7d2116dcc2a76c21a42befa53abe8219e609903eff286ae820d3fe497a0183cbada95d92178adf873091a0855ca7a82b8b21d0efdb10930fc34c47441faa7d8184c60fb15e039b354614430dc269b271d3bcd9ee97465172f12a0d922fc4bfe301b3447ff7c85ee08ac63a770a08628ac1a584544a45caf75628674492543881b7e656b56e166b8e3188874ee56f5c0205f8c08d12cdbc670943ebd6d85f9d839d5107c5afc518bc438d2fa289daca5e7f26bebcac0e35c5a69d869bd40884ba90874fcea5ec3374c77c72a862ddc95ea68156900169944608468c63433bdd097c45ad81d3b9b83656dd508e0a558e2ba1a6aba6f33e85e3751a590193880d6ee47d6ec2b0725506d98e82b442c4a9db9fdcaf4dedf9867c174b908dca68cbfe38f57d2bd51d80019f92a89f6770faa2de21225dabb0f383ec54319bd4f0ab506afe7bca0ba0fe44f09d44c14a13ab2813c4551060ae2ca25cd3bb430bdd07def881d217d92371515eb78bd9de02504273009075404614e050e1b78a5273c47d774e980ef\",\n        \"signing_randomness\": \"45d1e114209123b169f798bc1a9dbf31f6e413a6ed7a031425184c3317996be2\",\n        \"sha3_256_hash_of_signature\": \"c244f82b29198d3794c0bd20a175284eb3ef33eb1175545f5f3f4202da8c4a65\"\n    },\n    {\n        \"key_generation_seed\": \"42d884593dbeceb5d5e175905eb3c2095eeb366a8b28fa0a7132600171d74f6a\",\n        \"sha3_256_hash_of_verification_key\": \"942972f4e37b4542617b0e08862086ba4f6622d7865ef40b6b678515238ed643\",\n        \"sha3_256_hash_of_signing_key\": \"0a002adb0fd7dfeb8a5624417d7dd968f8a606f88678c45078bd8ef552642782\",\n        \"message\": \"020bbbe5f68ffc4ea402bd2e23f233363926e76042ace00178e0cea02067f5f7485d9409c7a57d29225c89960d45aa47a679b7e41abd35453d8a019d80c5039693653bd435297cdcc64a47cafbf997c60d6010d4e25c10519436dcc4a5dbf52e994fe7848a65222f4280823df11ef8fcee2b1c08a1d2822e1f26965be970d680a9305ace598fc9967869a108d969327d9f858855fecc1c1a8d887350185881602f69611f964f4285616c06500e4deffa17974243c0340b727f7a04c32ae5dffb9bd91dd5acacc94fe8e9377a0006f60bb930462d2a9cab17e7763118eadc03b0889596bc7c78c80fdc3bb6eb5fd55c62d3dadf4a7b67f48bc5c4f1c83be459b0bdd31d7893390962b2e199277e25ae5c8e084c6954b2875f1a32314892f591895f52e868d61c573e83cba85015724828819196a8bebbc0bb898735cfc44f643e5e856df74dd06f2448990740641dae55001270ff61ecd9e15b1557562273646eb34de1991fd24d1995d0f0574a8e386c85e73b8fc0a21abdf9d87cf5a4bbec21b7fb7f24179cd37dd8c55cc908d52c6b09f3007fa4339e8b45a63118f61c0fbab4d861557334f1ed36290598537b5c7e35f60ef0062eb2c8e9700036fb438e2017b571cc4d71b5308208225dd5bd84b7f136844cdcb5cc78af19941a7422422acf87bd5f43bda208adae6bcb2c421e638ae83c42fd786e8161a3a5b198ee5a0e1a866e781b0335485f5866e3dc00e0dc5c416a8608af7bc7b4ee436564680a39a78bd89df12efe06cc5e8c5fdb012df8002c846fe8e3a258284add1d6500f21dcdeef94f4e55d2c0367d117c66ba9b306f3d4dadffedc7fbdc439f72060416aebf48435202908e476bd554c8e3c4840425ff28a699e6f0c1ebf327df0b1bcfbe56b6f33949b3b2030d5898750bf343640133ab1cfb420517856d33c347f2334f4b3e103acae4022c8b9535b2dc2f75ee4eaf1a0bbe897f6dd7dd43ae91e6b5ed66af4cdab3c04ce0661a79bbfd272477621ff3da8dd9f4957d00c0a6bcf0690d1586b6afb68bf4252c34a7707f8fd046e169390809c09880497a74971a7524116e2b5abc54483fd30f62cb99143a96701c9ab8e3f14a7418856f7dea7e0026480fc22c32ef705ed229ae37f7d634d64ca72f5c4337fcfa7998d071969d6a30f03252d530ac2d6429235563eb1831005eafee74c594b05deb3afb079b69d2d88281ac3db415a07daf0d3eaf55fb8cb0dd443da5e960bc9e853bc90de8ad88c62dd7bbca93562f1fc8f7d47542f3d99b4533213b591da7d0311eb717df619a289832d71afc015cf9c0789bc783859187fc2a59486e021ec99b89182959e68eca3c71969c33d3c0719c3ad39970d5d4d668065f025312f825280f017550cb7cadd12feda15dbe04c03147095b9214dbb3a7d53ff1630925107e9e4ce3e75c4364d00cc9e10ef040046752e9092a0bb45455129c39ef50a1fc623bfc87ddea018ef5db45d4f409aaeb56baa853daabd4a0a4d150bbdb0c2f1f988d368bdd03f51ff5c77403be0eb202d72021149e55fcc45c357cf47d6086d343d35518e332512be574316a31440fb9a73d74863ec2b0ccb8398687a017967047c3a3b2fa659b647582b1044882b48d67bd74897f95835053c27409eb6bcb5fcba1cccab5acf757ca99ab7208472b279b853a936288ac907eed43eab05ffe3c4c8a0ad021f82bc281b9c690499af98556881f3016959e5243f77c8398102f35a599df8b4107277a1f82cef840fa11008422da47978a8d32df1b2d5c063e76059e469214525592056a227cc7b9869cdfb5ddd0ba10bfd7b904264407ba18c6fc683943753c5ca3ed5f2651b7bb00ca227c77d32afa04324aa2c5d2b54dc3bb706cc8f5d8a4b217a27ecdd118dc80574a8f60957b9f02b0d8000adec31a8160600fdfe5d45596b83350dbdfc9384c233dbd12d626ed4baff65f1105e78c06db06ee6bf28a7626e288fb47aebdacad85389c751c95ad2ca23746b6ceb274150cc254011b089b5404cb9ee43cfeaab7fa545a183d89103269047691f81f3f78015075e23941466577e046e8e1be5c7b4ee269b18915525c39e995d0b56ac469637fa472613296cc033ef2a51ca8451593d374e5e2f3344617adb5f807e116e9bdb4f77326ddccc09b83da8d2c13fad9ec5923befa3077795464430832decf46f1bc12040cb37f4c73396b6864c04f548dc059e8c6f089b5f9197020e4d2c65b015d76d88647669208d50dff6ce9143abac3a724ed2bdc853e3a587d011db12aec76693a474cb42e836846875c75ffa23f4587e78187d6c9572268388ba675b56aed9783a317e714eb4d91a3857ad07c6314998eda3241ba0dcf539accd4f4dc010226066ac6efdd22cae5e8832a327187f3c467768ac00177b0e759daaa7723ca3225ee6b4db5270c63c83efccce577a48311a2f1ed593f9b19db0245b4e0212eeab723bc89900037bf327e0f5a66c4a941611afa580593b73c3bb416e68c2b611846965741c038514a9ab7c2d3a109b6749767e43624e205427d4fc7307fb867e6f71223b5a40e407558bc4b4daea973903f6b1b33f266adb96b8791fd2d38a8ed9f9500cb86057034845bcf585058bab9075a1a2a3be81c39565c8f1bde31cfa35043dfda5a6d5d3a65b2761ec91bcad8d6b60f222cd3ec49cd0d61a7d3682cadac7ab2c37779331d8dd68044773486ece9744d042580b9ddde412fec707343e5afbd8ce3c15b824054800a90cfbdfe634bebda9801a14cb5739a1f903e89c987d039bef022569ddc98756b2d9990dd12ba0d6cebd115784013b23409000c5e4fcb28dea42a91da3068cbee2af0dbf646043c22adc65ee49c1f668234e532af7316348a14d11549459943ac72000c9a4cc5d1a45dd6159e3396cb5066203935147f29b800bd888d8a5465231611c9bb39ee80e6cd921fabc10a5e70372977c60175d4217f0bb50790bd2c27e6aefec14f933de7e83b4ad2bbc324d39b4f47b1b2421af98dd96b0226f37e03382cceab091252cd4dc3ac803a0c5120550dc9179c9918693a47dcb37f4f920baec7bf04aef1052858d91249ae87d6f7e75abb56231b2003e714c7ce7ab872c2fa1c61c884d072048a39abea6b161e8d0aeb38b1c82ab5cde4f6670943d41a674756f8b0a157ff065a1535ca5265bc851931a689c7c616f0e32ba1d910b54b199f85bc8685cc77ebcccd22466767c942213bf1cf20c1c49262b8684fe711235d6fe29e1145cf9e0b309cac0e04f6a5cd0eeec3640be249a65f0f1ba17da72ed8f0bb773cefae7787bde36f4dca1cbf0c9d8731891c2b65c082e3875ba78d3ad02a94969f6d8603cb0c297638452d49566ac3c2104b1fbf7f524ac3f757217fb60d4690f515aaf7e43ff871f794ad479c711dd45cf95f7d76600e0cba8b89514fb486eb1e9a95c3a800bd89c432a67a772cc5e2c53192b958b448d40c249e47efbd093376132d5b45f075c3ee6ad38e0ceda00f7ec458a827f2bc7c32b892d4854749420fdfcbd5e0fb889b0d74f8cb19a39249382ec32f553a9455016d35166675e3fab7013647c5d3b3fc5d06003c7d85e805b6dd303d2efee8b6db0095ae97f85f259cf05e8730e0f87c72\",\n        \"signing_randomness\": \"07b62fc7f6759a882265b7d762ab8c001c76f2297bf5274ed16961b9977b6f92\",\n        \"sha3_256_hash_of_signature\": \"95ba23aad49de2a08032642e5359503c6d422fa458a516c406d385a4282dc66e\"\n    },\n    {\n        \"key_generation_seed\": \"4fd265388b4a9ad8aa29f5524342424005078a37f339e9f978b7f6d33a2b2777\",\n        \"sha3_256_hash_of_verification_key\": \"1619c74b43e989120ac4745916aec259f5ac3bf1ce67d91f0a66e1adf866c0ff\",\n        \"sha3_256_hash_of_signing_key\": \"37a21aaf792ed6d377851c68f9144107caa16132991d548b545e9831a5ba9e73\",\n        \"message\": \"3fe1bf49f5d620201e1ec590392ad5d4b80aac81861e49170195b47ce49a0d88df913af88a2706f4415235c1f9067171513b53cec39dabca0240e82b38f42502d63bce296aeafddf2c8eaebc2a7de0eb6590dcfaddf9d1f48e3ee531ffb2bd4bc1c3544aebe0ba0ea45f1da87a7d15d499e439d12d126f9fd214d9e8b8ea2cf72a5ee1bddfeabee33b07187aae0e11c9d7f2d3e8ef17e1897ce184b1bdbe9d033aca91e13b8c34b286b00f52f67a91c7261bcd186d1d4ed3d13a1419d88c6191e99a08b634dbb8ef8907b6421c0df56a989786855cf85d7a53172da98fdfbb1518a0416b7f4305e0a2c0ef0cc2b42a49be77dcf54c236baeb2ce39de8351cf6ad69d64920310e4d55c798ce23562586a64b43339a2ac4152c3c4ff49ca0f31060eaf71d0bbce12b9a0ff017aeb0e326abe533e7e0b59e226c27c295deee01715d26c604b4ada2589438d7da25cf9c3ef82076c2e0c6ad06d443e2128367d03728c6815a96d8415e6e29828e9fcbbe69597f5a2cc8c7481014bc06789dde19370dd81e75c8313b8ba062d26d317d584166a69dc38fc0901bf91c72db8ae7f8a80b5c21182aa264af4b56849e3dc844db84dcac0529da6688067cca0ced7ad21b1bfbdc960ec540d85e366def2b25ef649adf23c3e41e4a49f6328bfb80012e5a0eaad72018c16f12aafec187728d860888b56e2ea9cbd7c4a54d1a34674aa3227fbee499083a44f3eb6438f93abd09ce7f860a5a7f5d8b00f6e43c4bfbfc109ed462d3b5af2c60a636daa1965c5d650a5daf7143794584c2b7aaaaa486423ea7eeb3e09edf7ca04ca68847f95215ce485d777559ba1ef21e83236686dcc28b08f5384dffa20d5398971a9acb30e43cd057c81778e0696e94882623f2e26cd1f0366b84217efe77a6228e99ed4da42e62b1a2a804ed1b51995c5e764122985a6b2431c323fb93d24f3c907e7b2a8ddfe80a4ffa45a0c6d4b6ee5834d7af6f98e963239edc82a84ff4fb6f9ffd4a2fa4d023977b320ac4d6c69f7e0badf5d377f150eb667860d7384bdf8f0d4ed3a7ee88357fb0f4f2380bcafa6e807a144b1fa479002a585ee6d2ef046808d0906aac228bb229b80da2fbdc54489abf431d53a700286a7db2e847ecce5348f50b62a520a1287129680cd8b1647895ea4d35a2191fafe28139fbf38d42a039729a4ba949b1307666c3238af17b39274822f16e372e578855a63ceac99ca291eb11220678bb6be27418f95c6bf5ec155b975efbcca67718272146d9f458863c95105adb6ba26be717cb59c7ccae269aabebcc0816995ea64569b81535ba0186903911ece367a33fb8abd0c52d197fe566f51fe36ffdb0194f5102fe0bbd1a7245da1f5fa5ab7cabb28fcb85ac8a2d9aa7a9c7118ad419860f5c8ee05d51794f7dc2ab0424ae82abe29ad93b531aab84834495d527ae496774ed39b42e2dc9588dac886afc5f8f55dd85a7ec77fc952676e4ccd514ab7ed56a77e1dfff9c69c9931fa81346d2b5db8284421173adada6d10266b9c58e55bbf5036d81678bea99f8c49f912f4db9d0f928d4ec0628a5278ff58516ebf38b74bcda80bdce1a6fcbf85bf4712c2ae2b53253ea940e098d1ad141d6c531c7c7beb69ddb31d112764d7020b0c34c5a9e2064f3812c96d3e9ea409da0172a4272f8ebfb9d5cb925feb1c07ceeb528e97ceffb9d0bf3533b0e043ed04f8ccc5b543123017ba5488aa9d2684681f2facf655d8862e66a8c248fd1d9e1d2318363f08bd2761914685aaac5fc8698ebbec5826b7fb54ffdbc164b43f3b953ba4859d1bacbeb76f7a1d62f60ac153f80dc93de2ca750401b30675cdcca84f2ac7ec4359b914ad9e93d4880752c2ad84f148918a4e47aad33100af736fa40c7a5f8c7ab91098cc43cbf6b3faef70a0db2ae6ed906ead62c05b9fd5606128a54d754ff9da97fc8570bd22f1ccaed251626414f896185fde1953da3fed42f37caac010e0ac02f0619efed2b72e4b47b63e330b11b3e495e0d2fb8f38d2819531b5279675416c4c9931552f05fcd3bafd541d2133e0340b3c02c50c68010314291234c17425978fdacd4d7084306504796ed4ab15a140dbcf590fa8e869a7c146079ebc916260728565baef4fcc9b5c98d98188557f86ad257d416eaa7edc34b730dd5e462e73903995ec70fd3e40296dbaf9490e668a86a81aaeb792afe876097337f500c23cae96d20803a2c5fb2fd6a3c774548550f1ea6d842dc32d600fe633215e7324f440677a7eb101cc61b1d7421e7320b1b6582490a0459418fe66467faa30de83921b004ce3abcc85a8c41dae451c7b48b69ed343cb5777b98e43e40fc5f4f6e6d81129807741aeb21debfa5ec017c864f5e1183af039c2265de6a0aeae24bcb91f5a215f361c497ebd12e51afd9e0197798ae708707064892f5e08f247bbdf809b13c6f6563164e2c6ff535f23474fe97907ec2ed335de8d1ccc0c058930a96583737142992514f32160c31ebbdcdecc8aeb1eb782192709e4ff1337888eac1fc1d3cad9452b096894341ea0f91979169345b5adaf9b3e7364bfee7af6074dc53e122eb5d304af9b3807c01c7fdf738f8cf5ba406f74493f43f35e4387226952d7c0df34499a48d0859b813fd9ed832e226ac2e3c275903db732ba0086ab78a8cf5fa91f8988ced87899c72d6492991d165963d6765af0e4157d33a6157f27c1d479f14f4118da69b8755c2337d5d4422dc35548827c306c015d87b948914ff20ade2fbfe07c6feb294d107182a885ea4501197f3af7545c3232f73a438f96dcec85c2d32d66e309835f777cbe67e3d4ba731030d066b6af9e3f9665408c5b2717bd07af9026deb3565d92e9f43ed84715168a25e912ca3612c7f1c3f658e2f8d82e779da52164fb16fa2339091f8743426ce40b5f0b5adeb86090901ea33045da526478f5a83ad5a7827ed665b8d9af021a1bd4a7b69f48f32e74e05f30b248325666d0895c690a57b03a6ad215ca7313e2ae9411a9ed6fae76d57ddc83bbc6bc8d645fc99b5d0b1ecfa45ef25194307f2ed1a77886217c01f88469245ef89dcc5b6f22c7e540f5c52d9a2ac9fca39f87587da87b6946edc40eda36597628946fde519e8beabecd8914f5580f5893c6507594b4f89bf394ec9ccd8af3fe0def8be4f93fef88f2ef170dc45118a36f47c280267bd3830e7f8465993a8b318baf994be376760e93dfa70eee8dc511571e22747372b0f0daa2fd0b289f889652c275dcafc16848854f9a19b61fd3190ee7afea926b091619d6b6a9c3933be537e8f9b2fdc0e2dbe40a6d3b8bdeb94813877e58cb0c3ae0f68fd09b56fa0ecab711792a16398bd8a25e5c014d220dd468bf976e175ebf6cff9728de613f37be9df5318906bea7b4c28f296e684bcbf73edfc54fb4bdb50b8ddd1024057bf7177c3a6e53174f5a52bf80a1b4294e03abf222160a6e35901cafcd9729ce74b414fb19229d58c164b896fedbf4244dd78fdad7a30c05b8f4c5ba1e54ebbd73a6b0204244e70c95940160458b48fd902eafbf682b2da5368174762d047b7cd139522a0360d758d7ee08b545049ecae27a6298291a41bf2238ea6c2d3a0e8a358ae805d4b963fb73ff3100a3becbe4570ed0270d5e69d43240d8b6fc2ab7740ca52c3300a1999e82af54a023aab1e07435\",\n        \"signing_randomness\": \"b108f674acb65988cf8ebe593ef0149a3c194ca21ef363ceda20ba049428cdf4\",\n        \"sha3_256_hash_of_signature\": \"079acc221a6a2e412302f13aa07a5b47c1f278a299431a56e624154cf1420ce1\"\n    },\n    {\n        \"key_generation_seed\": \"a163a1ebe1d8792a02887f9636f59e4ace55b8f7d123920e3739fe1c03e1ec72\",\n        \"sha3_256_hash_of_verification_key\": \"05608ff7896b81585ec9cf5ea49bc37eb0d1d67048c2e42545040202d216c09e\",\n        \"sha3_256_hash_of_signing_key\": \"7a0183285dff0b1eabdb4fb2f94a34a344eeb8ef329a55aba0ac49b3ed5c0108\",\n        \"message\": \"6050698621b96c32bf4642e0f88c1118df03ab0d760cb6e13869aa4dbbaaf1c1073c6162320668295cad09484192e214de9b51393b7be0b2b3285cb68abd1cc0a044c1db925ec500b3adc7f09c05843e6f66e7a5b3e27e8a65c855b6ca3f89ee440d22803702474551b1fd2ca5adb4a5acbab580774f669676f70a644747a8bb1bd9a5805d607cf8e7f4f348f221314791dfe8c0fe6d76aaa76e60471e734263758a8ba8edf6c64d32e3be6420aea5bbf06ccb61335e3131917ee693f682452d563b9c27adb1bd8a6ae23248463f09dea21ed94084ca1a60de095d9c7884c60ae57f175b7a226db02aad6e30cafbad8ed8fb5c88d2164bdd29d598003ec975570508b5455bf09aff4bfe15bcd402cc90292370c25522c90a1d50cf090b5f60396a06a55ed3fba6efcc31d49abc5089a3ca46a52260240d3a1076669ee40b84e537fe98bd8dca86d63708fa96ce354c2f859cd0bbbef2315a0977436dcd0adf873a19fb6be44d7f9300c45f12624caf7e736b0dfa41abb40ae4e3beb2c906f7712eadc2b836a9d85f50ed44a3ae23c7a978f4b8333ee677ca5132162534f0c4a91d70eeb805243a7915e529bc347b71df692c1e3476dc0dfaa157e830bfaea76734cf577f775652adf687635d94cf289300927fa5a6667f3cbfe904eddc0860aa98dba09cedf9405c77bdad0a6fd28cbe8ed8ea57986737f93ed5cd9beb31de8c31ebe04638bde1f6eb734a647c15f384328db9ef5e7bb44ed242add50c2a75691b072554194bd5da4fe5d3bc751ebd97ea332ce29b655e05fb893e545ada6780bac78ae9c912341a3d8f742d789095ec5f9ed90e5c18a8cffffeec67802e38f9b8e7577d76121b63eefc6eb1bc0f99c68fb6bd5a6b6d3ef62b15259ddb6cf5f3a43fbc5bca8ac180b56ffd2f0e0bf784cdb80af1af978bf2d15b27e84ee90d26abebf21d628ca06b119491ce0987b78415ff45a8841275dd73cea63238de1bff3809dd3a3b97106e9181af90202dceff58f4cb53b1e5dd8bd7bd785b661f5aaf4cf57e49de99dbb6701a96106f4444b71aaaeceb438dc81289d07087b693ccf498d4184e5e1d366e869c82731fdf2f303b342d900f645c0605e44ebe243b73b4fc9dfe601278aa57d0d7682eed0c7ea3663a9d893f409c64d6b0ce403673c6f2e6f254ca649e8dad47f8bb2375288dbd47226134a4ad2529fe2f7c5a9fd7029400fca700cc06e14bd1ae20650d19359504fe5e25a4f9ac5631118911f8e92178711a274f9c93aad4098ff166338c0cb6d0b6b1caf33ad4e10ef5324cd8eef076aedd58b9191f33f1362082b6e2687a995e57f6e8e008c78103b4bb9e2d6b8c8885cbc2c55164a91a27c42d47e0c2fc6e5da2da44fb3727b4a4200684af3f3385b48a8daa5b42b34a5a21a9b57902e6fd43cd1124bd1a5a1f1419b162d4685a1b844c1e2037f3103f16fcefe3581062bed09f2ee26defc385d6c3e9c40ea8a162cd46cca066880aee1f065b62c8c0eea5920e08f02ccd8476f11ef0be21c2d0dacd1053cbea442b6d9af07915131a74b7dcdab0a1cbac3247da344c8bca59a45c26fc53455d005c7f66e6fe086838a1a77a499e1cdccee4e8ff24a3b7021464919675a8c7be49b808dd5de0b61925c6c80fef44d17f93d0d6c84e0e45f671a52e8dcb6f7f42f5c56a6d6f0308e272f7dad65a152c1154e40e7bf26447e948881183f96d6187c7d1388e2abc5e12da112df13d88e7ed1499a9f125eeb9ff529c8d424bec1d5250720d6d7c0a85de3336042c9489a4f6843700763a1bf1a2da296154b717e67ca648093bfdc3eabe0ecaf25e7125e8bc338a2ff0002a5094851cc368c4b059fe2fe41eb685631548817a17fa1533d68a72c7f26e980fed688f76264933304d6895410f85440e5a6e21a3dca9b3d17983e0a531b5b462fc99a1771e980458d6dbd49f1d6373cb662d4f61a928cfc2416e59edb201ab0a067d99202305c6c6533480c5aba3ee6f2c58310f487a092447b90a9ca851faa3c73689d03bba8eb6a4c1078ea532ba19b59e29ad3c5fb91701395e284401119b907303ce634f5a3457f8a1395408366ec674974f4a5c4fb4763722d2ab8d430e6555f92769f45e8c56f7d967ae2bce42b3f895d5b85b8b7d168225906a88810100f5970b96a6aa1228e9ac83e9199860dd5a442ef49e27f92aa1fc622c4c6003ce86933bb07647abc2c32cb5f88fc797e13db801ad36de946c1fe33778dd6e2b65bea4fa23323e37b755d585bc8341343cc2c62e1601a2032e68157b0bcb2b1f92bd228346f392e959cbd3eb850308842aed096f6bd6b822186f54c863fb0576791de152a6f52ae52ecfe9e596aeb9a6ad20dbb92793ed6a748dd442ab8cbc83bcb1f4acab110de17b240922b4679a0d098a3399d15d88ee0275804661783bdc2891b7fa780b53cff02ac5f00371f38e00d75c49eb15635a88a622206a823e5288dd4c8f297c412049128adaf439b79a4e04c4147534abe4afe16922330a341e9a68cb86bfe183c647d3f80f673eed8a137b123a37853bc395ab4399bd74fbeda168f25ee251c4fc73a8482d8d0aeffaa8dec6fe85b8509e61673aeb8d3e369e3face62e1bbac816f1f21d2b67503b47c5c516980be8c1f54226eb0f910ef30ccb4ac48fa63a2d195dd50794d5abc219881d32d0f9bd70e8549034e8c5d70323a3dd2fde2f4321fb64496ee14be48a81e3b0a32b0d04eaf7d61c4c9237ace4d796dc9f508ee0a7f85cfdfdcdc5a444506d3ebf3e9db71291269c4895f2aa7358894225440eec7d6588a653120a8fad43dd7b57dcd5293de153e0253486956e67fff03680253bda225a44944631328b6a6c50ddeb125b79b317b358ea133b58c430a7a8cd03843d96dbbc0b6db6e6d7101dc6439b6d8dfcc5bfff47e1a046b5b98a518480b076cee672cebe732900a2259e4007b2671820b1483b761a707b483ab990ef6fab7bfcb8b67a5b4eb0c1ea2f501bac35aa0e5cc2f1a6171412b67957d3a3ea49aaca1852877bac75544f9c2dfc5684cc4ac85707e4e142f4a6ab8b9c9b1e6185764f55c5fac9280145e50f52c2990a80b70b4f08e64123aa77f456ce25681bb0099c87bc57474fbfcb6d667f17ef99250d6acd648d63d2becbca0ad1d8d9a5d4335d3c0739c84e77a9f201f6f9f069b25154175d75eb6d7d9d40cd281672c8052ecdac08de4258df461813119fb94f06fd30a8c42893ba8ee6fba6f6b1db107bf42d6d757a158420b1255d8fdd4804434cf4ee57ed2bb74cdef28e888ae0b963e1e69df093568d941f4c558fd83e3e82821ae09d7565bda714201e960f80f514d9920b94593a018db6ed6b4d224ffdbea21e8b9f1ed5eb7d9cc40e73eb924cc1dcbd7c8aad7bdad03accc7822646ad0974b9ec6cbde7297af64594b916d4f404bb8320f8cc249e6d44482ea1bef0133526fcf2191d720fd0b4492781b53ebb4f99b1779b4ee70369fe34b0fdf535d63a54c7a2b112e95b74397e2d8ca41586566b2b0d228bb37cf778e651c2c4621045e5d4aebafb02ebb5dd64ce26bb734f90ee76691b5eadf60b8f49a06cc60b8078580c5cb8cfdbb031ccb883a722bc91676eaaa2dd6bf77c59f3723c3401c210a5ef8d8385e765dcab5854542a3dcd03af4d45f1e415d2923850ea602d5f4080d0af4b2a361c7671f5f1ad95d2ab1231cc61ab63fcff6a85e1478b8ed231fa248db5\",\n        \"signing_randomness\": \"dc8b90d4b1290c7c99acba5c7923aae863d34e05c4e540cb031fb0f2d957f13f\",\n        \"sha3_256_hash_of_signature\": \"aa28cc5bae1921e77cb64bf5cfe90fcff846ad47177474dcfd1d2e5afc803e8b\"\n    },\n    {\n        \"key_generation_seed\": \"411b2a57b081380fd308112e14c1e8ed3b5b65c2da304e832d209f72a21323a0\",\n        \"sha3_256_hash_of_verification_key\": \"7a82e7b129630baaeac26a2ecc91f04b544c30d09700ece1654932b91a8500ea\",\n        \"sha3_256_hash_of_signing_key\": \"747f4162d4ffdb5d6e380b53b0665a839d07981765de6ad47cd7b146e95d10ad\",\n        \"message\": \"73a38bf2ebd13845204fefcc5fc505db31dbe58e0bbb9453855bf5a5d8e9679f53b381386bd65c130c2a6f1a4a621015fc5cdb310614380499ba899d2b82704cb0b2de6811ab4eb62b0d825f22d872389ccadb96e05de3a9d2b636c21f2b69881fdb2e0dd54f2bf4ab2bab461cfa1bcdbb16ebe950fd54e23b20bd705af9565860a3ff54dd019d66189f6fa55f333b6cfd3645ce7e2e9fb1900e4229e3c20cd0de361531f5cfaa3670d4b37330465cbe82e1a1f905a63c7bcda91238f2432f94ef3528530fd0b3e33c568f698c832fc852df41cc2edc5b8219a4b70e19a0afd2723bfeb9afe310b76d6fdd53c775f8bf83d5b9af42f91edbfdad12c825459d8002e0a52a9a20d97e31db8c419404f91dfa5dc9bc3aa5d1f9517870b286adcc1423ab89bce3ce6bf0f4328383ab1bbe225851bb93fb8f6c60fef5116e07ae7c17dd4b9d493bae067d2fe19db50b80ddfd2ab67ac506e40e5851e4d477f23634b3778b7f1c20ae12deb9eca016537f2886a90b3348b381ac0578a995e12a5c56928fafe8d4cb3add5ba2c97e1a8f12b169c7447d02214d46e417818da7c4294b78eadd94a90b9bd5527b05452c47de8af9e50c15e2fa0bbd56d61088bd62f92f373b4057dc44139c34f9c7cad44fccf963d057d5f88ba3267b973989c98ab8dbc6b460aab165770336180777e6fe11c7db465b238b59fdc1c95b7879b8638bf37f240702e506ab1e9f50f9443ce97f94929aa18154793e2e54edcce295c0c8ad51c536c444622dcf3f302a8864f7d5bb0922d9f09eccc8f8a45dd3d3ebaef2e3c4dead8d648dd2a27f27dc5db3f99b505938a5cca3f63f844b330f1147a6f5177c139a061693bf1484012fad3fa0c8adb2cdbb91135cbdf09e3c80d696bdeebccaf64a05fc1da0d4b208ec68471c8250b7fd570c11b4731baca03ed9b75589ae0f3325503532d3afafb49c18565d826b2b371931be094b88535aea0fcb7a49536302afae0e9ed4a58b7e6d12a4e467001952741b00e35c3e796811792848b1346554a2dea9f9e2f3fea88725f5675c45f9f166543b3bdebd96a707b357fda09230bf61b46152167e4433d8752e4717a17397008bb4ad9605af5763a9a9ce561523110cb48a88bacc25afe8ee836820ac906ea9b0503d6d52fa7b0e4bc3ddd0b2d728aa6b0849326b9cb168eb76b5fd22ed72de9a865eb7b64d4e63a944ef17a2ca07995f9d42cec4132bb9136c3d81de1f94a8dd4ae1223665394ea665189ec32a888fb83212a34100b84ba258aee84d778577d32c987967b9820a806ac87d14256dab06d2f9a578386c17506f925bbb5bd91d6c5956863b304dcd3df44f6befa91a8a150055bec6354f322ffd18043d5a7e4c02d6e0db77b24a2e51e250449bd218f05f98c343e804cf9c99e282997e2777730d140fe7a9a643934cfcd5195378aedd0f1e98dbdd3568ffd3dfbf5f76b4f89bb9217c046f54ced4ddb6bcc5db816f463a87a88294f605272d653cae5b996a1c8edaab8805ccd0b5730b1b0419039e78cd3efc0d2faae936bf71a7cf5dfd5ff914affa0dad0c5e36ca3e793e29c251885feb5493ef3a7e176e05fa82e6b9233a3ef78b1d7faee799b2759497783578c3b6aa4fb1cf700ac2469d8e968125835f21da3c70f81ec91740e9e8fbdc963b76f2a75ca2f33e095a0ccc79ee5e25e455e02cde83e107b3b9ede6dfb21b726b70d8efc730d9c07ef9215f5331a409b6342bcdcbe8d496e3feb78565423ae3121c652f2881bec163ec2a9a5da225cbb12a7d747cd0fd958fcf20be9f49875b7ef0b448b8212af6e47c9760e2d61e13ea964a2f88f9633cec9874051dce5397eeda33ab8371787b9d7c36a245dac9930e8143ef0fa7bbb98b5b9bb28717aafbaafe4b8b427ae65aed0f7a558ec02b753cc2e78b28844916b3d466d6ea9f93d34d257ac0776fe1d2b1b990a6034bdf3c928fd307394bb39346f1bbdd01cb870b388ed7e012c5af09c000c3165daee44bca49923f080050daad04d82885f2177ebe179cbd380f86b6ac493a1d4053cd7b52045a49ca7c39b07fa33f542d244335fbc8e369788b171d9e4ae9613e61b4009b0807b244a8966a22f50094ba0b35c163c1836d8851a1cfa6d4c1ebd1803d32a34fd392f3e639b75c7a339b482e1de8b467840526e699312e05448d0f363371ed5a57b36a468902b11bfb609f2f0c4ce83b859314336d9176a9055d1c3b09225600e936a257ba9ffaa9877124cf15f57aedb013fe5bd1128ee3c171962d18fdeb95e5d4260cc2c25493b04917b342fde6e6d1926cc96ebf59d349c93b0fe5eaa9724af90e930edca04c127e2b30df3c1fb6910a584c2b7ba0a6b522c565aa3b53a3ea7b8fa8e83052c40d436e72bfa75f4e5a870ac1086d9e1d306b12e0cc6e47e2572fb2f778eee39a758b3e5868e3a57403a2c98a0801ba6060aed5d6835f53296d53f9f860f4861d5b4f0c0fd84fa1826cfab8aba1aef3f255d799a10de4ed35ff79459a9eeb35aacfcb37fda3f9bf2e55f8c11299f5871a184eef9e66501a5d776b57d12f82fc0d7f27fa2afcc6af4e245cfab081ae21d03de6d7ceadc464c3f098a0308168d2e3aa6dc614a51272e7b0436632a23c8a2286b00ac99102aacd8687dfa71ef9347e5172220675643b676e4ca3019f9e7a90996d428b0d1f8248df24c970c48dd972243c282f1fa6937809458efbec01fc5312eb117bee43bcd68142afe28e023a68c0be2e4afb02ab9a704ad5215d488247f18b905c45906f88d589c81bf52e38039094446d67fd6997d6a12f3961a77ebe33d13719607539cdc220de52feaeda02b6b8544696dca1e3585dbbe59a98b5191477f650271912ae6a714614523bf6504b52f3725eb9af0acf79660aeceee79be9639a0f8930143b960471cee4867b5d939f6be470979e616f69fd2033022c930fb152dce7cdf698c9f2d090d2b507ab0a1b23a25eb94641e2396408624c72e546d92fc13d687d651f866376590554cbd562cc7e7287778f07cd7495c2bdf259159bf932477719e8fb8edf903fc7beb92ad48744801042256d32d2259237e7e3559c3db84c5a7df4706dc58c700a67eb5767f34b7382d040b15efb7685f92917e9b470967f8b117da8fcf2c01d8888d03bf36c1ff7ecdf9ac11aef30409f4d54229d2f962d4128af6faa654432c06ebc562705dcc0148d4724f7b560332320c0c175c971c536b3260a895e069661368e51844a94095be11815c3a14ee55429097d39640ceabe548a519a40517a19af500b017476a358c08adb7197f51c7c6361c3de6e9320dff96cfd02d418578c8b98809d22ef4d6bf6653ef8a5629c2cb206d35584f5810ff721162b217cb1524c9cadc73d2e0e6121bd3d8dc9b39e8e9cd47bf3e31822309a847d2581564e28a6a9914db57109d0eab2546a8c14dd99565805341890311772651c422be089e448be7f2760567855cd369581ef67d7514d8318929f4f136962d376ddd4ae2eb690df26163bb7d420a665f168619c61eb983eb2dbba4816a96076231fbc87147c0d64b8576fcf13ad19856e0e1d2d9158be1f04d24e67444b1b03ba8253b2f0ac449fb9910a9924fa2d1d330d150730aa75db6309d9b96b59a884b55893df8ed5fba9909c068d1f4c7ed9f3fa2d1c475efc1c32086db0e15b2fc96f0cdb1c49b468bc6e1bfcf0e456c905fd8d3a7831ea88e5393f9695ba434b7eb32fc4c867beb2901c26582ca18558c6e97a546d6747750d1b4340d16b8808\",\n        \"signing_randomness\": \"aefa8f4a8810645b73c88d5df6cc877fb23de6f944d3ea343261471bbd1ffb9a\",\n        \"sha3_256_hash_of_signature\": \"2709722a4cb8143b7b6df67513f94d8825c88cfc96bd44e1d1f348be4da86f7a\"\n    },\n    {\n        \"key_generation_seed\": \"a423d5f54971c222b125ed7978ff8c29269cac3f16d34efdacd6f638f21ae3ea\",\n        \"sha3_256_hash_of_verification_key\": \"60701b2cf70c3c726fc5ef2f1610fe2031f52c85c5828013d1356a4cd053bc72\",\n        \"sha3_256_hash_of_signing_key\": \"e4746f84a1d68cbe1331dab6ab843b652ee236826b644bfb10fe680e2efe678a\",\n        \"message\": \"19da27a1554b3499e2029941e5efc49ddeb8ae41e3f6e4dc16afaba8e72231f1371eb6da41fd26304d89731e393657ced79174bc0b646f3a7715b9742af18dab9e77d1f6b5f1464324f554353976fe765148204d4c482f03f526c8d599cfca8451c8fb58c91fb62bec44f3e1dc5dda24ee14a08bd737b53dbff0dad8283c6d8be9941bbfa0b2622bf1fc1639568e007c1388e8963e5bc599f86c3b7c64a0d8e7e76903d9856b2b17258bc5f4398f8cf5690e0dc42d96c5336e19240ddeea655466cc1dd3e4b0f473bd57783cf170fc4977cfadabfd45bf89456fb45fdc61a4242db5bae0c2cf311dd25840e84db6506eab971d03edfb7349df4ecab99f64b637c9dc75a5d5655be0b4bd60b5a5367fae51203ebc8775cad4f685ecac0005c78ae33c27c8e0678f800a65528e7244ef37b1b4d80e1d16677ae2443a227e134b828807cb17fa9f381761b308433d32ff694224bf438223681fb037c22c60ef8b7f1ee9aff67a8ca20b30085dc0a1790dd96536c6302ef2f026503064b0dd9be553f9535c1bb1262b73759db5411b266a3b3980dc7ee81ab08841ef4cdfbf25f708a63d3d366102d742ca0577dd916b59e3ec62f268d87788458b1d195aafdad95b9c45efd7f9d7b0f0006955c4018d2b2925aa9b66f3d7f37829ddaac119a538516613b002bcf2a2b6d75424fb4aa3f7ee391ceb15602ca3e210feddd36f74d123b7499ebd6568825b5e57f1950321a3e2e5fa9443aa6598c6eed178ff7ab18d6cce42fbb755b486a93322899616581a75af6aca22329d21f407346dd1fa16f6976a442e2ba31209670c796ecc1912a34ae0f5a5bc5a28c0cd50a0ecfb30625c6c4c51f117b23e9f5843e47c428f01ef661ac7bd911c2a743a04179a20bd6793937a4770526c03d92ddcb701e4b4b547de3f64fedd6a089c091987f3c0746cdf5741068eadd0ecc2f8c69062d32ff656e2510beb1fb75555bfb1538a17073ce78725747823ff0cdd830194e613045daefd145a585e0badd71a863a3884c7bfbea4c87062336c6fcc26da157b6f95287c88c5fc8f326a5175b2022572d6b11d020ab0c2e453956dae7917df7acc2d9555bb9271c9dea360bf78824f5d06e52fb9cd10a38085059dd6c8343bddc253b27912c497c2308115757c2d7a80c2fa96ecba89a6eeb7f576a6e9514623a9d5f9a88c111cbea614e5ae0e4730a8ebf2d7fbe184642f19342b506627393b282af5ecc20a47fa5431456780e7eef70e57d467b1e33bad7dfded97d92eb90a825f51d7ec7ff7948963c68eb005e25466cc4e8e2e43f9ea4fb74b3e946d2a4ca25bf5aedfdee4b09031db8419c9f96c771535f52285f96396efe51b73127d155fd80a73a1eaba9fdba78f6b489a240f666cae66407b4da33f0268647777859f90d8ac45a80271ff8f5241f8a885675d1cd52d997ec48f431569a3da3efc76f5316d7a255fa5678e00350e94c4c0fbabdb275396e643810092bc3c277a161fc916a8b3bde6f06d6cbc279b72e8e7fbbc0a4f129c28b0c99669eb95185189e65b2ca9a94757d3966fb305ca39ae91eab863165cd667c724426c27ab97cc98cc980d88b0123a215c0b368631702bdb39308979840be469ef42b6a7b9f5feafcabdd61c17c63bb6c870d75d02710c2cea0fa1ab29fc69fb36edc32bb517f2edd9a006e4ebd8a1c10c69de8972a463602ffa9ce2428cd9b4e534ee39148cc9dc53d9f579ae717cb0f180248c01acdfbc44091dd8182a52aaae37c02ed909e6ee1e4d8de1a9f43eb3dcf076c839539e4b0337b0444d7ca4807ee75f3922447e101406baaa5666af9d07059718f61af4b6e737d0543dbfd00ecdae6078da7f3b8edff3784ab654a998e7bf8173a4cc347ec3b61b38f84f6a716246849ffe64961918b40de90e6166c0d6036d0ddac243087db1b2d67713e1269d1ee6cba6214baa64818d4274d9b9123a003dbdead16ec3fb719542e00e8efef6654de86e9245793cfc60239cab936b1d71842dc8ec95979aad026e61ebb810ab82c10aba860afeec27e2187625cc7a1e576b10abfe48d78fb263fc100d2252f572645f67bececee2a16f111e052721c9736ea1afaa1d623e67057874c90b1d1e4e6ff6066d6d9dcee3164db07ce558ad416f148ffb0f13608f0cb425a23add762a0fe8574cea357de711605eb1669b0b5a491ae90393c6ebca56993238cbdf7d748a82c9c165de94cecf24f26f2d92d9e79d0cf031f35c11e704107d0db8b9b29a581fc2c2bd84b067295d79ecc388e04694f5b86679f59e1f2a2f6ea9f39cb9608715b40dde9040e3ecc64bc9efd3d549224fa9d983417a28fad7a33534e707445bb3e0d1382005d05b6b91ff353dfa0ff6a82b712f303e7ae77f0df08adeca9b8cbb26c938785dc82282d016eddcc468e4d594c397e54c533cb4b6d3daeeddd5579bc0ab61b53bf5972562fe297b91aa40666f055543195b29033c7d79be8b9b9e6dc0e98d122d8d9ff7b4e14c70b171a7b8e190b4b239c2487f0154b78d6de9090e0505146577664566688a029ba9750aa5c40d19d45ef6f240c1fbe7d003f157bd5a57bc9782549531710476906bf260af1a03847f8d376cabd46855764c988d57085e97e1961f314185d0d6373f70f97bbe0ab513c934ff4f1b8ec5da18e2e8b1310071af930c27c033012861065e120557be486e6cda5019d820634b0f83227f78259d53d7a20893812b4d7c4fcc2787a48b88f0254feb248f0dbff50dc83d86bb56135c11f86e393271e2b75fa90022738b40622a46b1a9e61342fff776b44b3a6996fcfe3db444f8bbcb965de9e713daede96053aa0458012423bdce49962ef6122cb921b45ff1c50ae3efb6122809ce08b7b137a5a7ef4469b3668ba425679b32265ac1fb8dfdf0255d3d9007e2fa798a6dbcc33c26bea981069d4168e77f2db9e57d3cf8127692e6fbbd3f610d099e92dddfc45a7298669278a67becb3826d3fc757ae8c3ae405ba3fcbe9e125a0197c03fb2b87dbbc0915f221de2147ec9661f0f07bad95fb73465d96b0f9fc5219c15c9f7ca36890ac3b56dff103ee7d7350de319d3adcab57ebc524db196d78f1e89c7e677b88f9c772527c3e5d3cc18675b0c07ad1d339d9c990096ee70b11ae51be38fc945cb22e89a73fb7619f0949b13e2130b82771e34d0d44cff39bc7f46ba66d484608f3f485138d497b2e0ea6997d447701f29ab7c228ad74f3d1ea6432032c03afd700f26f1c3adcb4bd2f9fb7eae1a678d76e5cc979af96de8f586e83f606230db5683ba75da99fc6780c31e29fe940ad191e116022591bdc29be810c296925604087b4d236b8ed5b90a03313b7e4d5bd1b6790690f31ee82a5c829a4a67e8101bfd2b82b9c6932c10b25047158934cacc3c17210a0b11dc7ee732d9b5e0a8e8c7494e183799ce09f665b7cbbb99c9b3a83d2b8a67a0c09089f897faea767bf4e2deeed21b2aacf45765aaf911563cd70977c3a488a0169168762a6788a1937cee875e355d14b92ee58d4869772c993fabe4bb20ab0c69d05998f726f28737f1044b6703d424b973667e359fbab3165c53e15f136dc74e8192aee96bbab377ac90f4c44346483d12ef740f28d78926700ee1f68340d08cf8421db44c7d3867da185396221b142adf2132a4230aa1293f4cf3459ac4ea13fa10a8813db37ee790c65f30fce5c3392291765ffa938ae974fe83be00376ffd9d02aadfea2a3c0f0fb07e461f2c1d2c57e697f3efe71443bb58cf63e5c955f7c42504b2226c4f85da9a3e2aac5f1e826034141e300d86ed27e8703fe535c5c6c\",\n        \"signing_randomness\": \"ea066917e7edc4f53359d31be0ce310320ab265ff265817df21372dfa33fd25a\",\n        \"sha3_256_hash_of_signature\": \"3e5578896feebc9489a4e7f423c4616b4bcfe01b836d228a2c06db56ad207077\"\n    },\n    {\n        \"key_generation_seed\": \"6b686de28c871179188cf7678aa68a40a4042416c1dfecbf0c2c08cf90534ec4\",\n        \"sha3_256_hash_of_verification_key\": \"fb16895b668b2a2f73edf3ff67641d929d3f104801f13f2a1596b0340279899b\",\n        \"sha3_256_hash_of_signing_key\": \"a7be0af29df843ca6bbc0a5fb33e7a562bddd54ae069a94ee29b19dff9f7030e\",\n        \"message\": \"d48532bb632d625e130f5af9dff980d36ce02602f1680f34ddc326c9832e253034f10fe8be4d6938f649bb1ee8e595522879ab4f1b95a2eaf0faf9bc2ab4db6c85be980d53558789ba535a4c396889db118573d48551772b7ddc5037224adb95c148ab927ad357231d35dd82f9302151adaad4efebe38ee16c3abebc2ce3754e8857351d6fd387a7a70661f4e1f98332f74c0c836b0514b44fd101fbf4b332d6c83c9b02e0adb9663bb2f15cfb3e5ba7d211c3951247f8e3e5041a148ceb572231953738bf4fd67d27094348b2570eb3aa9559665efdd4972ef1ca3e21674aec6959b3500111fc62cfb331475e284da063af2254fcbd48b761b52fefb91859c05fce61e1fb3b630dd5cebad95a92dff73e9e78a381c39cc12e98b42d570a92e7792f5b3d57df42dec3a6a13659eff67b83b6cad5c143dcde956709f068aa1776cfb19921c1f01be502719222d245d8481f59227ac8b30144aabb6d303e40df28e8befadbf399f5152a1064a4975efeb3587a4620a065a2ddf171dab147fb8b7d48d8e454b4e5e5f7809fea3c348404247722c73ec2ae8236a3e1b93b40b12404d8f3966ff2a8beb52853492ff913d6f2cc2fae092381ed15f6ae2c170a7c464c3a4b4ae4fe37f50b10c52a5c47f67c1231bec69f3d05854f0f5eb31488271d788c6665ce14cc7a47378748edb6948d6a41dd3cad04dde0143578edac908b3ac20212f8d7c50cd8bd7e923729e526f7873a24cb5044ecc3059b4c2903bbfc9a75905828f6386d2f7197064495edc85d4750e4ec79471ba79b7ccc4d00ec50b194baec115457fcc5630860f92e961ca523c3b2fa8a95c6795d66dcd9a1b139660b6fac0d22651102db7df56bd308890a8d5b21cfffe799d9d64607e8b773dd106530a393c0644784b8f6fb98e3bcf3fc6f8792bf28c1b3e03afa4aef4f47e61347df2662d74fed6e139dfea29797a173e01e9a93c2630508986e73c55c28cd7808562d4a995a8e790badb48814084a284d97d81150ceb3dc1c45ef1a1d22736e425b99c48604b5d6ec2e9cba37182e7c4e9a47e48f20e97523d38e849a96e7dc5c4debfaeb38775aced60bb8771e3ba5a317663084e9480a28d0149c8f75bb023b360218b75f93cc6aeba67c690aaa57c794229c34734145f2a0cdc0045c556b3c37bee6d73c60d48d27ad6ca6bff3871a2d140d2a435d79119020bb9a0633caff6ffb14cb622be119faec4fb01cd2cb569ff19f6b496ea15bc860e7df858e11addc1d2b5d955461c549bb7a9eb0aecd86033202d61dec194cef645d1a98e9d8cd4ce35f5b1afd35ce82afe3dfc86b4ce4fec5d3f61e65ac0103bd66ff160434063e0005e1677987bf4f43a001ac48ae1da0f4ffe7236b17dc5092d524ebdbb6152aca30feff320eff39b6871b4083dd5cecbbf23496c4be86b7ce36ce03e13c061486cee7c258c67f8ca3d624b5a1353eb6fcbf81bce2fe31f015a2ddf22f17f896402f74048dda647fbd297be21d970889d5d51b011b79e2e782dc5d72125016f18902575be27ec200756844398442ce520181d36230ab428ad374d21727e119f2f71dd8f6cc5d18971a75ab47d606d18fc9d49032411a470efca1c24955beea6027df38c0f301cb239270334a35fa1108ba80914f0fffbea311a4caa6d342fe21fad70735e37b1a93d356cbc87446e3092de96e02fff9fcbe8a3002bbaf60f2efa67581be95252ccb058429a2569a463d27086ba9b65a8a88a845921fcf42afe1df2984b53ff6b507a06716af43fd8e0ad2fb9eaee48fdff58c52f302437007e27bb00f3c8af432ab69a75f7b75e83f8497aa2d4b2ea439a4069d97bffbdf2431bdcf4a46ba9b9cb47562611f6f41a54a36d4da5b18b436f63b60403b303fa3be5528ce69e646517ba06c9c93b28edc96bb7d684eeaae493eff88542803b894b9537d3e1502b9debee10246009a5f2243319be8bde3a735a6e1a2c206cd2e48256f6e800fe5ef0365698bfb41431281c26ad13b91aafa1a4e266093dc953cc01d79a8ce3da2cd63a0d81f19045fb215d11be7543bc2f5fa3225fdd62d91162009a9a644fcb52a0b34c5e985515b2989cab6c8ada9a49e2cbc0bf9184eaa89eb85a6b264f661dbad1fc364148f7e6dd60239412348e8482d9482b066f12a5089c8a6e3fefa68b499fa3e7b3287a2d2fa82a1ce6b217de89012b77b64a78347301ee2e5ff99e4ea41c4fad058a52be2015d2f99637fba8bfb76b33a61da6439a716461744904206d6334e64360f972a6a1991dca795b2960e40a293b9997970c85b2a50811dda271f94d43114bb784ded08020b0ca12cd0255a3591ddc1e5e6cc40b5e9e32dad01bdcd1f836ac72bf1c41d8c79fe1c29b3568aa3718067c19f853e278085fa26ee5b4f97ce6e67bccf3c9104779a29e6f453e7de4af99b834038f1ee6f773c470f097b71a2d0b3f93605c1f80b787ade1becfe1d8aa8d84f11645ea5f13b5268b79c36286d81d6da0a367d19070ba4676d7c52dab01056e4da0287c037b437ae731d908253209476db9b4e215aff09162f03bd67aef8f8c0aa04edd3c01d26537382e8ffae27e13cedfac1584eb924ab658c20827852a7f25adc68b4b913b066a0364f61bc95823ec698a5743b7ec24946b2c6fa9cd4a48fa56bf9ae578442a57df67d9bb97044583bfbc4513e466ad50c9050ddddcba84d061c6c83912aeae03ae6297d73b2bb0d055dee7317685084d0a32efd0ed6de736ee272500021949623cde859c265c7b83fb7a7dc434135fb1849daf0126f39667938a02dd830e0bba508f62709a02143a55efb8b971d8fabf49b5b0f82b179c85ea5bb655b34d16e9451facf2da80dd197a28534c6fa5ecb8c24a43fee1cd41a400c939f301fdc3752536dc3351a2fc3cab594cec6885443aea07807a8ada5e43d8b22acdff516067e1022a021c6ea084f8b85f0dde931a196e46a2322180cf7e42996ff8bed9ada31ad6378ba04c3fd55cd3fa3b520a842356d73771e43a35ae70970e0809ff9b650f8bb02ccaf66eca117e6b4b5b9accbc7826f7f2dc5fd840a151e8c4b551203b64219b40c228f44eabb24c7eb256472ce56c44253cbe85c5db1d0298fd0d4ff892db00a68ba24fbff813e50fb5866e99829868c90e29bfe2b30b9ef9e7d6e2c6017a899fa3b496817e28833287ff738ed5d849516e9f97b66172112581430930d601699c9c485d1116bf40b7cbcf123abfdefb67c4311f8da4f04fe1c02f3a9893d6c1a21f418b17a1cc9ad7a1c892d7abf6dbe411e45a8c73e79e5ed34c18c746f58503d80f51174f99bf23ee17e228e7966ed04252999c4e133c757f2c2dca93dc74016c0923c178f6a2b0cbf2755faadfce5e50c7ccfa39cf46282df114c8b0a94cd551d929f5f9f2fa5c8b352eac98b7ab2bbe1189263abc81003630b47214f9b3cd55780d446755741dea60a0babfbadcabcdb81c2b709edcce536b59c2c99f2e93e80e62fdbf5a57ce0a372f183ca5027d3350f17e4f0e8f486d4c597dd7d9cfcfcebc0258605e686a28a22ebd434e55f01bd99e9c5a8e66b47c9b71860e6816dffe3fa6db9a3578ff878dae4ffff16dad4e625ba966b49c90dee110433b70b516befa2503947c243593cedf0231ba8403a09e8347a4791c4b06f24b80eeda82d961a03811b9bf905673dd8010da40c412a78d9603becad0b04d3093dc04999b36b27ed8c8089e6e4553f7fa2ad6488cdcf359e5b1a83ddf1575a3513b76b3e2fed527cbd7343b249c5a0ad81c3fbf845781e7dea6381ea889fba42e878956000a029005ad4ea510631f4972d079d1b4d029f9efda84adb71a2469df1621957c7ae9c66e1372418c70f\",\n        \"signing_randomness\": \"1cff5a708e97affbeb6506800252ac89cfa626bc3c8159fddc0eb892e25a620a\",\n        \"sha3_256_hash_of_signature\": \"c716a9a34a8b54cde25635aeebae6e21d095a560102f4be90f9e1d58f5e12fb0\"\n    },\n    {\n        \"key_generation_seed\": \"a613c30b3a41102b3246ad87cf478d3af710659c536ea2d99f9d592b219ca17c\",\n        \"sha3_256_hash_of_verification_key\": \"2126466c3fecc818336003659085ee79c1bc1038ed880ea66d1c35aef928d20d\",\n        \"sha3_256_hash_of_signing_key\": \"77b8141c5263e81c62fb14bce0b9f9f5489ccae7ca78c1bcc354ec8b5fd12d67\",\n        \"message\": \"c97b5165695aad31b74f6cd53dbfeeb3688a55fcd2356d2e0b832b68d596893e9c322e3a71386fcaa2fb4d281c6979574ff87fdd7598e72d7f6a08249d004437be65c47c07ed42c2464b32d181c10ac1ce445312c5e12ec3d6b908d72e998498ac1e855252b8dd9b9261852e1877f10e300e1fe2f01bc4aa606826d369ec57d800db53cd0b67c75c89fe9de0cc06651290fef2f31da5ce0926aafceaae9bcf9a91ed60d457e454cab76d1108afe3c157515ebffc2727e1a93bfb9ab5be3958a21be3bdfacce9926a0c51d223bc903d3a804650ef71c66a49efe267d57dd5ea6ae1bd2d00a9b52d9c1f9d7392a8c43bea1b24f21da18697c2ec841cf5e79c44532824a8022735f69a00b9d511aee2a9811fc51f0263cf453d0ccfa243e66cb7221fa771c179c69857e86a740d70dc750dd23598958f8124039467b00b61ed6b67eacd2fd0f42f83069e79399355fb004d070308d4958e42a11d84559749ea3b3552526f6df59dd296a1bd3cc9e15dfd6115c7fdbe96d5d77998833e574654e6b1cd28ff63019b5cc928b1387907c5b55d9bb3d43b860618f77e42e41e16bf2ce216c4b14cd7a92228a2f68fad58d1feb9c481e5517a43463306dab810de73cb13418db0af1dbdbbd573d5290be6190eecab407fe6d221bec980751d6cf7e6ff6065aacdfea0f0a8e56119504e7c0969ea355608d283c8eeba92808e2f47779e65b08ec5b14f90484b5e5b793dc3689fb7f1b56863ebe2d33ebcf65ed240537979aa0768a69f1f48260571eb8459eea2cd9d8693551f258f34fe2d099e85a90239ea54a3e4e09dbab7538f4d6d696656f0605addb658e0153bf9f84258cddcfd7d6c18f4b846d5d7f1142cd2a2ce89816d1da7b9fd028bce056a0ddd5fcb6f19ee8c13bbafe9e0a126f20f182ce0481b2fe35e58627747b9ed7b18a6a7b9febc7c9d1c95ed21a265d51dd1f780b9516d2d45d088075d96d1f64b613eb81a643f584e1cd510179066bbfe630b8374289a9953e3a9403d9137bd65ad7be6dc369061926bea9e77b9eb497adf2522e27350ce256904b2376418abe15efe5c71d0ca52edfda10f9a4679d6547c31fba3e2246d95e4407a0accf729061ae23e43919dd7fa458e6e8c7a52f8517e10668a19c7f0c11f7c2a946cc8da4bc2e6518add2f4d418eaf92e1149478bebed4b4817290b8e6bb46a46528574f0b5ab5067ebd692cf4a6427a650e1ab5a664b377d127c1418117da71b53f91f9233de15b5e1160c39b41a7086adc41f6fe0781923c249dd1501a56263f52aa5805b54967e156de6cebd0564bc55673f9c13f649fd1abefeea2b38fe3e96075e3cd7696ddabb81406624ad5f223f7875f0720f8534a187ba13740b92bf0a1a13453455abbf9ee1a360b22d49e58c89c24631633dd6bc41c9d6f5c1949fc9b17617ae04668bb19f2e426145ba0aa5e3a14eaa098ade3537f796228277b792568562271422fa48f4e69149798ac274cd8ed93bf42e74640c8de5b8d06c83596c0ce3f97c17cf8cb08566471829f66060e68f19f9388dc1421575aa860622fa3882d2352a6bd135194d9383bd53aa766b7cf3275280e00c2a30aa124c02843c1def8db0e88d2e5ae106d9f6a5667ac59d8e48127d6293368ce3c9c8f2ffc7122fb2883329a5a4030c1839f46341dd24b99eb005b6bc53471dee7e5a724077e88357746e50bd067d6b1637d6c2eb0e714e79cf4d2bd4744099e1146b07611c5687876e310b6a8d7f09a0b57e8c7e79958a06987bcf8e2f394a8ba0266d3436ed6e6a5b2a9be8209a96a825f5844c0c26714f507e12adcf2882767d7f41dbfcca5853914c644d30f1430dd2c23aca5f58ed6b7b52dd0e04bf46ae9ba80a827cd946efa8300959f4677f53d6f4e6c008d542869bcdefa7835ba3be384437512bcafa47384f3b1d3b54d84ce1bd53c7f3962584de310d4625b6ca01280a5faa9a5a95f9e45efcea03572f35dff52680b172786b850a5f3e40c443772e76a04db744ed5a823be5d61f59b81706f7c0976525ae4c1d1aa48c48508428143e2f127fda1afe92f7e42683e17170e4a6af9e403605154b4d4cd6ffd046df822951d6975ad3cd5a7741f177141ed1de7a99eeeba0f52f5c342c69efe986ae5a26e83fc74ed1e30291de1c20417cd1e43881d31c9966ad398d9aa51139a05b8280c360946bbc199d0440de8a3f28825812f7ea74d648868dd70176a5742006fbe6e902917969183c869dddc2fb78c477105075917324f2c975a1fad4a797d084bfc2bf3fc0ddeaf200ede2c457cc41b005306c223f4962c6c803e189642ec1e5bfd7f4cc34ff3b06b57cd568935723f43779832eb49096fad0ed58c489260e87e480fb36cb31bbb1aa78baa36b6c22178e6a8103ef5f30b525b21599a698cfaa7dea8406829b903800736d22d5388af0d59d88d69ed29d1f731a61df3444bd3318e82f29415cda80af70c98d27ba4f2f1b60bcfb1193738e5922238bf2358b2af4b2ce3a9346f90f93a191621b4d01203a671a8202f0090777dd4a62f4a686f9877bc305f9a609f1ad56f3123506083ee75d88ec885eae9bfe9fcc5f6b83fcda59f4e88d5b9091294b96651c4b6b0d1d1fd6f499495cbd68adc3a812cd042a047474548b4e88bbff40f61bdb5eafbe6172fcdb9b0e1028559f97a0c788573ea66ee733d5b6266c559fab5ee89525ba85518f2ddb538e77b797fcad83d22f9b5a2bb182e0866eec54bc6ab1d2e0b53fac8b6c085e983171cf1b37ddba5f7243eb608855fcd9d91fe223ce2f8b0c4db51c1c6624ca66d5fb604ec860bdf5e94e70d11f90cc10b66ac3988f19d676aee64b81663bc4b59b5ed06cafe20834c14a3bcd6d9aba8f8de4c9fcb190c17271e41c2e7efe62b8b521090e3cf7797d0add9aeb47e87e8315d7d27999e376b91eb48e9680296a7d718799079d65b9c2c6874082f4e522068897f06f2a344b8037ebc5fd6f6e9bca57e2e74de096a172280a360447cd7a642653c35699910fe13bb44dc7565b7b0559927093e044bd2a8c1a7fa5e08ced5062a96a19a5ddd02386e1126db34692c610981009661a53a02689a214382a8d99e19ffd32da469fbcb0cc66902fd8ad2b2b90fea65021c2a8eb226b6c5b3bf5c686cc535d25b85a7ec773339795398eee4e67756ecd9e09ac7025bd6532037804ecc930477b32514cf7d8910f51214bf085762c3d2cc6a6841076f479db5e541cb10891828bf360e952519e27f17a26c37b9d305e5b9ae0ad70e8025d98030bd43e11f64dc1b4f692d1846bf36192cd5640522880f122e4add99d1d66a53bbb011664497c4d9dd0c3f5b78646f5b27365da9af733e22a925d581ac8f2653fffe0847db1c8e714e4b5cdbe667c6dae0a0c5095d3ab88338edb57e00629302c086ed8752db7cf8a5dc5ef0f2ed70fbd2b689f99004227abc39a9bf61946ffb60e29042d056e80a121c7959915660bb181d678ffd7ea2fbe4112a39a8fc23cef2dd125c22da19b07d3f37eae56ed4c84e64fb1f8c7693a98cc2689883e51122d69dce8f1ea7d26076a1f4681172c2ce159ee73c90c72080e86e64c2f929735610f559acc598944c06426dff14ceb05b073f244d7b36b4736d9c9b650dd3f16fc14cf218409c27a6898a001d9fa64ce3fdcce46acfc023298a88f91740e0c931fb478afbb3733d211ac5178eee7d7a029abfad5ca5b07e0c2d53c8cdd4ff2f8866b1113bf17edd8000ba0f7b721208de240eb8e7555dd9899cffce9de479578fd066796b93ee326d1257bcf274d84b74fa7bcf6539ebc89cf82b1b49dfe08ab921d64c5f4f42f506782d113425d4b68c456746e16215f8f89086d642ec42fd4cae6c4374962eb14f7e4c451abc6b267d60e0b8aa4db9f5cc5c3646f15fc56a92d5\",\n        \"signing_randomness\": \"a31f1a7b588b7f70ee6c4c712fbca528136093df96d81711ffed47a4738b2f8b\",\n        \"sha3_256_hash_of_signature\": \"2dd68ee817d16fd233eb5b06be12e52a21cc1e2e64a0dafa4283d3f0c5de5123\"\n    },\n    {\n        \"key_generation_seed\": \"b1c811f7652b3d7002926155bd3d449e4836c7598828ee83c836aca00621ad7b\",\n        \"sha3_256_hash_of_verification_key\": \"68afa2ccd896c7745fb4dcccae3eebc1b90f51ab035af490bb979e381bd47c87\",\n        \"sha3_256_hash_of_signing_key\": \"89d24e689376352a2a35af7a6e7b9dc5b4bf9c102aaf7f6d78fe7a0ef7106c46\",\n        \"message\": \"2fbceb39f0e9c1f061a17f7f1c0d54bfbebe5e4736dfca924dc66f6d282b1e0f84a85c39bd64c03d405f428e9f357edf14723cec73abb33cf1380b7cfb4f8ff02fb8bb259804f7112c4aeebd2f5a46b7e2177d130c498cedb4312559c34dd6853cbcef5d095dfd43c45a6b6b334e1075673dfe94b4e96c07d5c58201c47fad00b50ff68c7cbbce4dc1ab9281b0f149b393f8d2dedf215ffecbe2a8eca1e0a5f41d04bd303c5b9905c39b2342cf4a32bbed17b883c2f750418be5a10e60e5bdefa33a67d2364f8679402082e72a4c3810224087430975a0aab95e4d333d9ab29fb1fd382b2b90d2cf4748640010b51f21058e7540d8f8790129f77fc5f49a41655c94e61802ac19ba2188a078dda79ba3b0474ad47d8a9c8e2ff2174e3a7b3c251b3fa8711b7eec281781a1b6c812cbdedcd7847bf039b23bad7a8d83c6e5bbec7ae963f05ca049569e227d5ada5f1e6550832419ca3f908a74e934605574188a050de3530f06af1689bd7b36b834c65e4876ae4fd9ba957775a422b901286685c45687e76580e1cc7229bcccdf359d9a17f62f6fb9fb38bdbfb66f748b9d22e30594888e00a53c93b0b5242715d36e5fa3839ad2310c648e3410858b31aa700b01ff69d56536e509f668b68e276b3d4acb3bd11bd0a2fb0e74d43e3f5e77a2b5da2184916ae4bc6123412f824e85a8eb14fb25c67f64927d1071917cb164727feb0550de58c6b7e8c2a643527ae212e6f9b392bad785425427bdc6ab259628006c1ae5e94d47f780471d823ac0595be688cc4e9f7e636fd148401826bbb5c74cc82a04774750ca6f039e65bc9b7c3f981eac79c5e804c6995994e07645979aea744e9fac394061f34d04f9273a5d34d26f9153c99a32cc097eaffa3794bb842fe47c70fc03e23ea3262c2a93dcce10e7f79622b28ae838f7477b89aa9fe884e41648f503b2fc55d57e72e35eb93877354f23dc36b7d86262ce282436481b995a44301810bd90927b1787b6dd3110da42e8f2e7ac4b8441d11634ae64fe058ce367b2d2e60c51ee33676f47e427b0915ba628c3b2e6f3a9638a467768d95b24d890a87c173c16339a4403514b187c1a58000a4b013b993e211adafd95cc0e04b49a0a9cc071058171d390e00c555f6b570494645c3aada509a7c75f9dec798d7cf6c264706afa2b40a65204157b5fea30d4e408d4c3ddce84c98de341bd901a6b57571b9ebcdc8f3e370919b36281e5c2224da495c3a72b9c6a9357e3800a5b2b51fdf603227499318afbea5d1b93fa80b3af2e2bb673498987780d0919344f8436a9939e4a5e22ad481f635aab4947e542fd4bb42cd06d313ec048563796c32b7b4293fbcc87b5d517279091eceb76f7ccdc17f2060d0448ddccc7168de5b651e987642c9f4e8de132e5045a3340663ed6b18ee749471f6d91a7bd7c5ac4d51f307ceb9765c346b95ce2772d52ddb93908f745221ebec56b1b055e536d4a67221a0247c8e7bd4555301d18ee2ff855338698652135a025f4e68043e0a573128966617aa8be315cc9df78581ba104464737af4370ef0df0b7fa5b2dc8a6d32709f5907f152f90e2fa8f471ef68d7e8fd0dd657604e734fa16b900c01c133451954ef547236a66ae3981f8f09e56a9334cc9e371810b9f1fb7da919d75dafc97e7a0251bbba965a181dbff45dabf81ba330bd33aaf0dfe9da790f30d3dd513d2ce5453e0f1373813f12726be3c72b0155d6c6c8166cac1ad1c21596755fb27a2e572f1038d6130104cea848d81aa62f59ff14f15e3e0fb67839f9d27c4f5636399a79537dcd2cf3fdec26e236b14b28d32c4e277db0e727f38658fe730a0e016e5a344d6e3cb5d5e7796f669200bb7d301d03ac485bf97061ed7788d67aea730d1bcb8efde27709fbf97ab978d9af1d41bdd45fad0a9d72ed676aaf7d243e373e2e92649d4a60893c358a10ed3dbb1970fe80449868e1502e86d491e0ca184556d249c17ba116cf700e493c57acd79287ae9bd7a81d4346d9788e9bf5acdfa407b1efa93195386bfc2d21e2aa2d4aba3caa183d0ee5b140da051b57b38839ab3eba69d5d89974e120514ce7d226421ddc23131ac41df0b69c5cb2d829147fe573b718a9a9813045c6437e758c2ab27dfd36e66973c9f359f56b1ccd8d8209e45e041c6aed466d0f46bafbe70acc0adbda08ee1ab1f57add2a83fdea953d66d09d8578b731a931a60f012504fa50102a4a9e1641d9726cb462afb1b3e89acd6c9e00cc73fd9813a0de76797ee88a3dae163bbb4ea072069c4f3a6e07da5a4c7edc0697bd473c9f5e01752e33c73822c02ea47a13257c14ff570323284283824340d1b64699ad9c8fd13341eaf67f755550c0d96234849deec05809adde564b7ffa2f61770ac5dad1b9bfaff8b3af9167819dc0ca841674fafe0afaf2279cbe557c554f7a4a53ce565d7e8388bd5b8228057f386fd4ad4455466f0a15f1144ce2546495b9343f4e5320a78e7d115bc22dbc44aa792023fc934966e31461c5a1fd0ed9dca633374ad12f4bd73bce3e26d8010b04ab30a4771227f308ce444bf3111deec1dbb219fb5faa428f7d16cae5eb6b8d5a7f05fed86ef74ddbfeba83d76a221e70330ec69261fbee613186a2ecab3f11b796b6d933588da88caaaeed4db5d225533e5a3233e0292b2dc53d15dc35413a2309a61e2504b2e26106df3181714355280955dd600b53cfe938da0bc7f871db041cfacfa3df36d4ca74caf05c929e1280a633981ca2ef43b90c9f31516b521d7633992d4e1b9d47d7408748a9345f3774f41517ecfbb4af5d090cbafb7291e66582a440b9d273bb27aa3e2889f9ed9a0f07d4ba8d12e94b77349907d6435b9a403efb8ef427289b0d0b5efc1b03a87e37b6c0e9a6d21edeb164d96d8de970ab32821e947ded2adb37f0a56e63ec9555e2214c70a13b3ca047602157c794a905e152d64cb33228e1dc00392bb522167e1b5e89b2b074e063e538d3d9c2be01543063bb6d288666398debee465399f5cbd0e2453f2b20464eb82b467541a90722bc86ffa6a9843c34d4478d613cb45125686a906f8b8177b4709c195801f6504c08f5e7bf1b92b12b47df9972bb0ae5fa15d29a24c15a4b96cd5c1eb417ae29aa36b08adcdbbcc2cdd100fe8d3c5934ca5738008efc8fb35411daf6c7960c043483d96e78714b225412403b4de3d82e5d2c7cc23fe131df61dd6aee1333a1080ad3ff5979bda5d0f78ed8fd23af8b3169c87e8dc00a502a54972bc50ecf61ea71c2655fa2f0f4ce13640529e5a4619f3739a94da3cb0c268d3eb94ecaf54926a9df4263c7fd19fbf08f42390639a9abfe236589ca85b199b29db00a4f099d36e67176c9fe8e840d6d20b506697d0036f2eb4fb20d19ae9a4d6364459831bd4ed1d248e0d80983c1495fe70fdabf4f8d5a7bafe38f75ce982f46e0da8c36295b05baab53199f111adabecb5434782f2679fe6ecf9f0c4fd6b465460c7d66b591991214e6e0ff1e1aa4f6d9e3b4321e6c162a33ace4f641dc5dbeb9b1d3b7753acc03da812c1d3481d96d2edb98095f138b086f9fc205de843e8ad9dbdf3b8c24049aebb3233f57ad5e53e2660150029bf614111dad05ed44d4e3c30256a216c6bb6bd093aa06f2bbb3fc5486563b58e22d64d3cbcf8bd464aec61af3381250d538b5b97ebd7ac9ed76ef7636fa1e9b01db03a837b07947b1f40e547fa5138f4456a4dd9474d522d7170eb315ef02ca807bfb333921859d1300c9ca6d32b941e730bb70bcab400d2b9f6f45cb2c2c773941cfef9a11d5040fea4736711c4a2fd5fa634ebff7765707f7bfcdd1925db005287289ec5552288eb6b53ef07947b2af2459e03bc220f089f8bfb032b43e9ef19275413eee9a20570035e8efb7bc9e6f15f0934f4c78d010f08be5d85c0574492e23a283e9dd00fc132bca990b7714fadc0a0236de9\",\n        \"signing_randomness\": \"fac1a82c6b2937972894513c47758619816243350f7f37bb970308bc9880ad0d\",\n        \"sha3_256_hash_of_signature\": \"bcffe3809793b3fe40a42220d08c947d420eed20702a957035d9677deb1d4028\"\n    },\n    {\n        \"key_generation_seed\": \"5a4c139f3e3e16dd77e9f620049ce6c1f1a34347a340cf51335b855af42c9bc4\",\n        \"sha3_256_hash_of_verification_key\": \"7ee26f82b4914dab641c5c0516bc00241e71ad1ef8e03070d1527dde94faec7d\",\n        \"sha3_256_hash_of_signing_key\": \"1e97259c3e165cfc94b7e2b689e2852e2cf1c7cb333a6882b950065d8516af69\",\n        \"message\": \"50543b93744bf83fa12e19bbd57281a1233b686e1131118b2915e20fbf3e0748df59aa50c3081080837de5bf750f886f2c96cd81fc30c5a997dd91882dfedce136ab73213558b9f96f009b139090b38d2ff70eafb0f362dc32c3b40a54d5a02d8bdbfd47171fbd4912f33db3f66be6feba9aa468313302bae94a8a54fbd773dc13035b30018a2dffa2f4e80c496e3c9ec743e62130f6f30bef85c8d8ae5e7cce7989574fac9b5b3fdbe937c726fa989f750f5d3b0f6e92d56e2b972ce51f5fed21cf59db6bb35ed94c11436175be9249d2b94cc3a19fe2e2103c8dcbc0f955283ece644aeea88e4c5995a375d16ae1eb04b84e7ca4b20f53d7b7651fd6bd0b915c38f50a2907f4f2aaeb2ba3aaf0ced218e1b24fd33a4f4b39397c6ece6bc22badf8bb1df4abeb437c4c28a27c87c6f7172888ea322d04ee0f3deccce97d638a5ca3696f50f314e786ebd5ed10163ebabc5ad37d63d1b08e55e1e741d46fb817abd7be366f4d9acd48c5896bc6c7256ea96b4cbbd698e706535a0cf5620dc0bb05de1a8079cf6733719f1e46d5909e09d837e0f52116cc044caf20296170dcff83c9f9ef48d8414182af31ca39efb8ab65fd440b2108ac658c1a55d40f2a41b59a1b5a21b36d46f6cb5a85b6a71f54ea0b6ef16ad374ce91a4b922f9969bcb2b2b563d44704815bdb5f80e042a5f39749e095eadaefeca8f332bd46a8e579b79abf62db5555c48b088ea2ded72343ee6b966a309e24586701f8de76c34d04128a23f9b7f07a468d881eee092ee2682d6fc57d2fcfe1b9b717439a47a478e09ee80c78bb7ebbfa83bb39ac080b49b5b6380f90170457d904ec511cc530d8a3b6f4b879ef486f7fbafc1e7ca2f0f0ae6feef28caf04cc6b32b0b47d109a84809226f401b14cc64c682ac5bb2b0529d2c738eb07350548885e24eac3acabb69eb5c9ff30ebd4bb3a3e2f3e647c3d870393b69a37ab31170260aecdfb7585826de16176e9ef6687b7f73ca795fa0e921765b13970220ccc81d3ad4b1efcdbe30cf364ca073c64f22f1f510a3ba9b80316947d77634f4c61872b8369f8854b06a586361cf62884ca4d7b2c14d104d40ad2278dc2bcab7fe03c990cf69a4bf127e6f501c13e07e23b5b4466e2f0972cbac3b77ff74ed8d4bc411c68c3fe3c0cea0c7d83cc7afae42948f3169a9aa2db8e483760660e55b44c401d67c7b528a22a7c816d18d8cc5625e296bf6d90ec6c57da81383dabafa921d5e33193b9635a802d403b088fa6c27d1c2199c32e26429a646426c55c30770e50cfdcf3d85b66ca26a5b6ac209a3cf0737e05ca8bda95d11a4dd01734d08529445a91124fc25dbc43b261570734e2e30d8514956d76e93afa45e37508d59e36d341b421d2b951e04db303604a6a62e5df2f9c84270084c6426374541c74cd696eefda7d924769c71b48630508e4f384bf3bd41d75b38b96e566296c4c283ccdf81f724b9ff18f21b9b9cbbb87ad4d2019e55f8f6e2060c3c911a1bc22e721f077e56336e0ad0549a9b3a50125e5a90a787a97c2129d254a2090e6dacc0b2948293568ba65ec1316993364d07b1495fb9a2900f77c58f82d078fc90db7e45e8539a54aeddd4c6e688c5ec70cae94373a1ccd1a7e0aec367018f02474cf7dc2b9935cc6a53d36375fa4c64072a85bbab5b8821544786a579618c675bc4ec3a73cf30828ffd10b40587d3d522ab7df83f19cd05bec87b70c8cc014be00650fe02951ce65e468f8ea2409332a9f488e6f8afbb191a17baae8e8695982d6bc67c6df6513f068a01211cb5a408fd9a58dd62d62c5aa698327266957579d8c773c4d86d25a4f23451fa99112132c0912822891940ab340765bd1bdf048c8f1ee301b25ff14f17710e046e0a5f55c3caaade773e5c1075de36e815e4fbabece52af887461e88bc1749a036a035adf32c91537dc90d6809b047afaffb0f4be2eaae0bf17f18defeb3e54f7109a66674d11b185053563801862e5a8d39aa72bc8882252ffb24be0b42adb43b6457ca1b34cbf82fb2b0f80d2fd6464dafe61fde21cdfdc75d5084c2fe38041c000871f29ac8b5290954a12c60931ebc2bdd3be9d8f938af73abb5871b7cef526f12db673a2ecf7e307fbc3764256c4913eb05a8e321d5c94632e0f9b75dc3e7c6e7bff3acff361382a1f5df6fdc3a2a411e23eb20c813ab9050db38007e0b6489a05a891695da75a493f553916e3d863daf89f98a4a47aa186a193048b1bbde4dce4b515ca15cfc953b92665f1114aee4255805af851bfff0a9d73f7bdc70c4c4c3c2c20676401a84986faef0614a1b2b2c6a58be453587d255880a8112292953883b07a9b154e0556289211da547138b49ff22955cad28f8e4b9732796cdb27523e93b621ec99a78effc6c9a91d3293dda72d2682b607e8fa4016570a201942c40437e97e7852c4b3dc658b63a34e540e346babdd96c43ff068a48bc5a384c111237a89b65b2a722267dc6e330e8bf1817a7028fc686cf2cc0ed9090fa3890fb9e6a6be1ca39cd1e0b06dd028e9ecdcb4a73fdf920744d2c8a18da91f178ac5fb928a612f65a1122195bc18cfa00801cc9adde03493929b9223813813034bd0c85a57cab8a30ba085fd875980e8fc79b9ee068701218c5c08b3fc7eb31f316406a4dea95e9d75dea91c79a937d5c6ab66bb162fef86911b608ff2e965e784fe43502629b8a2ba4601e9f6d28ddc97b9d8a0339f20fcad4d362c7eba0ce91e0174752a75bd46c2126930e6fa8d354992f7428ac3f4dc5e441412d0321f70346c5a1ebd9fdfd91b9835de2794aa8ff87bda70fd9cd7068d79e3586738ef58473022c133012f82307266fdb45480a6c5436febe78b87276161139fc2f11701b671fafee370f839cae57c31d21619640d95f7a0260ecc96cc34b87b5b889ec7e2dacaa985750947b8ae3d96790adabd876a2d4b10ad9a7e1a150d7046c205362ccedae1640bc3c6f61f6a62a5cf148789bb96f3f884a06e7e6a4ebd0ea29ffd105afc315e3f85ec1e3336432c5690da87cf381f0593dce6f4b8d8f3b1f2a72f76b58f05ae42e182004ef02c7b7afc965d2ecb242d0af88e6743bf1cdc59eebd648ea7b8505b55006a0f2979e5b5935c41904e7c317d20d6ca12bcca31d72d4138c234fa0429b8d5e8f306b131cd1c6ea2958f91abc3c2428a0dc20df3b9f45ae307280c2b0dac0c45e4152b048604ab20a5e11ce6382f266a093b582f26ade1df7aa670266a2369dae118b42856aa875023e2500fc380328d612a13f1761cda17de1c31e0b8838a2ec4435931bc0328bf42e2356bb891795c78c4ee763ceead561757cb2335b1a764dbe95b52f11b00ac363daed872c84ccbb3a0efe3b5268c1fee64752ecbea05d32ec7524e5e84b2ff278c8669dbd6b7bfd2a4918e1a6b1a83fdef9e0e25e09713a2aa958db0560a3c6ecb9c3ce136059dbc2ee94002446080d28b3c68e58ba7e3d942bc516c2e6cb2d47622fb8d02c3d781aea5d356dc3bf8ac5a77702c8dfec6e0192183952aa3d6bd01f9d23f0062a084fe0c1283f5b0b5f1835d98d78101d37b10edb753c5966595bf305c61d6cc38ab23229b074d0e165df1094b3dfdbb703d0fbcb0983d63770c0bc545e457a0dd571c51e81426dd024c66482734c1c16d2fa6e1156645a2a070fd13c0c24eb1563cc9088413386a0f0d4efa7bc7db6c435ca276e90e14343e10eb660cd5d711d4e006995cda36e3249548fb67b31a8c8ca236d59e1b422cd86f884edfe4195a9e3ff5d1919983cdf70d676d06c705859944627436d7abaeeba38f5517ec65a720095d71f3f61dcdd719d61648ce93d89fd111b4dcbd5bf992dc2c7bb1f3ed7b3f7fc7337eec3a5aca240825391acefc9ea86184bbef4fa0893b93d91d1d1c931b2836028b02107f4791e7f40dae1d7d75d823fbcc5e9d5459e189736542cba6fe00ee9b3eb7658b364f092004562021017561e8b95febe2176a132630d101e722c8a\",\n        \"signing_randomness\": \"f813e4a3ac0c066335b62788d3c49a5d02fcf3275ccedf56d7b474b2addc68ab\",\n        \"sha3_256_hash_of_signature\": \"e3b1aa6c20630d653f152d5cfd97e23fb04460a2af0bdbe2fb5ca664b601d883\"\n    },\n    {\n        \"key_generation_seed\": \"f69f3c8296b4217769d3d8137647182ce3cb1e65e9126a69b4df3de71ddac54e\",\n        \"sha3_256_hash_of_verification_key\": \"831ab391b4d574add279028b1164636aec4756fe029779f454396f4cb0034cf4\",\n        \"sha3_256_hash_of_signing_key\": \"80aef09f0a13960d6347a5cf533d0150d6a59dde1ad2ff66953b484a931df027\",\n        \"message\": \"0ee6fa2d1a7625895c89fe67a5f108155c88a6ff8f9544f9883649d602cc30762b851f1ef5826d8012e1a1ce0f5a2d7863f584a9dbc1f0ff405aa19cfe11da2ba1542ba8cbf1102f4bcfc7195e138104f96de5f2b6200b3c9ad4e9e4150c41cbe62af5235c66a259ddc2190cc7fad3e509e2c363c902afeab23992e1bd3fa7fb5f49d33d94a72aba1c6899ee4527dec8f1bb127b5aab0d7cc5b80d676305cb9d1a5c140d08f1ccf8212890c52b487bd43a3ed1491f31d9be7a1f673d0fb4acbc415c9c137f0c072b0d2f8c53d4f58da93a1ab394c6b7758723367f6f78f1ef190506fa70a8403cf6b04a8d2f4f1482793f71c6e4082c80af018242f0ff9584153a3a96406813ba0f32c04019d29afc3a261b6c91acc796c511e7cd2c112f49194d39f8ece46d72be9f9c8daff6ee289dcd6f7fc671e637d403bef73be8df451e07040d353c9e35e599067c5ba1a66dfe43bc8c86843c2b97c42365c0f0f1950e738fd3f35c299f263aeb14a7cc24df4de2e2c30d82b8a000b431860d033698b1c44125b55e264016f6e464bcda0e8aea61e839576f32eb99b1426e960a7acacbda2b10db4f2a10a707fc649455d315f64467c9fa72e770ec1ed0aa6a6dd8cb0734794a80e9b5c77f06db17a4201cc146798a9285849b9cbabdc09ee493dc0d753903e7789e1fed0963a4838d707ddbd7c7b5e0f963f5b0bed9b190d19300418c175fdbec648072c3a93fd25a23eeff1455a8f276219b37e6c25344eb1028ab5bd6b748b60b13d8ad01c7bddd67d93758971a6814959318952e920b2813c0f87e6261b8b30d1b521d6e92e794906a94e3b842f21bd6ee87d02bd069ba1817fb5d9b6979bc3d4bf816a1d9462e692d57ab470a9c691c692feef9c76f765d042c2f08de094dc746d4b3ccc1e65ab65f2ef7ff2ef09e484eba7caca044e142e3445a2587510a7ebb5858160caf5a7fe1a20e5866bb488c216ed8887d7f2687869ed8f9c348265eb128e4d943b4506298402734c95e12baaac9d77befb61a3d76f5acc9bb508895d1fe86e49545952b9cdd36dd0d3c78d2302d86bac000c9ba4558f5f8182d87879b24d1ed80af8990fab11b2a18c0944ec2ee5d3efd9755dd794d7ea1de6d18b94113757bf9a0913db226b428fac46e786482dc1f2cb39c77ed560dba72b012a3f64c4e51fc54973ddd0a07e84d8215eb966f7b30dd25e23cce582121372dc5ce499db8a900b471f7834b7c34cdad73da9599c4608b5591845723199bf95942b4f3eca7592749b436c0cc27ba171862a35bcc822e91fd75cf25b897b39844ceadaecc8161fc38ab9e333e2c1cb26e25e9267022836e30547f4f0dccce4b4f62acb57d627fe29c41e424db67f4829ff2c465e322a292c14b1e6d21c37aec1784efa5171b18e9f7022d06dcc40af54c389ac8273d57bbcd96f9c21f7b9c993c84b34d1fd9aba178641eb187abacf57f68b3dabc7d82f902be0eafed3f93560f2d85cc09802e9406c98cb9384d70b9c9375bfeb180869c8c583328991b582faafe1a3810457185814e8ab4ea01835941bec6a8b19bdc05f72ee0ddd8a8e5be53eb454e94eb09d5e0bc224970623483f2c3cf3778e91286d89374eec664a707e1afef34f18e6baa85c8b2fcc67d1c4f1026e2fc4d21e46dffce11d90ed570b82a532adfb7732cea6a730217d4bf5e73f7e8e5b13cc92b73b483a49a871a4931ffe032a7a5687e36116f475f3ad332bebe39f9013ae978a222b05ff8159ddb0d188558b46f3fa21f6034eb847fa54625f7cd2f217744e5ce216eb74b5a283cd384a1161aa61e12984df0105cdbfd6a87622daad9a5698b381c8d79c21e8dc0fd8dede5fcbc9b5870bd8a253a6321caf771ebdeebfcabaae403106b30b1e15eb6d01b2d9552ce9a0db476219eca219e74c4c8d99a54aedc48249327793f6bfe7aca8ba9bd39d0f27f1abf0fb4fe00c17e9c25ff97a5a903445b93d4201ba18d45f6dc9b4b03ea756f268ef7b5b0ad41882b946b37c7024be62c52201eea0f8a028a86b07c22d64336ae9c6da4f2f5eb0266da48f1e1a3bc95a6a810b3b35db5a3aa19c753d54b9ab14db1fb7d60cb0e87acd72e2af8708aa01d8275f40716b55deae1f1ac0034ed2e39c4fbc4c989839b9691ac91b5b7089c177b2e5c2342ef37c3caca8408b7e52c3ef52d1917ae2f1e1d7d4d7b643c2b6842aedd80e5c0cbfb65a89f86bf0e8412a236f938c329204a61a5169d2e309c112c671d79c911ede72c7cbb835cce4161f447826506c98d3c2f4c9baa987e5244a21d759a183b8543b8c1bd5d9e5f4fcb44aa497e3fc8b10a451b1226d6bd19d5f9d97d0525f34370288feb0d4ce88f60fcd1ddc1805a369d4b7fedaa884cb4cc544f18a98e21ba4d4db8a2fa1cae02673fb2f56d0e4b372cb4a702ad0687c306207243d940748f6e020c266811cdaf151da7ff4a43c9452a608fa43191e7cd0cbad0dd2d734b18ad2e3507f9150ad74de333fa3a73c6bb5b092717653dcef8ae4e50f3015060b6be427b2fd6d890d67fb729264b951aa96a6515f66fb340fa08e1c5b682b6ad78ecac88031dfb5b8fdcdb4507358caca6d05ed1751df80dadb98b4e5d0aad1b320623773424a3452ad96ba9264c18ac4d6c06cad68e3afa2d29aadf1ae63dbe7a9cd8b86732ce88b8387f66a943e275e9765659ff4d140f10e8bf409e9f51bcc5b664d06ebb78843075a330b5d2998abc872389be6765ec8148842025cce69ff2387f30c00e697a427c625ad4d21a21448e212760731091071e019cb8d277b1c9e717e4040133a26292145cca1ffd8ce3a4f30f890163c12f02aaa6aaccec1517aacbd4567f9b83637758879a50102f05281505d1db02d2d53b27dbf49d07d66461f7a20d0d35062590e1b8ac244935c3632fb624a7fd7057448c64149424bb290b1477b6e3b25d0c3c2f15721f327cc81aa4035237866a7fe187f6e622dcfd29c319212cfbb1ff978ff021c50568696ca592e9673f9a19fade363177ae382a8dcc787a026dc815bd473b042958c88ff90e9be595f7adc14e9d78bd242c2e5bbde8886ac713596d174b03ec7a8f5f2cdee398347a276899e8b99fe3bcdc618b1d963feafb75b1f36402ed4425248f721d559934a7e2259b9d092b62ed7d34729f30421023346f39395b0fd2cf2b10ce4d757749f53560d9f8ca8024747e0797adebfae18cf83046619d6860d2ea5d2f802ff64e95770baf37f23cd2eb7aba0cfb35f4ae66f7eb80388819296456bd56a94646b4083e954eacf17a6e3d9bfdb6c68ff49f4060df8016653bba2bb92452ca8a83c3fe123da16bdbe750fb1259d7d0c379332236e62ce61481f5a528637a97aa863fa3a4dc211368076ffeceb98d74d651e9f6d8e075e19175105f83bc4269e3816273bcd7c65bc52677c61198eaaa53c9ee6da600376e7fc4adaecc013781408475183ac2e97117389621f12a069758200648cae0c22b226bbcf496cc0557363109c08bef25e1db6a14650591b6186562e9a0030594b90d6efb895907c8839fda2fe106507273f9585ff660e5072ea1cb4da5047e8320500a8959ae8bdf540eb4de1261951675ffc23f20e30621465a8b02ed7315dd4e274fd0a87f0e5f586735bed180a600ba9222e1a8811fd7d38702213c7d1d4043a2fe131027fb6e40d5a36c2834f686fe724ea771800f34b9dbaaaf77850a824fc9494e359361515a97280d5ee162943dcbc3fd878b4b040200c80f7cb469a1f404b11464919b379f47fccbade7cff648ea32e2ff66d9d8b3098d7dbe26d06d90d8853e5091c9338e67edd5bf48ee5fc20a8c3d1f7efe42163997497fe093d9000144cb321c55d139cfb978bd3096b727574cc914f0f740da9000798cd9df24f437684ce0a7849af7fa68980abc0e2ee60767667e68dc7939fbe153ebde422cec144b205fa9bb0af1f112085a9cb20b6131faa62d341c4908b9117a72575ba046590775aed6762685ccbf5d803762310f8c5135e08f2ba4b1c3cc92a9873105b525725784aa698463de370d105774\",\n        \"signing_randomness\": \"78421d0941a3bc18449195bc8926069c8e5c1342d600c5e0722d370517cc95fb\",\n        \"sha3_256_hash_of_signature\": \"118274cfe780200429054ffb62789fef7dd2853f03865ae2d4e3fbd33b605200\"\n    },\n    {\n        \"key_generation_seed\": \"da8984e77fecdbc75b7d40b32b48364b5394ddedf767856de5f4ca827f5538d7\",\n        \"sha3_256_hash_of_verification_key\": \"63a3b2f572cdf2454765a212b4f16d1715d23335ce6f1c2e7f428e8bab619c62\",\n        \"sha3_256_hash_of_signing_key\": \"73633257338dc58638cefa279d82ecd8ff423366db021549d75f8aa32cd742ea\",\n        \"message\": \"0fd3cfbb2c104b5504244f080f5c9770514c36714151429ff014dadc65db91d81ef629f2ced20ae9f0a15cbd515b70e2b4f128fea3cc42ceb946fc545c2d2abc16d0c423b9b263d0fe2feff3eefaf45db54d88ed1823fb2615482e6b3fe0dc41dc8d09256565d186aaca91f4c5b1fff5c191ea42eb88f2e19069d371e2e171a02b0b74cbdb14b85fa3f23c891472b5f1c46d63b1abffb0db78c291e9133e27fecb7f019ecd57cb89a7f4fbe52880dc5fd790b5152c2f2a1a3fca5680e8d91c542aa6cd044a5022f771f4fec928aedde51e2db9a1ff6222a6691eb728bd844074b2be44783e07450774d6c0919a2cedfbc57c8fc99e17b917fa25f756b0001141c91601651702ae5cf5502229329eee483e240568534d0ebe54ae7f6c38ad312819047fa33134629c2c5457fc091f61e88d361b6b00fe2593261b4b46de405edc074b5659be33c6d32f2d9b69bdd3d92818a59ba17f6ba06e3d45062f031706f930dd53782e5f60a9f566b616a976e1cbaad4618efc38b11416bb8168bac14ebc548f7cc916a4359c63c333e33eebb34fa135b6fde86e9252b150c24beab43602418cea7addb4aa9415944298c97008e576c6d9b798ecb8c9b86e4b5bc8a211ba188727474d10d9041984ae0d39e95a2859747da869be953c2dfe2da612ff3498e5b595d87f90c2ec086fe471a2aaf8b50a3985484bf8292a515f1c964325366d3e3fd4f5789ea8275d523dd89471cd66ca5611ae7ed94ec46c1180e92d9328fcd9e29f99cb42bd8d055bf2e9c9eb19ab2ee838a062d3a98a31d8f123d367a58a02c1868403f4536fc64fba1773c13bb3b250ca67d6eb53ce4bab50323e0d97f71fa4782ec71f777fd87ce8441c7854dfb941fa4f2f760d42964ea934cab549b649cc728b3b1503600ee9d4661eb986a02f4afbe54754398c4a8953263ee317d2c45cb760e01d158794d2f86d83975ce7bfbae9dba1353231d5c418256565458446da01001a8880c1655d365498f1e7149d0ef4559b89d43ac074a22bbd717caf485fa6b6d479f4eb5bbf8fb76b224ed759daf1dc5b2def9a912a2bd97a5d502dc65a9b79b828ad24a37de17582b560b19f62cc55bbd03fb76d003a45e827be506e9ff6171d312e15237fd12ec3bdf610a5f10ba04e0044af0980b65698f99bfaa391964f505a63107301ba0e698abd178b511b50486eebd071a0662a440dd685f1df85c00cf1b4a6d00af7e89cc02aae4eacc10a6f7293815e458e5610ae8e7d6fad6e8d6c208b8b6a22918b20c78c8e4cd2d11594be75b3a19f556880c220690dcb2e7bcb5db3d41ff9416916db07ef58a0df00c0b344ba0b1d8d218ba76d9b8e5dc152da4f62e1dec4f2a64c324914641fee456a890bd22b42854d3ee57b90198af1b7fec150512e6cc6e7f4eb36f0c92ae8fb0a464b57bd491c2878535aacbe211a2405b5beeb8779cd247d65aa43a77cc18cd6c1a98fba2630f6de9f581f559171a03e7ef87ba0095dea9daa13bc1e0704c605158bb97aed7494edcc05aeae98a1b77fbd54614da8cf9e4390cd82db3cb33377f02c8732650c41f51d9f03ece1dd88307ea6b9e8d5db44d60fa44f87eff19f9960a980cb2460caf3d8ec2f38d905eaaf13364109eb5e655065bddcbb6d5fa9d9483dc22c2c4b21165e710b8a9e214f359932bb4381f33cfeeec6fd64fe6af4cf747dd6728c05dced20488b9c1a132d504da2e8524daf6274fb414af666d5b940239e1e970a0a57f8f672738c939a7a27d0cbc1135490c915436c4e921613ae9c1d850a82628a164ede34dce7500b28c5ff72e4c696064a48fb7db64bf665e740155915f6f7478c332dee9bad4689319b9d54b5942e7c133e6294c9dfcfd4566555f62bb7e28f05a4c3b0fafcf82e951a6cb4b7b69884b2dc8e864fd416ba8410cc11ea220aab93978023c7eaedcaa11938dab4171aff38976008676838303cd7dd067f707fbd7dd25725aff2a94c779fc43ced300e906a7a5f0be3848b9b8bb78b0f27e317d16430919697bd7a4ba0edfc6cbce467c9f69712cca5c9e2517ef6de7884fb3527e74e35eb260315556506018d08e113c73beef5320ce773a34525e7edb555e553ed98676e2c552de8658f766443d231bfae50c723345a1d780e5e9f384642e8297da8f5d4213b76a7362b6340dee9231c208487bbe9aadf49e0259cdde3f4345b02d9013e9acd29662eea5ca37cb368ccc51745711511cdfdaf130ec2e06059c524c5e0ec4680cffda0b124da7043d2697ea5966b1313834b9d2f37142e7dc14511ea63bb7b698013f8ade8f9f8e7214df705211cf1a04cf84ed775edb6603885cba9ab8cddde62612da59f73b1fe4279e9a65273664d61ea74a41d9ce6c755afd1aa1e6190142eb22e042b569f4af01a5d4bcd4685d8aaac47826614b309d84fa1af126bedf1aa976bf1fd2c8b39b93f849fa0f6e1d38c2b1b32f6c631d06c7b78ae3ece6c91580f8539cbf1a4a433727be3b25ad9a530c611ff4b0c467815bec29fdbee0f2931b62b4c0cdb60aff4dd11917d917f47927b7f0342ab8c4a652f2f8e179730b82210576b165bedcc4b5d85e607da559016cf6016bf794c41a5a4371ad77854cbd4c1b1e3b4dfdaca80608d224b790661a10c2d0f8943e27fc1619590fb2ce9f7f485692d8fec749b83be4d0f14237d8ff5b9bb355aed9ef26ae61e7643f92ba613898fa2f0183434f2dbf329e99997f905d2999492a90c0d21380e2cbd4a676f02d0243e31e91468eaf7e2e5ff53b1486a447c45a8b6026f6ff9156ae8125a9197d8d8e7f81f8140eedba9e6eec30e28b80c1ab28f73cd03e71c22647106ca5d1c59a6ef4d22d187a0a4227fc4d4adc6c2368bb9f057eb4fcf389390cb6fa5310bd19a8299e6f2167c886b63cb82f1f4ace8950491a076e8bb2bffc092f44ecec9013faab2ab70e9c951337ef60ab453c91fb86d101b6529669cb4f0260daaee3ed582628340bd88d465925527356f57a1d7f6ee2e9bbd2ddf133289d25905b111c3da5deedcd046b746c6b2fe063de11aa36f83a05518ee6137f6323bba8802043f1a32d98ea79001cc6e8747c9f9eacd95ac6c34eccf86224f97c6c7858bae94f4999f5f68ff26c84101d6c348ca854f299ba6d9c8a1511bbba6c3faac4f6a062d6c850b34245b5f8ebbac82a8959e4fa7db0e8123a3abf3bdc5e04b4aba369204f9701df0a4752dc5f13656126f3de9d9ec88eef592b88920226987c071cbde3c42787819c93bd3c6ca0aba4d642c05e9d0f4b9efc1a2710e603bb289c419623e4c3d69cd6ceafe7c0041f2eb745a68e1f4421d7efa716243815058101712499fb1d146e474a29a3955d5e4feac1730b5e5e481f8e342ad1ff572218295fd132722232ddbb328df9fdbbd183ccbf36614aeab33027e84247bfe2b07ef961d93a10c264efdda9c7e782a9bb77512bd809f5d650e624a118995f7bc182c48886c02e20d6d0375b10fd5d13ac471d03073ed8da8fed26a576cbab56972a8a1cf57bb4f4e3f657288deba11a16ff2723ca9528d3db9fddf8a56d7260927e0acea3ef9ec767283c74b75c053750bc84ec2df7e8acc1c6b46d14dc3c9db79a72caeb749af8bf805a0b750fc892739ef5ce126650ef87445f5f6b992ba787cd54e15d2886fa32d5180fca7ef2abee704dc3fcd653ab5417d8872900d4f9b67dede3d427bfd60ccec20444242ec18e3b0c2acaa9dc815b88fb187f054ca1eda1fdb2ce015dfab376a3c551f18fd7edab434179a4afadc151eff57cc42383be2c535642e84a1ccc1106ce4abb370cb73cc2006049c72cb9c263ff14733c847cd060817f15c8f72282bbdc31441a9a1eb53cc613155a88c3947da096fa1f2e76ebc97c0a4d173cb90b81fe8aab059cafc13eb7a9cc37905554868e56980f71a375abe9f330c2e6a74a4e9fee5ce2b0cccc7ba8fc48b61c6e01fa1ba3e4d27376d8687f8bbab80474d63b6d9da8fd68da62df11cd4a3459e1e961eed147010ff6b4d836a4c973d55a7e09b63f7b9ec6e32a4acde28fc9d6d91ba41d4f46ab8a880c22a2ed1d0f7cdded6d24ff84cd9f291af88564266020d863380\",\n        \"signing_randomness\": \"cbcf5a32bd05717a88fcae9c64c739095245d6645b379dfacd43415f0c4e187a\",\n        \"sha3_256_hash_of_signature\": \"86f2f19da7bab3ca1c2e3d6aee5cfecd01a1ffc7290d391f911334e266236575\"\n    },\n    {\n        \"key_generation_seed\": \"e768572903c969637bc242e616153e2c23eb730c14421ea4be00a1ea8fedf771\",\n        \"sha3_256_hash_of_verification_key\": \"69904ce2a579c7f081761d71e92112383bdf3f280b51443da24f444f7c67d6fc\",\n        \"sha3_256_hash_of_signing_key\": \"d0e8103c1efbbed355042cd3518ad54f2d89a4fffc054a9e8a55e9e99ea43ecc\",\n        \"message\": \"25312f46a6871f210516d233fac8d7120383a2e02606ffe9af7f5f904fd7772fcc74647e963c0ecf399bbdf568085372a6a566f382984ef3ba8f17ecc2f3f7ca0d057bbff27f8bc8504b8541e02cb81dcd92d900a41106b291d035b43f71cd637ee1cdbbb2528bbd6151322471f3c6f9d36ba26fa161034d156bcf13d6e02ea868ccd1d1fed6ccd0181acf5f8dea93ba60eb283dd9d7cb93ecd0fade298924b067b7410cb977bdb48b17577addd2ec6dd6c43515c7bec410ec77c222fc4bab90c99a12a847e6bb3262050bfb67c74f03c171564d942745a3e8f81bc08cade9a7a0afc85854c8f2cdbc0b013b3b0dc953898c2881a2bd05cee38544905bed1f7d34ec7ff2588f86e4ae078f6cba9567ffce8b6c3885bb35f47564643fb0fe7b2b209864d1178922f9c6cbe1b46e43b33d8d6ab87e9834e9977a1e1d27ed27b18e0c34df44bd22e48390da4a22ebb5fd22502d8b782aca00f981db4a3272913e2c6b8e6c27a324e673d094249229602ce5e6d2ceae15482739926039aec8b783cf3895933b1776295025ccbdc967fd743bad52a04dc7bfb598f736fa2d9435b4b4b0c3e7d245c95c76d072734f38570bef0142f9e6dcb15f4974e9d37a05995d6014b593ff89f8475353b52ea47005fb56a4dab04a57fd9957b40cdcac079d2c137ac4a1337f19effd7e6e6beb9a396f9cd0b341058a5ce0c1f4ccbbfd960e970025e5770770ab33e53b28b4ba6e17a62bd099f41d750bb2704a72450d577e804e9b0fb22005c682177e77e66e6303d81d0ef608d582495f7bb7b896e3a93a46acb31ffe8844b923ebe74b1d028b81a9d28da6b4f27cd3c6138f608c7f75016b66a775fb24fff149507e608c4544a2722e08fdb024df2b7716b5ab53224a95a6ba763b9c849a1bacc2ac85cee7048daa27cda67e151ff46749c42e26b684d7555abd96fdef22cba958905570065f6d9c75b0e99f92fa847be00ee6636ef8bb74bf5de6640eedfb7e096327272e5e5285860cc895c49d1603898fc535d2c74e4572c9eb1d8038ad219cc5740caf7abab029dffc998cdeb47f5a6fee2fed7d9a4933f2d6b30004dafd54ff927bd923d7d80a96bcc60b58ba597e5280e9f93f86a8b83a3af1f421b79e7f44792c27a2478168881855de55fc777e7ad0f50f5779b31ff485f03ac03beee69bfb70c1ca0401ee3ddc3a4c40b41301f81f2ac88e950b3c3e0c3e021a830caccd9a075eac117540a60fdd3b3f10eb83071483e80b23add0a7346c5150ed4537f21a4bf37141b80b3f0e1bab2b76fdf923c24075beab7d28f715b3f2984e6c9e449df620ef81df01d79f47d71691b5f69a5c751008e7461419ca269e8730da34e0a9c56f42ebc242e2e491d0daf435554eb2506b063864becb50370ba84de598309c2e3363078e0fa3e8166571fc567500173eee46bb9b0f095eb9024d446f94964e84e72b433aedc12dc94b4da5c1c0ac80de82cc4e6ba80066bfc944e8cf80218372e6ac3a7b877c1436708657c6aeedeb312b716261d0ea448654ac27b0415e07cab3963c7ed12ae50927dd7f32305fc3b773badb17dd7c1d0d2f42faa095b1233b6d904a255d6bf967260dcd4405d80557e647087ab54bbf809eb648bfafd5f473a0ef0c9400b22c157d6c7a2a4bb51f26df303778832de79b3eaa3139b54729ace8a9e25835e14b530f68e2555ab8d0145ae47fccee2ad721a1c938a69289ed035c351235f063eff3d295966665080f6df062ad5f1802244a7631bf7961080b71947f13d7d20ab3ae33ab2e630adf2d70d84f600f6e743b4922a4ad86283913e989a65f6584aebcda2823a9ab8c6dfabeddb0b06bb44c7e1b06b3cec197ba8f8166b53a1696747893ee9651526bcb6d83e44d38b366fbb0b0a62946f53b53f4639d78a7fce11945a82926ef686747f3d301181b6e19d3b5d959705d292a117e89badd65290d7721c2254fd4ae4838319b9a8c0dc4eb8e30a6b64a59cf1232605221ce161295dc5d2b0b822c5b1ab44c148eff6daae904289569ba38ab26711a5c7d801f61cb413570e350c4ee2b072d6d0a78679858129e9623af718d164c86134ec2d1529617b43ce5af77f17774b233716d971c5bd803352b48541380e987c353d201fe725e62d269f071e1272ff63eae422f3aabc2dfa9f9402780614c1a1192b6602c504beda914c2b01a1d6bbba50aaaca5ff86f22acf86bc0ccc2f2c139ebf59d5a453624c49b61ce60fd7fcde45687c7931691a08c1780c53a69c6273f19414d352e4b4df70e38916c013ea0abf22cbb7ff2221bd420ed435817ce75c7767467cd64c9782caf90af85b599f4c6cdb0ace0a16808d826d26d1db14b5d73f1a6356e5011742f3b6be2581fedbf53a05fba1db0638a205aef11a9ef38132a19c62c31524f3b5e196bc1f15273597b4b63e325b1f3f5c380e26ae21fbb3b5f72b16c6ba5ad0c0c4d1298812f2e2868933078d588f3916bdefc6f79a888ff55c5a175820fcf4d127a9d7cb904d9850d12bd20400320ebadaf8072e94ade0641d52731667202ef569f08d6a2a60817b30667271fe14e38154261eb449e65691b09dd7b4a8384ce3097909db18ff46840849d5cea2ce937d92015576534dda4b4ea223df161385e0678a675f3b669a4953a4342e7b80cf38d3c18cf78f0c37d6ae50b4c90a89edab59c0613583d94fd143632eda26074844ae45e217dfe8c6c13e24004c151ea25a99844aecddeb178eba8f6d1a87163e231723690c1a88e9a3401bebaf7dc1f3e3eacdc284130b59513d148a80f68b8ef338bb250ac4bdff00b5b53e2988bc2e670609a322f35a447473a8551df694e05c9b6a99a4e556f62114caade0f1c67781ef2263bedefb0455856c007bbab3dafe70b44fce67b86617b95fdfe17735e6f6235b2f193eddc39a8394b66e3c8580d6fe6270fcdd40c72d893f90f8a2e208317241da35b0a234a46acc836f1818f4d0be310bed93095f6a0fea68f976ec86742bd6d8e91c15561005047104d514d700c9541f8870c3ea3e966d1193d54e47fa84fe27a33e306dff48c9e78642d9ce8c7b5e1ff5ec7e82ec76484d6a51143d2502611c9f98f2012b19d89f66832c49996e41436df8d9b52fcc5b3b7060da1d330810169c81d51297f87927e52be1f3340ab1c87dcc7bcfb7312895ccb808025deae25125ae06e4e2b4a3d17807de8edc98fa7715886cf1835f38fd5a85d7de05887ba2346490e9e33454ea3e33e960130bfa8a2425dda961e18186abb0beee6ae5f7c43c4372dad5b36e55dd1ce7d524e0e91e963a13f50b2c4f06977222340855e3bd2e9db3569219721aa67591b20918ee43bb0a7c95529498a75511de98add487a9a40e17786f62d5b067428054f2c699e1c295d950e666b1ab123018fcb88132e3891962b56c3e476406ec07ace45f4a57fb813d6efb97c491df470c3ea969f1420d206b283666e2538ff9ec258344c2cf200210e216b96974696b4932db3fede597e5d1400188ba8e0056d1de2b407b4e01ca1c25855b38c175ae7d3ceff8845c3d8ca6730e42512e07d9f84d48de6d5bba4d76d0ca75188e67a001f9f5adaf2719258f097ddf9935f5bc0fc51800dc2b7887bbc872c262d8fbd303891e844ee81fde945e7a769fe9d9c7afa47a8691881c3b6ce9d2307fe910ce04c3c85ed8760f3fb6a3ff8e87a545d85e407cedd62050053c33eed434ce4339911e3b3b1531472a25d79d9c157ffbea16b52c5a37732cc31ce3417842998c6c969c622cbe62ba963aced218b6122e6d14e7c92117ed5ba893ccfea9453f84d318f83949e8ca75c012e93fb106ae01a9550919509d9614e3b55a839ceb7aa5d98816cc0bcbe5b85808a1c64c746fb6cc204c87bb21cbd13b58f3f98b59ebe297b732c289bba09a974b3ca8b21e38a76f859e232ecee206027df7b8876f2eac4282f04f497357c085c40e08216a8956904b3a4439907bfbaf05ad70408b5836eb5282689b3833f6491c0f6e41d85a87d5bbbabb0319e2e125f77f3e0d1d05e4b1bdaa6926c4b53d7edaf329d7540254c7c33cd777813458411b270f9650533af34858c3d8c8a1147d2bd6207089ff2721a7de7e53526a2acda9dabd08c6d53920bf2853307a5306bf186\",\n        \"signing_randomness\": \"33bcaf57a36d94d05a49cf86c426340400f15203c1bf613d0e0c1736f7734aba\",\n        \"sha3_256_hash_of_signature\": \"fd2b4f5037679e56eeed09c4372589402d9cb26c88a035c4cbb162e4b1e463ae\"\n    },\n    {\n        \"key_generation_seed\": \"390305aadea048ff53e89f19e61c9740f1c781fd5fabc7e3b2824002d8f9479a\",\n        \"sha3_256_hash_of_verification_key\": \"30844cd38b0191e6cf6fc8f72315e3d142ef14553aa1dc6f20cdb92071821019\",\n        \"sha3_256_hash_of_signing_key\": \"4faf403ace0f23f2fc30d037a8a148484b30f0f4a0e5728c1f81d85dcc9fc02d\",\n        \"message\": \"e49c282ebe2aab2e4d2749e51df625a83298aaddf720f17dbad6663103885fd444cbafc10cd65010994dda490603327a64aac6592585216301e850d104806e166672032aac2a955877b15f18d1ee00ffc94237a20d1ffe88ab5065739f06aede01e900450c778e90c504064bd9699d55de9a40c43a3c7647f244c8fb278cffaeebadaee94a8e0161de577a812e0f39cc60cc0140d6380a56b7f03e8e1e0e197019278b31e318b7d80e43fceab00d8f02738c6534a380effd7d2bfe059aa6a2314662c8de6a89f6f5405564491296719956503685d6eda9aff9fbd64b8a2fcd13ca2d69c01994dd7d6585c7690db716c826e1b2eab2d75e3f7a48424b7618f4ea4533ea994aae5e2d7972ac3fde24b13aec089b3e8fe4002d6ce43c7be12dcc014347c4279df491b66ba6a523bd37caa01d87b328c4c18029f5f187bc3614228fe4d866a3dedc1cf1b609a51deb0968ac4b6a460124fdec7a225f0c9d84389143c0d7bc2f523c4b64e4af1291678ec0a519c27761c07139f2d4c5d3f01af0a5298613fef678404643463324ce7f33fa5b346f9e1a7662a06630bccc47ef62b2b8ae2038f53f88c02ceb350fcb64148b389f302f7c73e32b54638da946c1a09261c0fc8dc52d5a30817ece0fc277d73b366a679476805deb477230cdd226ed2b412040d1ba76a3eb288088e1814eb5874fba844d744140409892780865d51ff8fab5dbd53c2a6199169079215f3991f4008476fb8967e9446c58f65af079a3741fbc3431e913f321a5c39ad4af6f5e6e9ac8ae6410820c37b2c9b535279a496c47b0b1d82b764a71872a361434b83e21fe7345b86b46c00daad7c8a3b094e4246a9b08613066afd3d934b1aa2017a3aa94865e94aece9c220308988915b6ba7e464c40caf39a05f5bb796237c0b79404691ebd47cd0b4f263c3b7dd4c9365f09a06bab53d349c2a78639a0cbe7f07b9ff6afce0002c442b044874ef662ac22b9a0c11af5552432f24ea436e0b85c33dd3aebcb97023a797bc70eee5057621f3856ddf528da28aa643353ad7007f81d00068dea4d7889bbf9a79bfa01c99928c9e7297ddd2665834fd08db0f5b8dd6b1ba2e7d8ce636194073f2653d7997a0865b6e7b88c4ce1879a027c81a13a7f78ef5a6a9be702ded54753a7152223b278fef9e0a0caa2b2b401c59ee13e80e74ed5ed60bf071fcd6d3b00fd7139f82dde299b6c3628886825818eb57c344ea16950b84a5b107b45cd6fa9cffe750bf229495ea517d6ba351e801b32c2a4440e6647998e0e9b189869c98005c6032b850aee5ec188f23f4c6f7efa954296f88728edce8c763aedbabcfb2117946626c77862a25e89c2edf8ff5b796588e18b302f3a97e017a1d9f3b3795383f43b0e498861329e053d016ecaf2bacb5cb73bb516fda5a1c530bc265a0234f541e9c342f93d0cbba38de05432d66f1c67e2031f028793f7c0e1eab730c94c527f6c95f0aec1afe98b34c3d65aadd1c5e9f240be1615c38330d65d03c2379cdf25ff195bff1b327b5aa808f39b8d9a36b411011ffe56c4aac89e96e1baf184e6b38951aec0005cc1be36c86e2cac027383a6b696d08d70c51108f63b615031564650540a83ef8d793571200b7bf7283170326b8cd077ce30d80e6c8b95776d78dc6c0f1205a63b1a79c839d433b74c3fcabba651de7f7c776f22be5ba5d41a3f7dd92e95bd6f0af70e77624970263b1699a2ada9147e55e808945c210aa620377c8aa7c3189979e30eb00cc1aef9dd3768ac458983f974926b6ecd856815904f8ed705a0968d8255cb0c5e1b85af61771cea91b39c69aeaabedbd87317086b35f5c2b3e5e7ef72d5fbf31d2e8a25afa1f199bcbc5d59bd6a5efa70917e899fceb8006085e18aa5cb50fab121f6fec4697a0c5cf6c07fc45aecc6c215c89ed4eaa397a00c65b6dbbd404e0384fa2bea36d399350a4d73c7bd11ee3414d31913595cd658d073d08d7986b53ae7c5f05f4a4b288f151bc0006510cadcce55c803dc1e285b81dad081c49f05df6ccf05f8bc767fa8a9fafa73dc3e1da763ff5c4c9e6ca9ef4f73f2b0ab2f73561b17c1561add7a0a2724531ed77cf8ebae58db4e53460a70885f1125f8fa7547c71f40618fe5c4a56fabb915707cd0d10f009d8e92ccef91dcf988f2ed418c9bfb8b9edb754d58ef1c190162ee02074c1269841600d4f0cdf3127c02c672706890b2e450ca8e78f83c29827ade100705fdcdac35156af1e385b4aa096c0d68a5942f879c9e1c6ff9afaa2fda93b064414a80b7425ec42a51f2db423874fe4596f5f2204ca2e04553450d431b175c7f3dc13e21d1d5a62dfbb5a7719bd44f7fa90efabd4e8324ba7ee953a74507a0912b6be42ebfc452d856c96a8df62b20f60934f50512704fde64fa7f2ffe823559defd50f5f8bfd133a99f37a2cf289fa12bc3f750d8cd2414a25bca981b5d1c9a6725227345d4502fe7a9ef3e3913f1dc2f8820c046abbdb81a9b65f69288cdee8dd1c42744f1cdccd30b399041a2841211543af9f54d576c5100c343ad736508004f96bf25791263e1d27d41b5b410bb94fa4edfad743150977924ed8ba69fb5ea7a3e0859c4eeb215f6b056744e08b048bec009f11fcf5c38692f1b04bbcaa531273fc567c33a68708120ddd7a647f515934f15a79082ee3a58f9a42a2afeca5338804f19c929c05e69adc926aa78c585623b7310222505d17f0498edbbd298e204ab5ca71e6fbc701531d2d1d2e1b4f09e0a551a8d58f7387082c100f0128955e7a5859346c6ebb74af69170ae97e146e908070390da12ec4aa4e137459d0a8641ee6420e5ffb72ff731d4fe1f17da925b56fc51439b44c0dc5d7b3e94589ed7e0f8f4f8fe856e27871799e414254eb53ded98265125bc5f37dc9bf543f25ea190a833172fc7b967463997539cb073e2477015c36ba1a6041e5be4f3c567446d925cef0e1e14f420568cef033ee4d7bd24896e04fc1feb01c902504805f700db8a50444f8bf175a191cb0cb7317c7d59dcc9b658119a4fc29247b26ff80454028846d638708fbd5d41529f0fe450aa1193b8a4001b9737a5a4880e37fc12e0be20b44e9672a4eb40a778728eb74f4f44cc02371ba3b16f032a3465ada78719af228d6f1a6c99376e7466728229338a8f52a028067c35eb0ff3f342c3f31fecd42570d4ec47efce1ccf5e2869f554ebe46ff2af53439ec49be551394d6fb68ac2034867758012daed332b498d107559968f76265abd4fcb198b924c2daea22b96c2449b422a572e9b95621fd54d2682f535916821a59490ea712813278170deedb22788f2bea68aa9bb3e5f1d117383f6d264ae78cb120108d281e8a46b5b4cd3e45788c329af496c8bf6a27cd117a8b199e9660ca40e9c6c0726c799372258401efc6ad65a5c130489a4595f573afb4e9c78ae3ca365444efee67d341bc180d5d659d253ef50609f19d0c0c69642ed8463ea39ef9a94826bba19594667cd6e911d1f0b0ef63a030149b4820881ee6c23674392e09be9869139a600b6530801432fdb6fe46f3a37d13d7e660560813c7cf23be5004441b4da1078378624c39a2391c532c6cc843c36e9379b5168739a5f5e55bec1a5d090d2a2ef9fd0a2cadab68354594ebec1f5583b85abc508fc2acf70c0cd05be439a689355c59c28d138e15b1188f276caa201f51ae688fd62d7301eeb3b44190e2bbe6e1f57e252b88952e3f42743916cc496f3f586a00f26b484e563d6de05f5a58e15b82260348eddfb38a54702241d1de4004a0b446c49544ca530a16b5a97dbb5621d86f0cb0231a88b616cad38543e967c6249cb1ed9b4dd9c7bdf718675e36a00d12bf71ecc034f2b637397475319781121e0e5249428e17161807489b9deae3a341287dcaaa90c2afbd9c6d8c31e42893e2448b5ebdca81a32f396a7f1521e9f4990fdc0bd194810d6d9523b7d2bdc1d4a0b6afc92a200d9ee9559919c7321f0475526b9e849e3ae7cc19b0b44f7a20a98bc5123af055a84ca3d0994dac74975c568b5252b349549656bb9630371cad493af1ee84547a1edcbf8d5212dc81a07779ba5aad99cb6e4b4ee02c27305ae5686cd489a0f8f231bd02144ed630bb1f18ac0b1f7cee70fbc8082a408b7de89a957aa2b9b8afeaaf9bc639d95280ddbd9fdccf1fd88df4a39db1f2bb735\",\n        \"signing_randomness\": \"7886b84ede9e5c2b7f6906f55b8dc34f4fed64a3b6512a0f0e8896ab1fba2ff8\",\n        \"sha3_256_hash_of_signature\": \"818f341ce68be57ec8baec0890fde14f12d3b1b4ac2fe19469584c3d5e64b368\"\n    },\n    {\n        \"key_generation_seed\": \"3ff621f45774459a0116cbd926d41e126d981c9ffb22b1275a42949d51b0cb2d\",\n        \"sha3_256_hash_of_verification_key\": \"1ab1909c978860916bcf843580a6608cc5cd257433414df36095e17f4357cc0b\",\n        \"sha3_256_hash_of_signing_key\": \"d329362a31be0529c3b5607d65ebce154b2fc503d6e1f80e9d599855e17ba06d\",\n        \"message\": \"7f0f4941f0875be5910c9d72849e0c842c8480949e1a7d432e7770ebd8fac15161d602c313448fab3d357d30937d7bbe13bf33bcefd0adaf48da17afadd81a077e376a93c8a02a7f66fda730757aa410b23528cebcb70cb158b2f131d6593a52c90a13f7a69a15a2a20b8754dcbe71004dd0b885761fb50ab0c043ec41820c3f1e928147ca9e064e1c13b350f7f87db86646dcf60b06c0149c77471c4b054d0aa3c20ff71065369b84555a514fcacbc38dbfe20aed971989c4c88e9a8257f22fd2c8899813fb8b32e8360f8b9a85165d215ab5fc2a8e0eb531b77c87cf209963326b634e2d5b05cdf30c0b0dd0b9188f613d356de5e3e970e2c04c1473c625bc8cefd6b4ceb3eded1f51084d761e7345b8affe9eeb8d0d32d300033eeb0e96da70110e58778b90b2f3bf0e0f5e7fd5a4c68719af48dec6891b6ea4e398fa42d40ab8944cbaf4930c8259466ab96af9f50feee189649544be282b5cb336b330d927e808a157d610ebbf6f8f85e15c2fd065a7b69020aab93f579d4204869037879d7751cf99fccfb20cf1404e85a05494a8b510739bcd3729076f3f44330a5080e3c6b8e2795b9315862feaba69e105dd7c21d99103bae8b5fd668770ae13927bbd608f73705c603b4806746f386594a66e81c510b6e781f9c5748c340cbcfed9674709b84b7aa61694db86d48671209915507792345e4726416e2be76c73c95ad973620b1c7a3c287493e3ff379c1fc30b42db03f57c9f9855e0a43737dd72c7c0a9f8106d92010a11fa1fdb168289ce6d9507bf5fb35b2c2fb2fdcfac822dd0609eaa111c7405610f89f0b6351d28d6ec2aad8b1fb9af7bc7c217a6df6d7dd718c20d0ee7a5fa338b90d37e42528aa44fb7ee05e7776dcf111ff18f2e6392465d557f17b46b88fa91998418a66cb8338ba7aba2d1906e2d2106e8f1294bf24270baa4ff406e719eca6eec57106e5565c594918dd326a846a852872cde7d86c5115c14324cb1bc5ca74bf4d9c404e83b984ba80364505ec29dc45495c39d510aa6a4845c3111a39fd1412488745f127cec75d0d9db1244f0e979a0167b2853d2c24e8203f752f2f55055205eb54545ad5f8b5d1e88cbc6f2e561c5b05c8195f8716d133755135be51395c7f64a32e31c22c9fd9a89ae571fa004fb9f04e9357d223f6b258b98abe65fc1cae45f4c1c836d4ff0ffd339443b44785e4a61284c06f5f8a9f9fa8a19aff4ec18f64992de2d8a8014cff92011506d3aa1feefb8151ae3c916823c9902b37e9e946a7ceb55739b4e22aff0e3af2de32c44af3e3e49d6dc58a092a7d2765e070b5d3e360775de2ea13b4ef234b83ddf3724b38691ad48070f5713f28de1a577b2427445375f18808b7b49bdc2d86e4a37a5c39089cf4bcf5be4d6c4efd3b91b7c8f030675cc4a0d77701922ecf0a3d6b9eeb016d6d7ebacbeaf10b8816d8c5e67564889bbeea475cd23f5e4e70a8842e67b7ca2753b7e86205abacfe1f2d9fcce34ddcf98449a6093da8684e4f1564e336b581b5dc0172360e695ac81a56cb641e473066446ea7cc79e95ed409b899443ca8541cb6f0edb500d1d52a01d84e70e5a1b3210b85100599caf6d5404b2acc80f452eb7c6c823cc59f8141d2794e275e6afb42bd14311b6ccae53ca64f86b03e624f7fc0014860a793c3f1d90412195130af2a86e4d62c8dda0dce706107617899c271e0eb8ac8af89244da0c2ef47c18e808b45f14aaa14832d022a1498a295eb4640517c9be62c9744fafa2a2688f2fddf4f9cefe8bcfd0de3bee78b53c06c52f404c5a504f5726ad6d5252c19eb8038aba1b7f00ad72fcb9925bfc9a9f0cccf07d96f713b4ccd2806bd99256b224321159e5c599dbf41e1a1ca8aab27d23ed923fc6433ce639241edc5598392d2772ccb3e586733f75711c020f9a5a42f857cbbc493c193be77b62e2d24fb2be2464e2017f1b1b21e35dc9ea7cea439fce1eb805f49434df1cb527bb82a21057406f7616adea128fee0adc0d8ecf265daa0759b14edf0842e362acb7df4e0f2d2d6532efc818a6a9967f7846d803e5beb5bd46f27e2428453da213577aca1184f7b8001937ec28060862fc3a28658c65938b06f8dfe35a2d9b9f1623602e22faac003d86ae2d1d69d4b9a00403cfc1e3fb169e12b84889be4e214a3023ee4fe65cc331e25cbce70a12af4702b4d8706e361c63d3b6ee9c9f3b0f3f69d913523b9c4f4b3557a928ac1f72ee6bb3cc005a257a38ebbd24a126170f6a2960a3456bcd2e823eed71885ed34dff2f1b628e9908c19fcc888b3dc6bd8c9080c7567f6af25fc4c289e21b45b08507c4555b2f52230c07dee3b0bbd4acfd22444da386fec7d232b925d829a9c80dae1206a0fb8bb6b39f0f2efeb8662174528d6dcc61185fe044d35ee146edffb7d4bb126d9916a8bafc1c56a9fb106fa059c043ae4156d0f11438167edbd2857664e6259741cda2bbf6d9cda0cddf580ae0db5212d9f4761f6dfd64cb8afb04666fdbb7f3c9286e50dbe82d6b50f4ed1076797f83e8213d0f6cf0427d45166f433926300b5821ef96c4c2318b85f9b43341ab9a8daacf8f4844d111de50b54b9e0212a1f96dbb4ef98f426524c5832c514f8d2e4d8308fbb2834f8f51b6fedcf4717785a526b1dc63a1227ea00fbade8823694b89e088e6ee8c41ad021a6e318cbff7da0d1194768dc6034d3c9a1b4eea41a1eb6e8a689bf1415dd4394efd41771a171af0df082e709d4e5ab10153a1694d573766242a16e3a5e3f3cf8ba4781ffd687e321d89719a99f6ad72826da6ced4f985e0c10815c5f5bef380467c9a2c105230928fce873c5963946476c048fa1d60affc4bb034e1443d41884d6850e13f726322f889753da2f2f0155e3e729174328197ac08b406eeae53353f26c6cac0b6bcea8e69988dc54c28be7b2433e48e3d2d91ea0f0a48b495a52336dc1f3ee6f137f6f37109943e86370da4d057b8f5f8d8c283ddfbea774f1eb2eb8a00b9060f3561259fe692e8424f25d5c9a00b2434d1f4bb57f98234cf5836f12570fc24bdb1ad765f7ea9f39e7ef6cd08760819b369d7d8b6c161033a614e3633cdcf497b7e5aba8f30daf3a0d5229667e3d96ca0bb31e42c9a71227ed2f40dfd363afdf9e26e413dbeed6c514462c8cc00e11b9129cffee78361224a5f56f131de81d3072f4836ce7da33b023b961c9ef4d7db34842dbaac461ee1adb114d773fb3a11540af7b968f4e9649024d7103fa42ebf34194d4f241f4631bffe9a6712905113364d09f988cfcfa692efa903ff675425400066b80804ab487666d4b78585e3d42dd8f3e73b66133259c12c27c9b148733eb9403b9961896044b8100e82c1282a2ad67c61559e8540d2a293bbf19779f7e0512f87f30a9c21aa2a8fa04aca31dbf0f33c6447fc3401b624bb98e6150be9fb0111efd9fdfc222f8f352f5cb65b51e937c0c726cedbf2d6fcde4814fb5530ca009eb8eb95749ff01d8f2996b185c5037418d5efd20537d87c4a57112d8d0f601a1c3aa196930cfd13d92107e35857dd7c7cf4b0a3b5d1d8eb1dc9a72febf0dda183dfd8269f653127723401e36c0dcc6e85714256d6a893f574d97843ef0f01aa88c70350b9f325761a1fd7619936aab809719c9a4e71d0a4b26b612fd9b68c0a594efcaba21cf0164d698903f0bbff437c667ce52d5e0dc185b6f779df5e84315bfb895b78af5660edd4014472ec4d8f526db1fd89720af884797cab51e1333449ec3ae8f7e44ed8f5b7d204bff55d9919fd114f51b8731da7c5289ad8e2f53b0efaf598681af84a66ae9ddd38f79bd02f497771d709896a6e3c57dc114b932fb05bb29929d1b8ac8da096164433f2b1bc41338b7d6f6161d11080d29731dc94e5f1524792dab81f5c7e5ff81e95a7372ee1ca5f47db73fa66c0ff24b21bf6ed4c8fcd3c6f69990191ba34d1ce50024b4e2cffcdaf101662ebda65fcb5b071399f6e2a04e392c3878498bbfd2d828b4828059c8e3aa877a279da61ed918b254ed1211d5976914827f34e83244726bab01b4d8dae22123d11494020d1c85cfc4f5296229d9c7d6b1d5347a23b677063d886e46060b0f8d2d88453347f2b0315cffeb6116ea327fd08a5cca46c94b1522e893c694052e10e502994e1e7ce09e509833852cd72ea2e442fb0d7673e217809ceb113f73fa8e2f273410e44e2d550e277f710e23a09e63adfdd1bdfd899ab353651baac31\",\n        \"signing_randomness\": \"2d135691f5de0545e2c09a90b11b0083d457f7bf54d17650adbfaadccda862ac\",\n        \"sha3_256_hash_of_signature\": \"3d1de81638594733ac9bb59d5ac44f0acc2ebb10604a4780acc0e65f902c9515\"\n    },\n    {\n        \"key_generation_seed\": \"49af7244bb5bdc0902dea853cd9a780997eb339140276a4008193b993e441e7d\",\n        \"sha3_256_hash_of_verification_key\": \"bd01156360857aa5b03d962d29971eb4bf3c648c39ba57703bffcda0bc19dddb\",\n        \"sha3_256_hash_of_signing_key\": \"81ece868a69c3756f3cb63876ddd335ecb679d7871b122a8a6a627779decd71f\",\n        \"message\": \"21dc772ecfe4d2daacc51bee67c8747144cdd0f7c1f43cd155642f87f2d09078fa5e5836107c22311fca05d081db1a329b7db18a6f7a18957a1d7bc2efedf4bd9f61e466ec69a1714b50bd8b718120d55037c5162d5c2c2b63bdfde714f7fb8f6e42b8e945f4804be98d7cf39d06f96e789cefdbe06a114fc7279195d7ae099cfa1fe97b4e56327a4806e074c04cd3c84c1138fa095e1ae471e5b9a5841bf3f6e160fc805ffde3d0345626724b3217bbd021872787918aa80ce75c2de0ac1743125781d5a027f3d8a25de352c4393e4a9a804370980a1c41afa31243de82f4f7b1a5a2010c0aa2bd25083cc0f5226ed232376ead1047b21f76e2868c9186a93241316b1113b0d313db476705c29db13197c73aeefa74e23560055a608dd8f90b356216e3e83501b4d9d3f64002ded43a5bfe73b8f4f87a51f0da26d292480166261555af1757479b3b729f60874c769849843b4b212d67cbf4294abf831238d3eaac102318be933406d791f4f5c479ac53ae6231bb56a0807902f5c3b4f6dc6ef2ef6390607374311632051799510fd277637f730d2201bdfc1b3e0d283ba43de8a90771addd884e1556da7c546e0d091eb07682ba3500a52ccfb3d0b3d6a48cb3a6feabb0f4c4407c5133dc308a26e51ec9b656ad0a653d01d73700af3dfb029814b4f3a45989549609efdc47779903836ae813501adfc948ddd46a8d6ef4f4a708b90a7206c2f66338fa4f7bf94f37ad1c371a3d2212289dcf6efb7e22ae747533afdc7fe841bffe822ceea6da7827a8794fa4281d12a6eb66048acb1e938f44aa40a3056a9575832a672266f5de44c0040c2969150ff9d921267f0210437abd8f68d7ae2852c7a61dc5a22714615df7dd131d61e53d65481ea27a69ac9ffcae443dc8d0e893b8f77fb055547139cf1771740b2d35de6c47331e996d52bb29f778006779a98407947d57da0d9d4e9a14809c0f438b75513eb619b9b1f0f6ae0e590284d94e225ccd6bc2a4e093f1fe09d64547e5ba461eed8a8a6153babd2ac31f946f0e87ce5c9075828745d39f583cdf3ec4a5994b4e3585696fbe16a3ed59be619413388fe16a58546ea1ab4f5612112d2392f873b2163aebecd0b371470aab165a7fc3da82ef5f719be3602c12607c8ca70d6db2c557e309afe3e372fb44bdf76b65336474732fb1726c19de31fb5bdaf190a3fc9636058f1df38d626db384214f562ef50eef00f38d986231d4a26e68f4cbcb06d3931da8daabe21ccb6ef8e0d5f935524057fab3ba44080a8c3b83fe7da0f8094388935e1d169ce84746b4e5630c65a7955c9bd0e46baadf0f2992f2a57e2d6772b6ff5d1570a4c3f09b5ed0825725e73762dd27b22ff0956d06ee107c17859d3b86f6c35e62a1ff20702976848c1c329dac0be9513a6677597dffeb1bffbd1041cfb9f7cb1ac83ec744552dddd052e635e3862ffb2d6b30a6ac3b0a25d0feb917c929c9798909ca8b32258f3a8f04a50820d130c9b98cab9d9ad17c86767bac9a373649b0bc76eb197d271e854f0fd2413f46461284d21a97fd4241dbab1b36463436718d3fb5b537cc2fec1451074375ec6cbe42fe3e43acb2aa500aa138c3d25e588fa4b288c0b690275567bbb37ce0f83b5f056f096f9df2f2c34400cff2107b8411b98218cd700de14e5d0fc6b0712abe2fe5b57db3390563d6fef29d1a5501b366cf27aed11db3c49cbd69fe550ace5724e57c820e47cc3d46050c4b8acf490f3d752fe88461171266ffc75b37f9c975f21ce438642ec00ae65c876cb422ddf9bf5a7a10ac8435b5a0b812a0b85fb35cc30d60f147a359288716d0cca59e6b9dedf3a623292231b7334bc8bf91e3c129896d39ca61b03c3613cf3b05732b7c065a79a28ea06f99c22d2f99a7013aa0954f1ded32cc020e03de32a5c447c5aab3b59051ff8266ec77066a9547ad03af8a425a7fc747420099119a1e36d73af140fcbbec62fbb692e7083452b0cece88cf75f3ba2bab99c4cab1dc8f1ec977533c977d994d55b00261efb436a56eea0fc5046b9b5270e8e90dc575b4ffba0c5802db37082a1e3d29bb2cdbdd0a4f1da82aeb9a97d8c91a24f3d423bf7cade5094c7f55bb046ab7cc79b3a6fe2a644b623b1addc3117e163d159d11b8c3e25e86ffb3a89d47bcb9cccf2cab78d1c2ac979466a2e4f4044213e0a7e6110df832fed8344836ca5fc7859c114da93de6f89a984661ee0ea4f4b9633357fbaa20044e4109e12eb13966688c41ef3cec239579be90f37e263310f4dcb2df730c55a2a4c06e0f37e560173a5d184113677cf1caa69695ef7d8d1c0105579abb3982e0385e7dc73f1b8be692473e67552dec0c437b0f6f83c2c682d05e6129db5416ed4302fb65a3856f910343e22cd5256e1f57c63759750ee725c309f19f471747cce2f52420bd6fd1cfbef1fa231fc8a4d1ceb53135f15b565922356fdf06bc0650478a6a8d5cf176eb79ff70c0bd107109cc6ddeecda5f1e3018446238089c19de60e77b08c47eb982db409cc02d933fcdbf7ec206d96780de7e3edefe00532f02c9bca52b7281fc3e97ef043fbbbd6cccb2a4301ffd59c7c8ea12eda6d64839065da227db146f54465bcb4e7a1d6c77784baf30bda167a2cd371b48da181ce1f40fc634b65a42e3dd3369cd30dd6fa0ac6e75863fb70df23c776965005a14197242b077460d63e1edb269670a5a7176b823a4e8fc2b8b13232527fde24684937595f7ae4267aa6de35c7f1870d9a91b0bf5c62a1f642bd2a73fe3cb222719d8c3a63cf5d439512cde24275b7d9f470d9fd947e429960049d2039647df68b012e5953d76cb6391272ff4013916c1129126d96ff560c862af8b368b11decc60a70e62f1a63d5f407e9d018e939334f336fe5203f198adbfe8f6778032c2124ea00bc99cc8d80cbdf7c74e8370e02a1c5164af2416ad00e3963d9df8eed9db8ae4eb58c6d636b4f8eb201ed1c9f3dbb54f47bf22bbf6b88b3a5f3ea4632d4f51b2580f01f1ee7d2a4f5f50367ce0d983776d2232b58eb311fd8424e916f0b83d9eea4daf985d17d68fc81ffae77c45fe83d6a210ed43256279b665f581948ebf69bb72218e2e7ff76da749f7d43911bf0d8a70c509c4793e4b19e510479167bfb6ed58938c4a060ac4d632fd2b6c4d638032263bfe32b62be6dd935e4c07b5112dced24d99f8b40684e50f0890d468343fc7b88c2ae1974e4384e317212fbc987e808fe897a8008f35787798db8f347e591e911ebd0e0072e2ced07f8d159f3e2352d675210fbd6f48b161f0da10d9b26053e96cf282fe9931e0c8806d9ae94f2d1ceb0e696a152f84851f14274eda2ea4616fdac3adef7709cc7a8a4d2959b10aa995dfc90596763f9694edcb26a4e86fd5452bb59073f24be187ac6d6162a5ffd3350bfbe7b72cce55685ab04a3b7f01cce79efdf1d37ac19ddab0dd4098ed1848ea394f7b35400ebd977e2266e69a00e8847a37250595cd7e8c088e95ba54cc4e12f19a456ba5de10d84c943ea9e0feab3cf500283a80937899560159b89bcbb2e1336a8a115fcc6badf90a274a1bf246a1ef3c8dc73e65fbe62d022f2b45792120c45db3ed9396ba8f46fc24eba39a6b84095d2d689132eaef80f569b68b991345ee43c2fb55abd15fbfdfa95462bc70ce8651b67a4207131d8f992522e76e128acdc584eda1513cb1361fcc6eb499e965a802357dbd9bd48b2ba69e347552f11fd15f768233debef1ab7ea1044540ff80b34f70b2e391c8076fe7e28c532839d9a678857d2c92ddb2eae77f4f30af33d493463bb9905e334ca73d71f93c4a82fb79d241556a282f3083bf762bd454453f727c334f13f42fbe947aed466e73fdc88c1f5a7073d470f1c53b43415a64f44956b201a5f3da35d3297f296ccfa0cc82a513a641f6fe705d4148f54504f3df7696683c04eeb73c7457c42500f5d5a6e2b7d186ead7e41ad1cd8181ab54e72ce25176fc55a8cdcde18d85e3a736e66dd502014e08a2766642b9b419e6a8e3c03c74f1d4f2d0f9cd71bbbc5bc5f5b6248b6a1cf947c0d25b4007060c3c71432b2d9330a8b552fddfc04e05e18c29621e1287897e44cff6f9787c76e1fa542dac853834a3f0f6a20a064630ec0ff829752e7d8b12ca56a5ce4c616b1c29089fb5b784f93b30bac19e0ae2422362de5bcef38223b5e56118fde2216175ebaad49ca08f32abc077bafe552ffaf55c8fe24751e858498015c1b053e8d82a350c41a8d315fe2d7173bf15507a694d03e938214f9f1777\",\n        \"signing_randomness\": \"e1ea785bcf0ac245a53beab9a745ec76bdcbda5370d30824defce168bcb86db3\",\n        \"sha3_256_hash_of_signature\": \"01697a014bf60f583b53ce93a976be3e6578161952427ad7aa054f9839afcf10\"\n    },\n    {\n        \"key_generation_seed\": \"6775fbc61982f6198a058df42c1a4954a3dc7c596e6c293a8f3058a7d3ed820d\",\n        \"sha3_256_hash_of_verification_key\": \"52344a124532086b0744ca129fd917c5623291ca651ab7d93c55786c376e06f6\",\n        \"sha3_256_hash_of_signing_key\": \"cc6e65bfc1648f3bcf88b75b5512aa673524a4f802a569b99b2591869a58c3fa\",\n        \"message\": \"a6e3a848c47075ea79fc153c0d65a79424c4366516cbb5ecd2e3efac16862bce0e8a89a0d4fb65468ca9f164525dcf3ad7f79843e59212c92288c260ef1ca6e7f67decaae7a516b5357fc38131eac8195ab851324181384c81bc05ea445b867d65f0b727b0a78b885636bcc342a4f1b6323a13660ea2d282b27fecf2ebadbea688e2b657d328d9245b1d8db89a27c69db53a4dcc501e852386ddc93a98fa8f1353cf52d07a6622810ea50df30d2cc4e708da7f0a51d5fc5e270803650da10d25e3c21d29c3b0ac3f9fbbf17d10b7a96db1594e415490d4b39bc14d637de4e98b609f1a8b01607b0fc145e4238389e0d42911b7a5fc3c6de7b04e4cd44fc882fa04e227b629538a4ab7f8b12f050d2041f9e991983b747f97f23ce2b72480fd6ab2e67818ddb231b734178dd8ba12afca32cba7f653febf4f14837e530f852413b50749a729003cb0931e2f064f0aa6de5da01d371d4f935136cca2e1b454522700c2df53d91f688375916d0afe7c1f5234d4f3c21cd9c8093acfd490a11f2a510139bf60c506f97f0e392d1c3aef050ecae8f13b8a44e9f82964cbb6a738dc47757a32c0d4cdec2e26cfe501ab480955351020cf0441c2ba355c8e6d4c8973fd372b11a050350a88ce0bdce31b41819eb303d94df48ca3b930636678342e4323424db05409f8426c58e4f27ff79546d0c59fbd64bc22a2ade50ebe4758484539026f5895cda295dd24f0ae25392e2598742afbba051868cf828885281136b1acd748bd9f37e18fa1bab5e54788aaf84ac07c73fe6d2db2ef387e11f688ef0bf81d2ea34f3d0096536d3c7a1e8d5f310b40f69896369eb73e8009590bec934e6c9f0d136280864f63ca3cb6b2fc4dbfb7f80c627cf4f3d13bb6a3a783b0fb30a05ae3d749c6fe8c1fc456ed89c54395ffc06b1dabfff6c3c711c1da89b282f8fe59f79139054979da194d9738dbfc0db1cb4f78dbcc55d4e4b1df47339927e675271274952193c11fbf4b768a92227fd47edc11d1f60ba546e0f312db5e4f25cfed1a96978ef7c53632e6eb36f6d28982e49af0fdc8b6930b51c43233418c5a77a175e02e5e950165d265ab7960f58eb11c3edcd246fea7a07ffbf96e5725de2bdb4f369565883f27c5eb8c197334ac7a8e552e120f6f4505e046e41a5357622a0fea80d2a00e7172e862cf67c6358a69c993c007c7b259881453ddf4b3059f7311b126a032775fa91773f63572d1d81fcef137e1fe68b00f9ce27e8c43e501898edb75dfafe010c0843faa5d5d319fbd4c8f7b06dd836e21584644f66ba2d3a50fe94660ea0d9c3f4aaf40d9454b1b4bb739948a2355edfab3ca216408c42e470c41b93454aa3c4f08596dcfc5a38972f5ad61aeee7a2c0978ce0c322d31c77d86991b5373ddde9861175d576969925e0f4ac1d5e970fa4d0b7de206ec3522bbcb2db12e2cac614d7f9110a32d4f7894185675e54fe9688cd4cb51519c1c4ca2679ef4af43114062541867c03867417764bb441b1238cbed0846135159cf68bb0013bdd69695e0b8eb3b119b91f515b6d79968f56682ba476f4f85968a81735930e5fc23ab475c505c3213dda81a2b5be20b6afc635870173c29700e4683c4f9a09c250dcd33817fbca26202b0c9e5c3681f4572f9fdac72ad3aab1b18e53d76e56d0dba5347e0c59e8c5c07ebea60b62199c6b1465484016df2d6a9cb3ac975f07b879b22185451e6b9e7e3a1a097bdffa7c733874f52f875bae098af05b4e8cee47b174b23e11d9e99a1a769cdcf37cff9296b32172ab4de2bbfb8fd942384f6bcc9641edd9eb0e55d4ca95307ef97752a127287b00f919b598994812ce94e871417629e66882700b36bef1da3a721b3564d39767c37ca400d6ebadcd7e63a30990d009c176190f8589eb5e2e7aeeca59ae9c7945949a9457254e4fb0861cbd5e896d755d1469cded95639255adf9e49d1c65fe6a6a32af5b16a947f95f2b128177ab7811d50b219c5ce809eb8db6ebb6ca49e05924a7978774e91ed264239efa127f6d016568ae3ca6a1aee16d1b6e1d913e74dd323ee80d43c44d2074e2e64671cb7812351c39a72eadb096bd52ae25dca9c242e0e9af340d201f781c666fff1a8ddd889d8ab17e982bb633a4bfa2d785300ee9310957fa9c8e26d4316fc3a431efbb8433a40f69c3d113b75b9c3a2b69ee76ec63fee7cbaedd44cbb08d9dc4533bcaf0d4909b52fb51d3372f215fb92551fc71cc846e246675f0d661c578789056b6713ae24184e40ef894fb5547caccb10c26fe52b7b0b8a363e9a6ac934ec55818a00b32362f5175814c4e5fe51d63836fe4a3fdd19e3314f606832fec3f02ca4109bc34e4d8f4e7959245327ea531be9ce77d89d0f2bb4b07ff52b37efc4bb76dabe4135c33379a6f46debbe92c8cd69561b7e28c02790e9364c33e3af52330e1521fbe3342a1443308124ef4b0c1e41258c7000a6079fd520112d8fd20ff3b368025cb28452fd293b927a6d123c797c228aa428b9f118dc2a17b2b60f8ca926bcac8ef42c33495ac1ffb46da8fb0c1a04d481ac29ba9fc9dc4e7548f6bfb861692ce7d839f08a25b48735629883ac8ded8679731fe4c9af371aea1a0efd4818c0f433b9346b04832a359ac733001ad1e73a7916fdb7a699fbffccc46586f392a225948daf7aac832d4ee851122cc37a3f241d38abf45adf7af3793e004a0578a7c72d294e2a7d73129ef0e6f0625c30be5be678f410cbec867e2e10456241a25c27b9946e1a0ef63e3f89954ab76f91fc3a9c89362feb2d6c04dc995b32dfcb18e91b60dfb9f6ea493a6487fbab659b0467fdb8960e78d3277a5434e6641008f43768266e5f7f18fde4ca8c4854e112d745a0d8a09739ee1acaf5697ddafd325e3c4da4dff7d5f89ea80601413601dfd0894789a198dae7fd5fba20e8780db0142defdd6bb3346b56df9de8476bad1ef52b6fa0ee966969735efe6eaa5a9b7ce4b20fc22d95ed798c386f37017e879cbeaa28178c5a084cfa8f85310f666e58c17686c66fd71d2dd80d7bb760ab0f6ae32f71c2412f90a22828343ab4aaff6ffd186d6f7cf0ca35a8f9b78577b7a12eb9076a4cbb12100258d3dd67b7ba451f6d5ee0479f85c8563639edd20eccb9cdd3fa5ba8abe8829c90fd27ee9ddcc8685a2746cff79bfb0a1b66424fdc44cc88a3de540b042cf538ad60b42695566fe0f8afd7e13cafa99412d50a97579f6e3480d9c2357df330ff612e80549cc71b737747e672a2d33079396b1d59239d26b3eb12f75c1799857ff419a706be5f109869166f8d24b999b8eea2b27ac76002e892d71702c5870c0e4979a5d9ba3fa77f73e6171aa4631940004b2864dd544bf36bb0e565898570e337e471994c9cda5970bc18c400f7740751778800c8e5753e201296072f732e86c26b61cdfc434a67582d48c249063ea1aa79f66056ef90c81a822db8d7c7db396058e37d2c5edb23da6ac5dfac9069dfd7832e39228bda9bc9821da8c161823ded051e0a82bcdad26db37d97228062aee903f499c98841663d4d65a045bbe64bd9addca0a6c882497519eaabd0236813c78be648db9dab4d9979846a6fbef4f1dc009dd03e6a287fb594f6cae369005ff0878612594d469d2eb77df48ec934478f36a4509f546ceb27b43624c90b27e9195c97ebcaa03d90deabba286c87a073d7d833f741ea4e2f6e5c302742d58c123bebba563b5ae93e5add02a3a584b51d3a5926437d65bd8ff4a5e0cb6a0e61547be2b3d3d9bf24377c8d1ac6c98970ee4c4d6567d2d74373891df8209880a96e598f4705d276660225ace19325cc820e14308ea178c41ff1adc2f8f0307a6b3f5608fe3b0c93d5605320ea1fb98d65eaaf23e741a27df7dd50035466e3a72dfbd543fd44d5d45625b590f437e0d5ce22cef89a6b949a5f9e0292edd09df22aae7a2a7037c3b2f631ef685baa22fa98565ae28892aee1e97e3f5f448368e6d3268219d5b49f2f5d69ffc1ca6397baed8f788b028d7b15385da50883f8f1fd53a78c9665f766226e4410fcd28d976a142bf9df3335ec45ed0b28344afabba7c7bc0403d26820c1e4d65173d8d1428d0f3d796a51b7a100e117f41059e20c1af5b61775ce27a9d3091f90d759696f90f59298f66def6188e6d58afe8f9a960966110482d8b507389edc3880a3c647628801e35995f3067617e5532cbdf87789413fdfb69b8c5631418f5a4d61ab70c13a16ea05479bc83f51e3756fe914b783f215299b79437f31fb2efc330b4264c5248b15652cfc7cb10a655ae95c9876a0c4426f1829297ad6e6ed74041296de0d16070c\",\n        \"signing_randomness\": \"8b8e936bd2e13cd2bb6c762e6458f394470fbfefa77f5dba5b17e7d21de1070c\",\n        \"sha3_256_hash_of_signature\": \"9a5c62aa2297f56a0ec67b54bcb3079b5eb68196cffb12be9e1ccd4eb2f945a5\"\n    },\n    {\n        \"key_generation_seed\": \"40c737d9b4a7ec0964a19b7221f606db1a0547382bbfd7e2595014cafb60c045\",\n        \"sha3_256_hash_of_verification_key\": \"44748232c933140d09e903153c1121560d40be672278731abb5bdfce63c91750\",\n        \"sha3_256_hash_of_signing_key\": \"12faebb0014e7b63c50e23997a4d1482be0dec6222e635ea58109a84714cb9db\",\n        \"message\": \"4a8dd040d592f8a1d005c6b03f9d34fa2cc99a0a238f94e34247d389e4a0382b270f94de00ff22bc62f50a59658d1a93833d729b7a5f1dad0fd89196a8fe1985c4f2881c1e4b90dd76ee3ba4e6d82e0b980f4af4a99d2e160db5490604f76ea15d4523a778f704c0d3ea76c4f2f7538fd85d0813d14b2cf2588caa0313ba21b54dc3f4f507ab4e5b7a724c5a836e98cdc7e1a67a49bacfbc772eb4fcb5733f7b88a8fba577cfb45db515aa142c30da0fb7668f4c53250f80578a97faf0b430c4de0e7888bc21af884762d721c1b5e08851f630bf1d975dd714026392e7e5b6c5f4d242d48e3da3a71caac579eec062e6affa488b5bae9c0c184d224ac28ff3ce6afb2483ee952736ad58a8ae875fb82b3d29ca93a99146d4253fc6a308bceb3d42bdc416423d01d05adc8c70567de0815bb3b3148c43364fafc756d8f632d20ade4fccd35e6925c6988d88642e9495aba22c9547062b8372f17cae029f7a03abd576e119749f3d37d0995692852c33f7ec65403cb063faf47e3d28700ce0d20ae6c169c2ad41bf959401d90d6bb09dd53ca69caf8c6524962989576f7e4ee016489b691c59c95f20e053ee5bc26f838146c2b6c58c7fcb694b2ead6b95b755e1a90cd473296272ad82dc83b74796940dbc68a772a5b87fd154b13bccd38e5c0b82d14f3e81d15a6f9e9df34a90c0200a5171607c072d232b38d6f60431506fd5069f8e27d52a7f5508debf7fc9e248864591879d5a5ca6cbb45f2c0628cc67cdcb47c682222539be819d15c29f08deaf0fd6a1b4f0eb0f402da95aff10017ff613b2e832bc1a8b1012a47907c3546b9615195636e7f77ccf912bcc290d17c6f92a4a6221282f3320b6e81681812e0e5409fe25721e77300bba051c7aeb7acd1904aa224e6126a34bb6cb35a5915173d7873ef19db5aa3802b9ffd59216770413bf40e949f0e940046cde733a432aad44a28217ee16fa221a4cf8d7a7ba8b7abc48914f01f93c4ecb886808b340da2091d674c39cf6c18dea53cdfe6aa3504c216be533df816768b2e49ab9ba881616896a6bcd42e84b5994f8f66eea4935e8017179e731fce868fd6cafc63143253fc87571e18991bd6273e9f0f86a29df6e95834c9d6caebf28e7a64073745eda384a01c3277c51f6c4ac68036399fbf233a3240c64165c28d256cbeddad27e0c0b299bdc312c4f25870ad7192cd852273923cb3723ef1c2dd961144c31ecfe060da35c89ad6b0b076372061d0427bf2e2d980f9d0e5a2f133bdaf5c7eaf9e654200423cf614d50246dfd4bbbba7f7b3a76108ee89bd1c0a1e32fbc471a65d69f7f4e0a8f0532f8dd506177f5d2041641a8460efdcfc3997eb92ec469fff70b9219d82e24ca14dcdb90e9bcb5ea57573c4ffeaf1719f9a443ed2f6de33dcfa574ce7e8fea13f6f1c8841db948a985a7888b6c291bae8940c760884c285686ac98c9ac0e67e3d40f9b0ace5dde877c4e2c6046b2e0b40d45f890345b0d6d017dcdbf800c6f0e9ba7fe203e3014c597818997eab5531863da53b6e8157f4ea4c8cb7e2f6ae115fa49547597977c5ca31188d1da6554be7779166302014451f34655da6ff1427e1ad5f986839e04fa1e9cad0ac8251935c6676b391775680bff03b41b378f2b0d9385f4c8cae5f7802c30873dfbcd8b0310287fbffd952bad801378defc2c47345c7a7a0ec553bd4c3a59da36e1535ccbfafaf466c157eff69349489def45f1f38eba7ed6f08a4d7baeb0bd9da7383ada1bcefe1b390e943b2635f4f7ff41c4c4a296d05ceaf832780901a85cdbe389589422a55c76296aefa726adb23b73de67abb26aea283bb30a29a2da430ed4ea78a952a6cd5364d700daea49b96afa3fd299c942744d9184baebf2e3045a945d27036e17042d8baf4197aa428bbcaac755a1e6ffe7330e781d1ab4b7aec5928199f8c1e2b3db4eff84c0778c1a6db3d239d61f7e4f8159d0308f5274ae3f7cc7e1ee68f1d835c4e401b704dcf4a4590263eb1b947fc444e3e7d809473860a062db227c18c10251c3f26f6d2a55867ce07a694a903fac897344f1ebe960a23ade20f1823312b7eaa36a26c3c438b8bdd1ec6faff5cc5f3975c946e03ef95152647b85f5ed5ace1525acecb1397a89af00157e79966acfd2765589b0115a199176d4d9777688b99730a418fa0c59259ed25362dea35288a714b401c16a586e959f916b7cca28e17ded0e1b617eb842922d4bfef8a6bbf2fd3a02829cf406bd9117b0391172ad84c19c1eb1864c8e4505f3eb3b180f4ab7641bdbeac5fb54b2c97c9f9acec997fb1a9dd0561f0feecce9d0f7d62cfedffc682ef8a3cd838c0eca6f33896aaed988f75104c1baf18899cf43b920ee947a8a87b7078514930dd4d17d7958fd506abc4706cdeeaa910ddbb76084f31c43d58316e6afeea4cd6692b5bd0ac86558371145279ced70326e669c3ac3be08f0a64692856428dd13a04f4f6a08a425146335c9462decb3683a5a35993dacbe02f385a315db494713d4fc47d3d3aac95983ee3a97add2749a5577f62fe14fa811793ce12fb7a53e5dd44db91bd9ef93a5b937bd9a55c34d653eaa6ca19707186c771fa98241cf266ac293a1e4208ded42030f5fc65672d811dee4156138e0d6d2596a6a0ebdfb160d218a155fe7c90e811676c3d4c6ab01241da411701396a14be87447a74bc024361e21204ad82e018f84983e13c06b855c8de0e361813016092b28416373f5848a86eaebecb1814380968dd38a86d7c41304791b3fac0a0ce72a7844606ccaf2147f796f18a4a2ff4cbb39091e0ee5f7fe073a7c35be598334d27a074f95107f6a22e79fa19078d2e80b73c1440c1153b5dee805a3b4a3e2e842f2a577b4ad96c80317aa046d83d7f7c9250976a03c33f2668c80a75ea707bc4f47d60dcc9ae48f28343bf5a2d20f0f9555e4d6d9cfef6d88419350c34ae7835425d3dbfbbcc3d1d43bd86f8e59b11979c1930caa056b32361c13c0fb05662414d0856057e8f92107e67ee93d99b762d5f2eb3df3d82fba17aee4ec8b601bf4b7830eb13679603b1ae92fe0393040afce372a863994e346fe2be31439b02f8430de45dd091fb59c6dfbc2998ca466da55e94a7b57761947855549c543c6ca4c2b656124815753a5e745a2b98d09d7a8b9929f3b18d422fb2ad217b2b36c2ca3db3e02abccb5b8f1981b85e82b4724c29df79b680313af9ea179249100890ea445cf1c5bb5e25265882ae56fee25cf325fc7abff298423375fd1fed48de8e62fd175cac268ea83db5f9c632dc7ac228372f56795a0a04eda5d653dbe3b8329877bcfebfcadae1925e06e15db08b3f8d584b1bf827611550510fcd51dae827bc31343bb5a657e1f791fe10268261e5246b31868f029f1a3e98f7d3846bd753498b8ce6d85a46e97fa136a2608ab866259ad1bef47ea6eb2d5ba6e4334820be47ca645fcb6c069458c0ef5f034519315d89e96ddaf2cfb82b5a61c0a79d64112222415506adcc8b3fb4208037ead599478314ba672cefba99fe3e0a7f6f740d243aef2dd198b18a5a68e7ab9b663d641b6925220eebc462d7465e5a7dca384f9443993b74a1d32e85411747abb659a82ef34a08e460436ebbfeaf0eb9424d01e77170e84a9fcfc442569a730f694c7837c86e0bac1f4b3b7671e05d9054d0600a50b274e560aec67616dbf9b2a941f4fc288fab9a60af02f4901f4b95380e4f3272ebac423390461c704ed0e90cd2429a330aca8dfb09086e4b2d6a1ee381c0dc976783adbf37c3ee23f0d5a7e34d88f640eac16fa9832c3ff878435a2797fde870c29261bb9d2bacc2a477cdfaa9e364f875246a57fa63153c5a97c54daebce2c6a3095bf11c8b3f99359fd1dde3ec26069b7d8348232c316dfd7307704fa908916de2c642bc9efb25901fa808817e9421ff75533f9cd9f5f3319cd17106250434c87b8a3ba148cfe59f8dacd8ad448c9eca46718ce3cccc99745331f42e1aa88b8a2ce0f28327091f61b2a29a6910c0249bac613d473b994202ba16479eb9bda1943f1c209e255327e8f525866afa636c1f939ec29258ae67d21e06a785d69a038fb795b168695f44dbd4b3a7d49175c32d0f6b4f4961c6eeb546aecee215bc3264017a57687ef3a18b71142f963e6847679ade4599ed53960024705ade8cc48993aa68df9fedd2641dafa77f7860665ab4cf2ebe7553deb69f989876122fec744602aa311787fbe70a46730db128913b03686aa8b832575e357f0747f5adc24a03be1378f94ff4eb13a78cabef514e6f7d34a0362a4dee7a720c1f243d5bb36a76b9caf42fd0c08a8a6fc6f104afed172718423a6d83ee13976aaec01942ee1c12aa351312308b3\",\n        \"signing_randomness\": \"e8ab7a7126d60eb2084271e47df7d0fd89862d7ab7c5e2d1cc15d2ebc5c36f3d\",\n        \"sha3_256_hash_of_signature\": \"a611f9d848236df9363310b51f4e3180a9acb3251aad7ef71b15f5d9de9cf0ac\"\n    },\n    {\n        \"key_generation_seed\": \"cec6a01fadc9fefefe40dd0995ca8341bab5f4f5bc0a271ced786a2dc224d9f5\",\n        \"sha3_256_hash_of_verification_key\": \"12487d51ab0a61bc0da7fca650d213ccb947147749c738696e45c8707bf3df35\",\n        \"sha3_256_hash_of_signing_key\": \"cbdaea2916b6410dcf1b316a3944c39c6fbd666ee0047f6166b0ef58e77bf92e\",\n        \"message\": \"743aeb9b95c44baaf9bbc3a3e954825111b7400e002fcc38c1b412d9980dbffbf66c550f730edc06f4286f3669fb7e101780e4c002fa7a8484b0c7078dec62ccfc749ab4c0486608f37f39f3a989e4ee912ee10b43d63bdaca16cd42e60c55aff6c84f01a42c42f4d75a622c20dbdf85913a70340eebc984a68f5ba0faf56200a53d08bac0e4448d3b42fd24d8e784e1bc14d1b9c843c10b1d6194a46654e6deda55146bd155cce5f7f61600112aaf5683efb8e4a2de4625b282301393dfcdfa4865a55f8c1223e033396c5042aaeba8eafed8b7a3c51efd472d345fd0ba34b3640ec584d6079ebd01fe12437e345d86301bf5d77e6c0c4e7442d2eea44f9154d742a9919c050d3dde7ab97b3ccdb1348fdc66e7804687f8e42a5c89c655c2146ef9e472c19511b69a8eaf63d42f1c3c4ac41a317483e3a678a63b68f0d73b9dc7cebe224d53e5dd8a96962a6c52726a5daf241097d0ce5d3ef4d483b586bf1e3d77a97f149bde14c662276b3fed43ae2f324d099358d1ae2f7edb453542099710871d492d3ab7d62b824d17f3337b62cf3acc6a2ee76854777e1d2c4abddda36259d212e212feafd477bbcd004202d5b6551b7b0bc81003fec631a86d5ff212a187d90af309fdda3c4ce52029fc89aef07659cc08af93a66560339e66bac87beddddea98a3f3c7436510d831b598709bdd1f642e9eadea46b4b9bd6e690b3a36c9cb1f7bf1702bc38adc7add8f14fc98c97cf22401f7b149ed461bf0b7e810ff4d01917b55101b66581e936a0c5c1dd4f47c95f200d28914edf919a9747cf027299528a7bacddfec6bb48fa1068059364c0ef85e6d983e8270867d30b3e4eb017c9d913b751ede6097b8d73f0ab7fb149cad88c510afe7c9d68e4d234d74b1991e23c154d1896ca0abae4a6eeb021dc6e139745882c920728901516e234b445602077d7ca46697e2a02ad382b0c72c70f0713c17d7d39438d8b2e2b9cd2073b6bc9a2e328094a593fd2c9776af3f50b2da949bca33d2ad6fe9f62bbb5b62635124d81e8c20f7d0245f835211241a44d116870c432e6c4742fc7f643090f880d056ee9d556143dfd88b24d38995de712cd6573ea3c037ce36e7d44f0bd7d8d12a290787dca36dc6b95ba29648a7712583e42546ae1f680cf7420f54693b38e53a4b70ee717e04b60a4aed4655d1ef60ecc3297777fdf82a4f39527eca4a25e5e4ac502628b56916834b077f1c30d81089648067ad7bad6de56e453cfb63492cad6fd35ccab874224baf415c89fb568eabddd006a5664ed3129b9ef682b122e10f67c3ca28868e2b36bad57b1115c7fda68cf6df9c4003fdba18778bb361549e8c513a56f62a74ad7cee2636a8ed62b6db365fb85b6215840c8c736d66157a6711b3263dde17628063d76a7d199fb7daa1e8ca5dbb1cba1bfbec540e856c051e19e7666abd2c2ecf23c3acf3efe26b12f058497f1bfcba5989b7ac528b60b3831be25e175207eec355ff5e515300c19030a59fb8359912ba0f497150c2555d4a73bef7b5bc2a1039ee97137c7dbf5e24b3ada8005346030bc36694f655ced7be938758dd634fe47f9cb60137f1a31f8c8d59e1241a254de5191226f9e787800dfeed1b43b57f778e1d6e947cf5347acde04049b1de2b5067977600d8dd648c13a67a8155e8870268660f933c02a32c1b358df8867f4255ee441d1ed2647b92a7d573cdb60f296e222c10ec999f44942b96cb6498b294d4aeccc0540e092185f072dac839c2471136ab77ec5c4c0e1c7527098861680e542d648f795d3fad08f40a4eea970bef37f1e5ce2f8b1ddd9defad90fb0bb4ee7c2eb74569dca4c8504959965aee8b03164047a77f00a21b66c488bf1fb41996870233c322381ce9dd1d682325e48e59171db538d36733359104cdaf9859b219f32b61727b4366f602d1396591b9fc5a4aed96a71c96272042810973354b0f706cf82573b2ff9ac72a2aa66b5a5c51647073a278122050337795a82d85855745f7be4232fcdd90c97dc1f70ceb028a677d606e20d9eaded26d167b8dbc9a92723bf2662ab01f8843e4ce8ed9451152d04dfb63209fbe1e9c6eb57167a8ce41b083390a4777900efd56df694a68a0363171cbb2fb0535ace39b6a03dd7fbf323e0bf0057e6c9a21954f7113e6a52003dd7e0a29198ec3b45319ff00fd142d9d1f37c3e33dd9ef2bcf7642d18e5bea592e40a8b6e2a58a9825faeb5c223ebb62c2f4e393ba67a71be2adb7d0ab01f93c133a349a6ac0a457ea4c2ce46ec37ebe6d0294bdfc6eb5f45c20af0bbcf1f08bc7aa761d736d6a939631887d142e6335197e4a96f8c661c99f0f056fe478f1c1f9930bfd232c42686e636ae654acea6b331c51d97aec33ffc3e802f7878590bdd372388df8bb20fbd9bf037d76fbc183118a317937a9213645c3e489a1c8a2a20a18fd74f2be3ef1f129fe6a55cd1591c57428262dd096c9c142f71069cce1408b61bfc8a2f40d3eb4830045f7cae3c50bf7b2967ba5a1ef010b0944a5f275527a7d7ab3fd6cbb78e9a9a57ac7f00f0ef601a49b478b8f9fcdfc2483880b106350c5aac7f038ef6e4c6e12173a4f83a63ca9707e4490f14e4e43a0bb757affdbf09d94f34ff5c3361f3b39375287ef89898f35db242b2e9cf6fab23bed45bce2252e8b2d51a029ca5c654026b838a2c28c6dcfe531a04ccf0db6bc2e6b7c7abff8e94eda537b18fb8e8de72dd73995bc3ab56f36ece399f3a2b8205c819c01ab525ba323177179b61cc70ee0fb9a619e4d0c24874a1552b265bf43515179f3d5ae68e90da7ecc9e4955397a837e0a706dcbd45f376d5b6a867cf2a9f9e9e00f4ec7cb32bfc6d58090fb1dcbe3ea9628a7a29a2c9d031b18d995b9a405041be5ff1b0e17dedc4a95eb904d18583fe5ce87b7b350ff1b7c775e257bc8e36c93c5a45bed1b571131ddacab8d437e3e22248260cc8699b0969baf02ac9700f640dda6641345e1cf064ba369124c0b7ea2784eaf00816b3f5640346113ff68f75ca752ec956497769aafc776e82bd99a0dc2412d8dafa656caf156e24b9bb48c443d470741fd12ddf35508597f556b4fb032e3250f215457bba273a1c89bce3f4b3465a38963014b14aa5256aa1621322e2818de3578f8b33cc2759f371dc585d60f553cb2c10a3ec0d14f7d1c9ceed2b66f0fa0fb51ff30670bad7408d77b1e6e1834585f1b03e348c1808b54a35039ac1172b0ef2f45d172b55e484140abd6d8cdfb76bf86a193ea4a0040b45e2887120e6a215d133145f244226ea42b87891e2d04ef4f3f25febc278d945f3e85c82818b147a9d8dfd47fe04eb340cad909087944c426d13aa00909d6784e2a2a9438ab613efc14ad1b6273df6ec124b8250b6f98a4716626394b52d2922dad9dcf64e938b3b1300e2f66b83bfded2ff65b073681f32bd3fa47d581bac061187ca6ed4ace2a7f657908f081faedeb0fd8b580abd1fcaac92be96ab92828ccccb23a1aba18e68a78bbb97ea31628fb7588f2043f924165a914dd40eb929a70b1286406c689542b678bdbc26820d585ce3367debd5e30fa90ad8183df3e2171880a8f99f9c19ba970caa43016ba912706042f18203caf0b523d051304f733cac24b6928b8aebac116783dd736bbdfbd3758bebb2f45c246fb4495844f0946c834bb061851f67d80aee66daaeabe4716515504103eeeadce660d3c62c5f29a23a3918b1eebd82c96ae463369b64d51ff58a31ff49553d386c781dfd7cd10083578ea6524aa8d114e18f161573423f4319bbf4393d7eef97adc79dccb5fb69f16cdc528ee84428d8d6b273fd2a02dc6c9ac1c48595ebcf07b395af9861d04b3acecc156de9deaad6032ffe2fb7e30600ca3d10892575721e11c42881353b451b5f4b3e5cc7764309c2814b517d9370ff6035fca392182aaa9f92d582278bb1a2e4da1e7a9bfef2e5fd3f7be827020d5419c54dbd0ab4939ea86327f9cfe04808b2b249a6f43829d92c500f058e7b9825bf7eb67a336324a282f94df923858f271a8b169030d6812945b120c1fa95a0434d2ff5c25074c35f73530b19fd0e20f24767d357cd193c898f48f6cf8de3771291c8d5f7ce585cb7a81c042bcd9741943514a50a2bd93d41ec0b61df1351da4b9f7482e00b89e2ac8b068b8f23cf13f23bde0a8360e5599ed2fd77981d3af83dc22df356405ac1a5098a6159314a4515e0da1bd9aff845183a762784019ae29574f5157907815b7ebb4bcbefc7bef24d4a4c2ba018f2181219de0495294559c8815fd65c4090e7b52bff47b01d1e6f3e554d55cf4c0db20992b3ebe0a081dd74bba21163e156d43bef995252784ca4a876b094211838ee0dbc6e6b09e669fea0bc37f3b53b8277984489f23a44bab4877b564051d2b1cceb953f26451b790f425\",\n        \"signing_randomness\": \"462b16bc86adeb9fca4d688d3298bdb6c23308deda13db56ef4752cd2774b067\",\n        \"sha3_256_hash_of_signature\": \"1794c7cb70571c3c09314226b2e95903ccea275a576e4a3d13a2dd17e1dd19fd\"\n    },\n    {\n        \"key_generation_seed\": \"c80a982462aba0725bc5378eb795d16d43451aba9949fc14a48c74374c3d110c\",\n        \"sha3_256_hash_of_verification_key\": \"a7c1646f5960af731908416292190dc962291ffedd3961fe01e30c0cf21b0cd6\",\n        \"sha3_256_hash_of_signing_key\": \"400dd7b466f6f65c890cbf962c65a7b700c0705f5e4a7186a24ab31895c1bac4\",\n        \"message\": \"53c25e805f07c1227f6690bde84ede7cdc87de9d658e5495492c3301cdde62dd91c42b1a2ea9914db96b3096f88da72b054850638cdbef82ac51db5267bf6468008c481571dcd2c0690f223e9f3846addb4f29579695acf4aebec92816ef71230188219d896416aeabbad6b85ef7b042ec2611d0c27e4c8c41bb88aeb6eb3308f4699cdeabcddb29d537e639b624b52cd73374e211b7ba3725b44ef361cc37474e7b379d7fcccec05687eb1a508842fdc02e4997d1e748102802cec3775325b50dc139517a24c186a215728fc46101b73416d48f8b1fb3dc261f123e6ba6fa7cfef35e2d2267052eb3963360b031d7ccfe6723870ca5e5fb43d23631a4311882a7e0a36e37f55a885b440caf397b9e0cac2b6525311fc3be705f69059b9e214a6da404e1962bfa87f2b0a7730a703d10b38f1eae0f84c150cf2189c5af378b04d35eebf6aa4d693c75eb78f4de605e0959f72db562b36ae771143b2df6998dd0b2a29527090b182f7bc573438f225e9e662b811cd7f64aee449a35de59e5cf98e931b05969a7c215ba9f4818ba8577ed6a94c78253d415fcc86019d17faaf9df680e0a5e77b8dc57be8b291232f1623da5370bdf5083333259c9645307390c0e1bd8bde7b36021407ba3ae9f2748ec0dbe2b0fd347887d2a70b893aa085553aacd141141406a7e7917499ad8c239e9c3a1806709a7adc53d39bfcdfa38f6cb9bbadd722da681e39a9675eb9851c2b0532daa3bce406ffa9f8c4ed858b6a39b278ebda2f91075081068d1d411204a6db03c17b801231030b9c5c0bdfede80fd2210299f8d030b1e8074ce5c56a9362fade5476a73597fd52bebba9f1ed3cc105926a3b22bfb08a8d357f3a8536ca1c9683492ad7853e9ecb0bc4f5583d1aa2bf792998c4b7318b431c35aa35259586d4182b0368fe53185f8dd7035fb879366a7280a710ba0df12302be166f64da1c8bcc1f605e0b562946c4977041d8e433503d662748a062c51a89c8bfd439697fdf7c9d1edb14bd5723f227ad172e7a2f8f504368700804d44b9fb112ce6a3ac67539ba09c544619e7ac57468e176d40e57e6ea2fb36eb22febe58dc9d7c44c0aa0012d3abeed1a61e9948e56a7be27572b1e8b7da440279a4798ebbe8d469409eaf4b4b2f9ea6e8f32c993796ee178425c43cb55c7e2c56baae71f82fe88c72f45391ca3c80c71e794cd4e8ce91b4dab249bea2f785146fee8a9ba6ee12414ea2e185abdb3bc4c453a5506d78d30ffd48dd986c296f3512438bdb9ae7edbf696efade6018e51906f615141aaa7d50d7b47256e81ac8115a8b05a649492f291c281d58d1cb2a07e29a800ea2104e36ef938e27b35bc4e1cbafdd6cdc287025ec4c5a906105524309c8e113882b87797b28a172651e1e3f08374dced91c63590b54ea5be4b9f186d6fdb088281b9fe426ffaf44817e04536493ed2f139c84b4c7f5cc67b2d5735d8e3d0a80c5f453a8a4510134aba33492077ade3b77cefbb1e84f05df36db32589e52a1d84c547e6f6379478fdfdd62106354d86fd6ee5dee531c6705756eda0359d733b3e1c1dda00a34f22e97e9c9112896748654a9462157b4c91009fd75fbc130833f399a3d59599a9e873d266e2d5d467df005983b6f9634c1f248b976729be598b0d9223980993cf538bbec5ddd002b19afb46a8c92bf001a7dabf1d523acf35aa3be993fe5b31e93a5ba1689a79d54ffcdf0b332ac05166da25d9fbe694aa6888ab224d5c68c913ba028955e0e23e4b1df57444e0c7b89a9c135aae3d4bf9fab6f4c14dcf527482e4a04a0a579deca7521c6d4d8263a189cd619124ab32be1531491f11ba1b0396797fb399b407f088a890bc86e6f0c3a63386b2991b44f46bda0b338963d33c9cacb14372a9db5345cbbe5bd8099dd5f189939f39ff5aebdd92d02a4a7c43cb1d0de227fe718704ceb1ed8788a2e970ee26d2bb62e52793a8ce5741eee8cfd15ad05e836834781156c6e0baf137f54320bf144406eb64ad6e031ced4eb87fdc28b120e5ee37c508ad594064bb8c74db25433f1651034ff9e978440ed1918814d5bfa2dd6f5dc5b0f143e3eaa0b855bed9138be55b53021e29ea2d8914b20fb1fe35f6c69f9218348e84bf07b3db94ceb43422d4bb6abc652f51ee09fb0fdc2f45ffa6f046171883b823f2ae55f18ec1d815cc6b6e43497b6ef99ce23381560f0d7c1ad4a89ef54a05b20a84e3e97d094a6ecfa8a27e26bad35d0f640159af6acbbfbb2c4098cbcfa478d68fa4e8f81beace5fc4582d3c32cc24e11adf992237047ae2978cf2699830934b0c47934d00f1f3d4f12c8fc624c4be90c55e4eb4db5fe5dd68d9d912092ba6897503ebd6f3219e4ff79431802f885b1996aec72f7fdcaea90a50d384c031318f583f9c3ccd953a6fc301416ee96513ef0b3a39a3554027fa0cba053198070ad7283da2d51b4a3b275ada58e9e83ed49002ef529382cb96d1ec6f5734550b7c6fbadc4da59c685bf939236caad03f6820ec2f652e939c75afae23275e29c8bae221ada675b3d271d112a43af0bd43f6a9e0465fbdb9574a707176340b0dcf8b5fda7f8f14baf5c6c215eab963764d113e1185a79ba456b93f425591777fe6e8f366790824c0db240d909bad58993948d325a045b2b1071ca0b67457a21ab0c61844ad8fa132105fb19242156ad893cb6b6f7eb8b88af9e323b2709b29112bb5213aedd675989bf9244f4d056e873ea36dfecccbed5e6b60405b9f9753d3d3485e340b5351f3ec538084fd496a72989408e99c031e9150030f53815ff6b17be5b9f8430582fb02687fe08cd553be8cba32fdd01891785a2dc7bb7d8befd7ba812078e3ed726124f44f896ed417aabae6a0dcae6841d03b3a68194f87dad7e4c4938a84e05f3a776a5ee7259ec36e1d90e4be331ac6ed806e8fd74c4bee07f0f97e73d326a51cda9b32bf2ae564d4d59f2911f13d05d37eaa01354f4a1f549c062327da0106bc121703b6c6c2af1670156aa9d234c015fce6ca32f20b909c759fd744757301e9bafb993482f9971571e5b974faadd28c69cefee66eebefd39285eec1c479426b701e78493b118183af6ca706e2a40861d489abc414683b5050bff45bbe75bea688fa45a91ef16f7034f74c11be84fd91974de4285c84bdda044f829810fd611e3a3adb72777cc26cc5ef992331ec0378f33484d89c647b9cf8097251b04cd3a72829785f680bffa2a9f1cfe711f471003a960f6e2855a23507974e72eb3f613a65de9851563660138e59cd30646ffc5e112924d4ee174366e7b4825d25b56afa98418d9c5f5378d8550e238ee7a1cb20e277786a1dd01b7e40cd5f62d64fbf5271ac12e362065faad2182ffbd425bd6276499322231eb6d6e57a9eca4ad0f78dd479fdbf2c4b09bc0e29705ac12ce69e810d572fb9c159bf02436188afc6a645f8f6e0bd26db76316edc2ff7835ae1b972fd42cb80bdd19c5bc926292caa1ef4a083facd0724d17deb492891aef62b6a0338e64a170e5af77492e823988a206370c73d6132132bb709fcf206355e557ed6461bd2259763337d78b32fda2e5a05e9501dcbaacab73d4372ef84c868e9eb9b0370d3d9014720c51fb3b6ada79de57f233d9caa3943bd162de2631ecaaeee2fd92e3895eee1efe725aaaa0e9988e7b954270249c4cf6ae2d0be8bee7634484f7c79e41e870393e63d8644347c7f9d9e2ae422d8996c44bf53aa847a098037c7649822af288a12ee36bc66e5597dc5caac0ca8a7928c535f5b59ed1cdc9bd1c7b60731cfb7ce8774f994ce1fec23a37e2f1c4865a1ab529ec802bc5f58e41f4ebcd5e95baac53323d3cf8cf95cec9b8dc688b9a2a89ed279509bb51bf69aa71ef1cc2eb8bc8f4fff0ad20c7852e7e526387167f63667ad39579e25b9d643881c2cf773a8e693d4090f77bccf3d08013c59ffe522088fb48e623650b870a3a05f582a1cb84e1de3dafcfa49543808b36623c80779b6f51ca8305b44d8b24cb7cd1e77f2ff2a593554477164c486df79904e6c277092c273b5ec0133e47e53542c38abf341281dbce046f3a8cba5dc96b2257463d115387a392cb78cbe05561dde0abe86f940789ec514bfe8fb9073bf231365ceed5ef92aede7c05fcc0723284d7a68db1cf69b17e01eab08cdf1ec5ae8e9d5c099932a8592db493088c4a83fc432b64b3e46474a7d32ac3e24bf440b26519ca2fac62fb0ebb60f18b658dac5ab5f3475bdc9dbba70b8c710193250209fae3a89abff4c818176f69655b21b9a08e03bfb0bad2173908c750f638c222d053fc60e0fba7043b0db89016830205ec55d1c59ad2dde1f41de188bbbefb5d507286e31c277afed99796265493ce2210997da4f2f8b0baf0baa0b0bd3da85d806e9766dfd75b711142ab18a81b41b0371057d794a32daaacc50e976d1b4a1f0da4a8b453982d69e54c638174eb3c6dda70\",\n        \"signing_randomness\": \"5d05c00ab3c11f77990d49166b98b7080537d87c040c4ed8985749627959335e\",\n        \"sha3_256_hash_of_signature\": \"175c7d89e35391a6f07adb6a317caab572a17824515191ad53e8f953dcf27c78\"\n    },\n    {\n        \"key_generation_seed\": \"01105f9386bf55a9197b20fc3fe263422602ac6aa1e1de49c25f42a25614cded\",\n        \"sha3_256_hash_of_verification_key\": \"92511fe6354fdacfc2c2bad1b32245116b58b27b9f4519247fb71aec0d6b7ee0\",\n        \"sha3_256_hash_of_signing_key\": \"31d762aa9ab2fa7a82f787809e86f46fea34539735924ef21a71165e00c26e83\",\n        \"message\": \"1d21816871d7fe7d18b9a574424497964ef602643a138749e3003db59856a32538390617ef9482de4ae355c0b6c4f39109e7135730f422919c4a2f87796191f819f5c027cb6fb7ca58ccffd0d2923767fd98031ff3148b9d97c63b7ab1a692e967af51ab1f956333efd9096c642fb7b591d6cfe5d11d856081a604f4017e46983c93f26b43362147996a9fd9bc35f0fb5abc7ce479f7217336f9731632e91d94ebf283deb8cefaad936c0261626c838c4ae035af39d6675bc571fa17ae4db4838fe1c18930fa6ca0da1d38cdfb68b0382d36eb9d15f421b7de92426e406a4389aec24462f7e0f3c37deed16122fc4e67c526c6cd3f9e977576663a0935ca22687b46b47cd4e73b636e6a2e9e5e46a62b9cfa17d5cd43739f80e17ba544f2cdef68232076e7e8f4a1634cc4b7cdb8296445baf8a6ff8c47f9ec4ffe3477992e5208566fc49c14532bf488c4dbe277972d9c7875ce42e032490bbc02b4814e20184b4568e09ba2b8e74362d9036fb734a49b53ddc0384033342426f4c4fd570d268a9d4223619e53b2cd0f934150bcf95cf1203feb86866b7763f44b0c3a14d8ac19940f21291b2f318cd3441bcd9ceb62e901656a1258ce738821322e60a3c7c74776606b1e8661710c9bcd8e2be470ab14a275db81dad6f253e39dfe8f81ee127d47054fa8d16cc9a7cbdc2d7cd587bb300aee7ff3a1a752087e48498074fb5dc32eb91018930a41cacf9bc09a3d568f148258b85c5e4e2146645563deb9bfb2333d739bbbfcc6f6e49c3bad638ccad2ec9fbc40864e01313783b05317fdabe27140b23aace78b5cca7b0d4c4fb5a85bfae83ef156f07d2fb2000d304fefd32b8056983b823f84eab60100e2c40ae5d17f7adaac782b73467e11d2dcb0d64af3763965591fcc9dfeb58912b9edcdbfb7d3e2dd8a28533b6599686de472a1a1ea6640b1e722749f625c63e3b3793fcab5604871792edb494ab96d015a15fcdb0ce04b3a9af46831f7795ebca97e56d451f91793856540a3117ddd78f0f13a7ce87e4266bec9fdce07e5ba8f157cdb2d812178f921858a8fe1c508bc98d5656735a68060a46bb10e7f26b7a2207aa945536eb99e6db43ce9bf3187f48b19687acb8c04dfca837494a1bb3b18bf062a67990e7ff557c6e3b4ee6b4e7256a525ec251e906aa6a4a9fe507352c5e1c7f21a6b74803d3ba888fd0e2527c06b3373d422c3bfe330ba0874bef6daf78de2b880216825aaf5d5f3c7ac2a17c87ad37c983b4eeb580d905bd6a8be783eecda2d33fb0517db3a2caaa2725a7af017034b629ee525ec92aade4dd37e6306ea6d02e882917c502334c7cea004abe886d54b0380225b1f71a3c2c891cfe2cc4028c4a1a1007c326909c488aa70126a9aacbe48327b47491da3f45f744d5b96e5ee98982867a66082c7d8322201ec4a8cf854f26f669134055c4751827b7a55c2ad0db5a42613428ee4ce1a149aaf7610e85cd4bfeb5763e29222cf2e69dff932d5bf92cf61c14da0c8bdfbbc604b4e4ab89a967eee08e5dee3a5006618c3e181915f5f321031ded20fe5b0889cf943910e14020d054d030939ebc18b2791fdb97a3da85630f552debc0a3112b381e57918e5b3f9797cb8cec93a8b19d21dd65e56881a2265657283befb0f237a37788f5a658faa5e6df93cf3b834e6eb903838cb6595888b19f84af7130c720121e94284ebd8dc6928f6ffab1a51d28f787c22f3c03aed9331c70f7f3ebfc8a2ff604be1582232b7fd4c1a26d73797e6f7918acd31f89df7733f377b99fc8070615ef19c02bcdbdf9d4ea75172ffaabf88712a826f5966f7ca4cc7fc914c38538283d2b1fe9b11ff031206323471aeec1db8527f0b0f92074a6797fe594a5bdd6e54685ce68fe54c8cb682de552c6a8b1a2dc5ecab401bdd15552e860f9cbdc4eb496bd85dcd50c383e086831eb8fecf99c194171ee6f6778b98653b3ce134cb5dd1af9646237ecac7108916966b91facea0ff8d50867b12ef90aeb1813abb7ad534cde38ffb9ecdb36306bc94931b935425dfaed2222847bb3bec46439f05cbf9530fdbd7483ca7ce1989ee9e6c8751778593f7d1e21e18e5a9772735ed31cab199d2fbee508884bfaca54af0c0b8029cbe33c3c8595c36c43cb462a3ecff32f2b1d8cbd5af489e57b4ba29e290d014cc8ccaa29faa80f81676ddbbfca6058548e8cdb194bdd5aba7a50e155092cea40d31901c4d0395da2e4f8e83aff3b3c493200d2106e81317b8b99be044eb0f0211046034a737b87aa8486fc551264a5e132708420f960b28dbd634a716a25a84349786f82584e679d2489256a4b3fb5896ea67b6b133f0334cbb8dd8b9f8be2c005a193837c911097fb658591c6543826d725cbb2c2240fe4611758f05cc373d052d6f9ea81bfa42d6eb71f6082d0d417002faf875a0b6da7b55f6ed5941461952c37606ba705428959c214379e8f0195d4549e088fd210309945919754e8fb33795ab46ede41e9a29d0a21cbb2d2a30a4e68c51c580cd14dad9b29b626a701e9a17ccae5f2d089862f72f37b079dd9dd3831551b84120f2aebca418a592aecae996e749a7f0f8ea7cb754709f24576695b49e89fe2458f5a39eae44e0f0d74cfb5e28607b09c3aa16b1dcf4bc5dda0564f88183eb304f5a3d656e4abf8e9b5df726a66f8a06f1c173cbdcaeef4e1da0ef24dbd765ecb0e49e83e011feeed4b0b4b21c04b3afce94ddfeb54550115721f856e872cf23692111798025d4949dac19b07c9c94a0cb7dbff8a96c2d3d6dd068cbbd83e75dbc0077689efec6ce12b69b291593aa6cd3f95ad009baf7ad25624f70f5e91f770a0746904cbaaec806911ef48e92e2eb87448dc05d99a25575787d07dff725e38f15a4dc1dfdcfc4b9ad5812bf2b9203a21c12f25f7a2f7a4551926ee34e7932d8713560bf470e39210ab6cdae2387aaf073194ab549f10113f56d26456c53496cc6171d17fe3b1293e3f3941d69e64e0821a93c8f3e9c29a72648eec62ab29a30e8c562ca45a23ab945eadd651f3e34bc7b4e2af04708dac5c221672e940b9c42c0fa2bf53574a2dea0fc55f525453d6fb007a2adf84ad2f90d2a572f05a4e6560255a390db1ef90f651df7783715507a5a763fb8e062194c9d87ec02266aeb3a124cba88f1861847666b61ea82472e094be76e053504bc84a0d15281b2090f224edb6567025ab9debb61429d4745a62705a8cdb9189fd63dadf293e088ca4000a2a28c157f77a02c69475639f7eb6bad44a722fb858a7e4c34d6bf75d906b020e5b624e7c48b7b565e38510b92c0a9367c6e3bdd38c45e549d53949d3e1e81102049567e7a2f823534463c3755e646998fc8bb0c1b018fea7ddc019c7f41106fe1a94fe5001ae881202e5b7bf7e7ebbc17c73c8d9a686c4dd28f92b04a47ec858ac7ced7634c4889f30840e28747d7242e5a39a82906991cc10d4e4fbf4bbb9a9175911978e7ee54318b384d9a72f7f36ab6811fb49fc501fb838597e9d73c249eec1d266de2606ec86afc2b7359640767014e94e34721ebec1ae52533a6f06dcf99e396724c600aab9ef3ce68e5d1b1acbd6145c1bb94ea276e84dc5176c6d0744fa732bb240f058796fe3a7d6b98202da169a2f02afc90f47ced73e0bb098471673444cfe89d595107503702e0163368e05b10ebe3cd7929a680708103d71ff691d05d57e766cd0dd16394db3c796bf73271d165a27d1f8d4f991c4482864a2be4b621799b3bf8c76fd7cfd268666a86cb5eef89e90768132885c5e562b7743ec2bd057fb79af0a51fef892dc8348ae869e7073ca7aeee4fefcd533f2b22d560567fe870979d5179c9a612c475615953ef509796f1e47beab7776ae5a8f40db29f10befb1c6c215cd961b613252900ccf0d2da456752bbeff18d6283a23788fa4b5b9a595e07e78f761569e5ff15cbf0413cb2a313801a81e734c64368238543a03d16a143c670599e5c0bac07abc91c3ed7b3fb18e9f7e26c4080bd7861b9baa33412c882fd44bfe7b8480a4bfe1f17bed6286bc2fad76ae738b931b8a93cfa638dfedfe2a231fdbef8fa9fe60172c705e1ac7244ed29ed1506827cd7d13be4fa09877edba690cacefcdfd5282c9f560de9b91ed49df2358a8dc52ab0b00e53eaaa940d8f3de25c90ef6b0f790ba3f8dfc6479d95d6420795bacfa70a3713141bb381d731350a0c646c3134b7352f7fc925c612936f140d6b89bd3ac3f41b45d85204a7902fbb0b4d1c58a104a266eeca29163a8234c7a2f9ec5eaf5933350f75264194fa5ad335c0b33d15cb52bb4a31d29e366618e2b218a214a64d3492273f323606b39b6b4ac6d26d330f2047f676c3b5925430c94f05dd397eb6079db0c0499700b00c4f60d3982da5b414a8199748d5a519ad9c494fd8732300fc4b8a1e31fbcf93b51bd92025049447b21281334b2b0031fb80f940de6520c2987c04d4f7c67bfe48a387a5fb03d2fc6ff4fa90409326aa3a380f546e3c228aa93260\",\n        \"signing_randomness\": \"2f28d120444fb1efbde01b8863ad51a2bc093e83d06af3853dff79cc150df697\",\n        \"sha3_256_hash_of_signature\": \"4c0385fd161c83d3c35c44f1a0b313e66cb0dd7c7440f1b6bf4541cc14502ee0\"\n    },\n    {\n        \"key_generation_seed\": \"5a1ca9183e5825f80a6a55cc4590feb7cd7ba2cd698a03a784419ab8173ecc98\",\n        \"sha3_256_hash_of_verification_key\": \"8ec8f6fbe48759fb03beab4149fe8b3de3af5f13503e0f0f05a16b2519344550\",\n        \"sha3_256_hash_of_signing_key\": \"1d6a79d8e9dcef8c31a5425e0797fb5603699144eee7df550d4f9b15757347f8\",\n        \"message\": \"11a1fa5b0bba9b3d4e062f3f2c81e49aae93b0513553520e56b80996ca11665e06b1c2be887274c8404bff439afb0404b7e1c4b2cdd813cec83a73b93eec91e67f37d30cfa24adb7a7d2b595522114e26e31de732a12edd5f869b4dc7d8d77978ca1240d498b9cb9fb13898b89341dcdd6b082b5d02508a091db03c7f77d5ee3b53353dfaa1cf08610ef5bc0a31f9b25ab9092aa1da58be8e57c55796f1ca26df893016f601228413022540e394eaf1f893c4190c5b44a0d36062e95d1fc7f3bbf2a03b0fc302cc85dc8588d382d8abbe1c0112130e7792af66a65d6f68b7d08f269892b53227394f4cc8bacb3a63eba1b6514802c767607f6d4c67b27bf9431a4af42528276e90c5361c3160623fdadb2b020082b2d89f043d528c4fc0c92c32d18186b7a1b71b0a62cf649cd4e3b30c4487b4186a08854aa8593db6e627e6d0b89f79a275f7b10c97fc57213cd27eb6a3f22f40ccb0fb09dea423d33d19de9ac87705030952245fb1222f5999ec570dc326c232b446933cbce8029ddd2fa52aa049cd8817e430438eeb14c3acc06d2175ea303159cfc95a6aadce4c0af4c378ef2242cbfaa2e7bfc7c6e5409a20e277e0e7e8de06e1f976d43fdf5a34df33819ce1cdec602806c585a718fe8688f93aba2065336daa2251dfd7ce476b58afaa1e2f659040fda9914c3cc70c6ec0f58d0de476fa85bdf16e2e6e09b91ad6daced6f5020d44185c82619caf3dcfbb617eac933b8bcb1ddb5ac53a0d4fbbefaee5170486f9e8a8c144760a4480982528c8b35418ea227985df764b0ca7c2090e974e27bfb84fec2b334602b94fa1293ed82ed99ac2a6b61129d37a80965c49c0d5d4e4594002afa2ac4452e95a7eb367560110465356199f13582e30bdaaa92e3163ef030fdfe26e370ae5249ee5ca362640d86f592f9b5be7b4f6005e43fd497e5d652dcd0c61e255608fb4ccf59e72ba823cbb3339eb29aa28d52b5ad9f271ab3aa794a475c513a8742c34700a3ae1d7658678fc0d1eb57acb699c0b8ec37d8fd9aab3c0ac1485ebb1243566e5fa20c92c55a339a2bce1332841d694104fa4385158270af0faf38bac13d92b4b6f3e39aeb2700a331fed7cf22390f5d00932254a4a17346c5f95b8f1085d712b1660dd587641b3b1c06ba71ba60518edf1281937cea1452d54c582a2e216c4b166a9f10d44f16820a243c120730063c45b1286f47168f48863c8daf82d2a97a16ef56e25066727968ff7c5df93e6576c874f156958aa156d0f3110c0e57c3b02d4c276e0347cf43b1e9213d16c944560c1d0241240d2a730b5ac939ad940733d38ff11ea9fe5b28468543e0838802c4a03d6c5bb4e0bb252e86e799516b18e27735e7f6c18b6c54eb0ff9e00a511a689c4b1a74546d3410b354bb6987e2356634b14a9ee3432ccee8ade67f15075e65ecbdb8f56e985287106542398f4f6cfa2cd0ee577aea6493264e3e1779b78884cf2195a686fae6fd67fd3df75504367f6032a68c454b428a7c4292bb070f298b373bfcfbea9305e101a85dc8c5892f8d9b81564a023d06e4edcae2f1a8ee455b9b89057bded440ba78a9b3a396213d1e34a2c8d8be8dde44efe5419911c8724661b1ef79537ec2e22cdc1a3b13e8cba7266d02271143a2a98b1c2a88408f962de76195b2cda33b44ee84ce30f882c0b857a44d7bfc715f7ab147a3fd34a5d0c641e3a811ffbb8773123e2db76204b57b7a74f9fcf34cf8cd79ac3d63b6a02919f756d9c1a0b57360108880c2c81319552e5bb3115f35fa91f068c369c0536f3f9d187e77e87d8aeb87b75f3f9a27af9844929f990498959672f0598bc738ccf933aeb039d4e79597fca386652c9299de15cb77964674fa5d7bba1c7548d62ce43c9eedcecaa68fad7b7d7fd2d3dddf080525d069ca543495b565394849f6434ac0e07c8c4b7ec6523f78d27d3bc42c9d19afd276ef68654a24ba51fa576448757e647156e673ea1e119f1fa4622e762f8ec7f5542ca67c800079194a9a2510ccabd8738e63aad802fa4ba9e270989f1e61954eaf50ca9669906b815c46e5c7a5ea9e318cfc56e616ae2b75dd8494e49c3c25b876ad5eff97093f8522db88b6a14d2d363d5fccb6fd27608ff70e4b08a770d0f9d086b651b304011c256cb18cd8e25450dd438a050246b5c2d1529701933a8a49f70e67b2e2129360e308f9a7ebf02079f0905c0b38a1df75b119c81f4cda57902a723966709cb3cefe0d4a2fa8ffd9fb6d53d7041c4b651cbd3fe2d85768064ff2ec020ee425209802ab05f64d7438f6916872d9a5e15568e0a266a1ed98d9ae573ac50a119da2eabad39ad2c2de5b5b2853021816bcbf0063beed0fbf813548091a68e8abb3edb0680a4c7b9d904ead1694f3cdf7ff0eb1d13a78feee1efaf67a80b2bd8dd2e7bad465344ceb646c89012d954f93fca164ef24ce0e26c837e7222f29a06e962e43bfcf85e090f85626dc5741916a93b6b82adbe137acd4b6e4c9016c3baeca07bcc3980786c4b295ff2788769d942a459b9be6864314a526bde3b14a0d73189ad66eed0d771b33f632c06c90ee2b45ee2842ae18b40ac81471c1d719430eaf1528128b264c67f52d776d9519d755979b9fa5936e8a830f9e8816e434eed3392ffa247f87bca7b5656a784121f8729c9057abf68f4bb78301e209929de74698684d4c2b0fe71e3ce383cbe334b4c4bc0bd8a99e92594c5d25a132fc898a5b6acc8294dd0a43767513e11f44ab439277a448d34c1a883d867597332cbc4084891275020a9adee5c613210a81c41d36d33551d1f7db9004f8d66230f2d6d77f64f7eb3357231958da074c1e4be6e7d8af5911181aef740b7892bcd134706e57336ab119a0d76d9f6fb733d4bb61892f8a9c36c8d46b48fee7c5f453e356c679b998a417e66f748996b2680ddb3b9e4c1538841459a85b339cd59b6e5c92dabc272c742ae8872a0ea86fea272739b8f45e42c50a3bf6a896743948c4d224387a8e2366ce5887d978a4a2ac40f34ff7dc8ff4cc7e41d6bf9281dfab2df31039aee188e8d8f110f9a7462d07fe363f0228f22cfceaaa7bd83deb8abeccfb963d63517edaa3cee701364bd8b7c2c4613b723bb772a2d801fccffe6afd95acd1ab9c522b8dec8efa11378aeb72a081cdbe2eb1aea1f225f54e37b52c2eea71b939e0299a8ac48d094727fab440306dad089729d354187dc76e9d00db402803b73e1652730d55f24d1ccfa7458afa8482e0e5e6f4423aba6bbcedb1294cd30c30df72a4038c5bdc52bc7d40b9319f492a4d4032dde1130a24cdc60bb6c0790e961bcbc68f536cb35994ca668fe8fa368e9dca43904edd304752c62b4aca17798439a124708dcba52eaa2b869fe27e160a6068586cffdaea9df0d6f309b84a90d53b6b7ae7aab7e64d96d8ffe67d2e54a1386be75b2dbda6b7cb84ac67a2dc9f70df1f913ee71ca15b58240f887f49a02ee6f5e11e33ebf55b0ad62a3bca3b69756a6786159b128f510fe9a882171d5236b4534118feedc6d083c59959273bf8d6e34f928e0935c3094122a60b852594d7e587fdaa781715d4f691d3651634f060c5a1a52df515d38a5cbeb66ee17630fa82e50b4e9bffcd795f18cc9d30371ed16d6fe5aa109bf2faecd13b4d1ff99c42567d3bfc1c3f4fc88b51d38b271444202ed05e55a7fc952fd8d1884943ad0af311d0912e735854f877ca658d2907ae5e9852cefd009421a225862cbdbe7e98e4207820615e5232ac82f2a09d54ecd18c9eed17dfb443f5e58a9afca3bc11f3ab613175e8f464e6226d3baa1a122cb0cd15d731689e01b83651ff1477b8537e85d580f312e17e6cf18cf23b7ce4ae08c0995dcb60ea156503f57090cd17ded38a1440acd47c3bfc933102285fb3495d1c2a733b8c4858956a51e52483d04fbaafc45b50b7cffbe6a636c7915e33ea7d2cdf3106504202f28acf277c39c4f5afdaa8651b90474b59927ebcc23a75c0c5549f86012f02bcb439adcfeb17729b481cd4110c233d1bb632709f806d57a4213b86cc95e621d28bff0cafaed629e1dbf4796c1138b5484fecc498191a46feda2d8e70b75191d669faa4974179f5def7e096ec26e324d83267b5040d1cdd2707e5b2918ee04cfd367f5620062cd5c7d8509ddbe26aa8c2abfa74a858084ca7a4286d0904be21e2c930b762ab39566e823d7089dd42b09402d39cf4507bff1d2f3294ea4a43082678e7acb7c74a456ae536fee9f455312d0c4bbc82f170f61bfa4aa7c2353640428c0bb275993f0e3265555bbfa8110c93c22328ec9244f04a23912dc9cf4fdbcd2614ce38aa98930788d271aaa3b46f0e7725b040b09bddfc9b84d5add5c20795af1e526cceba763e02a992b3a1049865762664972882839470a0d7ab462e6639d440bdc9b4ae75c654a3735008ce4328964256ef420881ce804c7323d1e1677e24444cdc852bec87c905b239825de3aac2611fda2d3da473cd857e6dfb65d02b643a9400d1aabbba3edd0f59b0ab6ba97a88ec93b9eaba86c97886f681de7b51c1e3504adcaba12dc9\",\n        \"signing_randomness\": \"f6a555d41f8761a99820a45fe871d44a4ef5a754d0ca6404c0911dcec4bc696a\",\n        \"sha3_256_hash_of_signature\": \"7bd833a554fb7e2787d3de6a8b409ed24f387633699d938d30212d482cf32e34\"\n    },\n    {\n        \"key_generation_seed\": \"505b966c2c6e99e1c67609aa33f4bc810f1aefe787f97a31c6ccb12766c2d8a5\",\n        \"sha3_256_hash_of_verification_key\": \"a0160dd9b1b8c37dbb1cc06967726911412b85691aeaa8de773647cfce2622e1\",\n        \"sha3_256_hash_of_signing_key\": \"ca6e8e614423dc0d3e9229d8709a6e2a4efaab314ac502c3f8b45dfa29c8a481\",\n        \"message\": \"4f468ae1c77a5f4acfc98f434cc2decf48467af1f9ad4d3594d41700100b7ee3dd6f745fd2cf236329cfeb8ab44bb9a6bfe030aac73b708e9618d3ae0ad857a31eb4bbf0b55f51dec94f83fa22052c66c4d5f5bb28f7e44da8cdfa9ab29e3ac0056c1d8237a464797da1ee59f0dfc79f85e215ecab67e26ccf55b1f824b74f2153ba567a942317c2d222b9a7ef2adc50a0f10e39ba05fa9910084fcdc79439ae95b0f0ac02f350034fb8550a6665f95a0a24a40588550a039bfe744ce264a2e1e2dd9f72f10351d783801d5d1c6a65768464c591bf91b0d1c9e725565ffe9cc9992869a544416428a05c0202e1cd5103f366c910699e87518a5679e790f86158471e6369f2e19ce36df27c4dc7e16c603be393821132d46b6e9884e7ad35d259125f58e8381effe9afa53ddba9a5461b2117928f354b1560e42f7d539832893bfaa5e162f96a87aa36e147128695f74313c286a5ebb1db2018efb094f1b2c563a1b017f5b2c42b8856716e14fa33fd5051f634d85a1fa25d2b738f8370f1fb8122344faa05403cb5d24bc3aed427cb28ecb4416512cbb1ab866dda6140220460f2d15afdd86da5c301509ea468d00b3cf470328398a5aefe5e4ddd7fe9ff2f0dc9677470295a91d813de87b14435c63b55bbe9ba91c75f1f1dc2af10bdd2d07d913a373538877f7443f1f62ef554b967a01fe61943701a911f73b3d6137de9a37cb542b950d1a9f91f96b563b3e8dd4b6ecbf9c9b5d2f98b0489feca227dd6078bef3f7f3d28fc9df1912c00b326b19f11d149bf22baecd1abd7ab057ed012493129cc9ae2a15ebc5deb6ee5e7ffce2fe5dff2cea5f8817015e0f8bf30c73efa1d5cc16e2a9bc1bf62bc85d9d55886f024ff5e6253f6d1fcb828ec40b474a505134677a9422764b8fda2b505b282e9df6fd0d71899224f1060765c1e06adb7437f2b786bc7de6c4561b8830f3cec14215737b7e87ddc3049d81be2abcb929edee9e8ed8ab995c6aac29f0e5b0cb6b7c5f413dede9da6e235b270ac2a28077cb67e6298316521d5887ac4ab144844a20015fd3ef87e110a4c19e25e1d13a5d6816c0bc7caf7654fb9a7f4c9557a12c26ca61afdac4e002280394d6848ab8710a063893c31baf5b1f16bacac00c2128aa4aa47efe33339b48bbfa6c146c1ffed4fa8e8b67e02b48739f57fd0e54673e875def4a8b8a094b40513e2a82ffc0600b93ebb0eb3add390c1594060de1560d76cb9940c550216305ee7c3d2ebdd3ec444ff473cc30dbf56f95399e3978b2565c6467b2efde561782c93c056fa47b2c28b25cf3fc2ea8efd69c8dd9a6a62ab803870da149ca1a2ee4f05c6f2235e367e785040453b909ebfb3f847c4e03f71d91b2846a739548e835c6ad09a80fa235d3f0deb535390c8eb8ac78bde1428d4c2416268c2db1f7f08f37a710249afdb32ca89756cca4cfc36d10f03533c1001e79adbd8c2a1b623cfa35d07d32d39973abf8488169f7fa389f12b240b56f24209dfbc76863c7c86510c20c8d8e63f9f2035c5a7e6fecaa6efc34710cdb35c683c40194a0defaa788bb70888640b0873ed3a09facf20f359cf6196c5c3eaab9c906798f7ec030a19645e55a65b0c6d63d98757592948f4de7856b033ca4c3e535afdb6e849f96e813883be40c043d6753ce9e29d8dad1029874f2997a46858ab1ea5d01a9b4f5dfb0a9b6d2b12411eadd204bf3b06fea8fa71b6cbcd34a1dd49a805b93cc43e991c9ad2c4e10086ce24e213588de29fb1676d5ac609d4b367355fd0b697e275f9b65ea2f8109e7a50f466ec9b837c46583eeec395c6bfc3b6ddcd38474c47585b2bbc941a45f0f32df5e226b5aa7eda4267385a5b12e7ee23b7085be57a95bf5bf2fc64b5339714634f267884d16407efdd188348de076eed6030fd79e5dfb003182b50f4abbb923065796025e089b7eb8d8bb35b8df426b00a54a09e7af25139498ef175262c80aa1401ceb51fa9228cdab8b75a816e85252358dccf43e3a45fe56399743cd5a576d0668818a164a59131fc38623d6167c4658690bd3b38f539686b2be9d310d3dd579f6df03c2ea9a757f37950edb54dfd7ff4df6fc5bb4c9307b3364e0f3f0285a8b42c305a552a350311009de0a75ff771f4a12c28af600b6964e4e81102bd4c70fe6572fbb7bfd5bb6c8efcfa665a566b55239e635d6b95d03dfeafaf8b97ee4d75e8e73413dfc7754f0ed5570c6df9cd367877cdc561bcd61f0437659c90ce43f06dd320e75244141bd8a3a8959bea893851e3397ed1932ee1534747ce94d8ff9c4b375fccc092e354af08d94aa719999769e32a0cdd29aeebe6f3ce4cd208c98969295bbf5bfde9984b1bf33f7b5c284d600d1de236cd22ef977809152e238bd011082b0442b255a09ccdd8ce60112af44f68592645a2f9c3a88e8b357138bf3045ba7a5d7bfa560683c0458626f62237530fe94293018ccc44f00141ae65b537a7e888a9643267e58415d8a373ed218718cf301a1b74c3e5b8a9a10217f650e56f5220622f52286ea05b37728e6977d67da4c4c8b2ab298a4912722c1997ecb747d9fbe44ffab8f10a17b75526627fbbf64049c3d95d8aee582bede2e4084f6846ec6cede6e899371465fde4f98564367b33b97ef709f9693007739e0343d8583db89b8bdf2987e59366725a1750e18caa437e28ef904dbfab931976dbad801b98988b24f311926ade064c91e7f51e0229b6ae7ce37d942564794a9028b898e9fd91a58115f7f22677132256d3a7aac17bcf0a36f0ef648a30cdf0e6c6b3a0db88742af70ef9b2887d37857688e612a66ed1c9caf7be0a7126c1b6a51840281acbe3ede2edd8c592c0b89058e6265b5b7e0cbfa830d25390cfc551d32b1cae2fdebd5fd32f580d47e0c65fb27b89500c812422173079cd790b9632130093ee56af49dda82596321ee254ea5352a087d811fc2f6b9ae043dbb7c6cb2a3d4bfc581afbac4cf8bd9eb8339dd6d837496edb2dead5d1eb9b038f7863c91e3a8e35997bc7a42370028e773b6f0051e4d9ccba2da6b2d15eefb5f04fb8ca0ad1274f0ed2d02fdd427f8cfed21790409634363347439ad3d2edfe76530bca71b8ff6f2ece1c9380c415d4832cecea15ea3d16d62faabb06554e54562346b19a0f04f59c5a8b6606a7a126c944aff318163f90427a0257a81c883d6740a27beead904e7b634298385139876c50b315567751a4b8876afd0eee0eaead934f46dc3466f4414f45f42753f80006f1cf95a70fe3c36d3fd67c4e345d4ade6e349707b318edca26aea53273a7403b2a98e6ac32dffc89ca4f4d845d4ef9e41b7f2f45631134e41343a3a83fdc40dac27a900a661ac2f132b867873736cf4f12cc62e5fb73b1113b876075ff78c044400fa9547bf5fbea52c345f6fee4b01bbbbb1bd9505e61fdb7e5c06319be4fdc88500ca8d9b82146ba0bcdccd7e4aa98f5a0439afb7aa5c609be425efc63313d9972faebcacbff076a4920e3681c3970671fdeb49727c86ddb5829ae84d19aef8ca8e43c72304c987ac186931e193c350675d4777dec99714f5fcaeff00cecef65b0bf35d4cd7576de86d6882d8228e206d77f34c8128b7793bd9cbdc5bae2b19755b8315e8979db76e761c0641da5549a44bc8f6cb97aed96ba55d32a89b85af7a3bafaded20320d00bc785f4fea89beed01e0186974430e5eb94c0854ac7dd830e44a1e1e40679526fd9cc3d5819a153f07b835babbbaf9d188fb2816b026b2e4f18ebcc398b5d627d2b5c84ee59b2d1ee108840e8f911b558300592c45307273610476d5da1d400d6f3adede2d8f0fc6c74b1046b2878e12d5a25228058337b1d537b9e059863a997b8a1a821e8786052063a343edaaab2a801d4a1691b1298d444498c05fd59cb8a922c5ed6eddfeb526997367a16bcd58fd34e131873a675a3174748bd25ea52a72ed7083f35e596d8349e03e38deba5994502dec5a0bc7ef8d2ac99dc6251d67acc13d914c498b98301df635d4b04e06ed87436232922010cdc39c4e3fcf0d22f3d37b9bcc04925cad0c1c502a523855a55f6557c0b16405f654b1b51f22db67be130340be2e5344aea4a2387f3edb2393328e94fd600a6347f9cb7ec0ac04bb20b422b73f5c44df19ca55f0ae52312631fc3a0f06a21fea586738f6986ba4e4e805fb7f2cf9642b1f67016c8e5b776046a38550644089f9c07d767d47b4eea0ef02774e5b4dde11572709e9ac96f94183ffc7e725fd5a7f1986516e8bc1e7686926f9ce999a5a39c068ba1cf790dbd6afd15f7502a75c6a14b0634e949a849ae1e71698a7f151202e99f6a575f94206441c92420c6138561a2785ffd1cf5203f2db4a5b23eef604fe6f934140a33089d9407a0a6dfc4244e9bc51e0bd1a1c13347f52197f6ac8d99ccc02873ee7f69e43d9c865d11826a1a0bd7290b24f1f3b594ac433d379a30249a6ed4cc1b967f8439fb711b471ba97ca85f5a755155fa64117a64f0de4bd59723115083cdafc9731d969948dce5a972dbeca93ea4a7fed7b797b468ac59c70701bba8a73ea706e358d9098fcc0e871b07ece2367cb019db80e572a47f04bbf8e180bed90b8f086e587b\",\n        \"signing_randomness\": \"056c36ca36eebd38b163722118ca2898e8851540af8a3b8a488734850a998da0\",\n        \"sha3_256_hash_of_signature\": \"1bedc4c5f68e6899438c3b7918ec7dbe939ede5f961336ed65aae4e3b4fed2b6\"\n    },\n    {\n        \"key_generation_seed\": \"29d61476dc801e4ced3df52e62334d6f1757f86666612ebec27f16aef185f47d\",\n        \"sha3_256_hash_of_verification_key\": \"b693214ba4833e6663b37158d0007048cb475b26761b2f12ee703428ae3dbb28\",\n        \"sha3_256_hash_of_signing_key\": \"e8dabca00a15d5103293325ef19465b8ace5a78e38c17dad78b44fa90876da1d\",\n        \"message\": \"71c2daf708aa23b25bec28e2c5fe4cb49fa15dcb219c22de5c9987af5ed07317753e6e1b939364ebdff5e9bb4bd43001dd03af76c13a862c2b97f24dbec0b33c87b18ed4e48c66645a98a959715a295c9df8c92d04dfbed43e01fce008578f04540798b0bcd96e94b2d13f798eb60fce9794ad94c13b3137837ffeface45cc357585a48897bf97ce3ecf3ce25b38078f39b6132dbce7e56c6e64dbc9d34bcaf0664b1e7f9d1f36843719a72cbe0de7549461227d4971ea408a41e80943c4cad435536e091c941f1f6ef395850ba4f84dd8f1b219f84e8102cf151b8f379012bdb288d8671e2b5d6d2bb936507b25d98537474890c836f04378492276aeefc7a06b24d483638a289ed8b1a5b394b8723654c7c38118ec35f0a777bb229aa3b0e6eb6e1b86fad9253fd427c2b0dbe5a3988d771429525362d484b1d01733250f29106e6f98bbcbaf3826f2e01c0d7e42947417d742f24447efb2ae1f443e251ab107645781b6fe78d44e246d2ff8a25a4e969be129ca09e54ebaad8857323b38cb7647ef18e154add3358f713a1897c6563fdd491576a84a8246ab0fe021b02705b5d14c72ff84708ddcd5cdd5c3c7eb3c8f42512692e98ba38682f5ac0ecda77db7ec3fc15f3d69d7863317bdfd2bc55f5cea979e6d133d1e30aeab1fb5085b3efff6049216a52f2adba6b9ad19533fd7d729a82004e3811589383136d308f5f3782fafad81de4db1b471ebf0026a684dc7561d81489e1f61aa1c6efb94cb9951208b2e92d119328abacf32d1c242dca5af995d56075d5735e14a265f7c82f561a01925682f8cc5281d31f86ace6e649d849928023ddd0c1873142ea38da03239cb266e6ff58783b2150421b9a4c9c0148f35ef1eb8dac9e93ec989a23de2f261ebe8a7e04aa29870d41da79799e200fe1b32d3569e8e395cf6f294002bbc5eb5bc8863494ebe2e31fb8cdc4bc7f93bf83c1fa9c6e2a452a399f52d755ff3c6be60b7e3946b7c070b1067caab395fa0e976af091fd02799de87fdc07ab23ce7cd78854811cfe22db9a2d8500acba5307c6440cb5f511b81105fa017f158ab8272ce6bb3f94e8e3859439fc5792c46db5d5691ae3f7b57372fedc404b450ce1b47a464eed0e0988f171d3978fa211d6d898cd305289bd2aa35e9e1825d5678431bd9925acf2275bcc5a7a6d0723a2c97d443ccba161bfddb33ef9df39a5790564d280beb8dbcfc15e572c0d458891c510b62e3b4c34aac1acd693d40a1ef7ee7c8b675a7dcf70246fc9b0548ba4cdbe3500f49d693f6096e24cb17afefdfbd36c354f07c6675c80815f673f642da548c85ec00de11cd8084c7f7b5b543c1b20f2784b549959273e6dfe84bef1b65ad97b4413087ba14ecf7ede210a6acc634bf513e7fac66fef2e6b8c9350d948b9d61c946c080e367e76f9e2909a9aaf4806a018b8c608a5c46c0c4c233d31a90554c3ea39b5e944de0491b15f15550f927f82d33fce2ec6d127ca98c4a98ac17f21b23fb144da0cd5df54c03328ba3af39a58d7e468e40c2e54aad10fae4969d1131ce14336815a5cd87ad65d036dd5b13b5955afee4540c675a58cc2f9a8f3a058f94d08ac55c87bdaf3487e753050ead156369b1286c0f4dbf9ddf204a7d782e88010e1dc49b03785ecd1aed1676f6ad64aef2408f66c6641b1fc17efc058d5de6b1247f28dd3bb2fee977cdd87313b36f285361d3a14304e726016a9b4946e24917067d474d58a72f9c02d2fe0996ae56f5b6d8ba44355c46833c1ffb41a4a6a7cd7e471088a86942966a971f885ef6f1c0dff1170a353ea2acc90f80925d67e1785cac2a9173b8dc9860ffec8b27cd28cc263eb18771c6b45044c17644ec46407df7c4b133179876e55906aff5ff762020f9756b0a22dd4207769ae6d8088c7e49c0f48f519d96c01ef53e69b5829a341bb7e486f2110d0844ceb8bd60265d71529080cfbc506e2c89cbddb4d501e14f43c5496be1ae3067fa417ea77f594b03665e5c82da2fa03e4b35c2c59094dfcc2f3ffe68de590acdebfc50869838f826c6fa1ed6f0dd762a3431e0762b5909cc8103327f181674576db5b8bd14c5460663da2eafd55ce0cc2090cb0695ca387bed0dead5eecc5af3b2b3320b52ae53ea226682319167cd1606bcdb70c609de29059baf6c0abbe9d1020a0b86e3c9e026dfa2ddbba2db43eb59cba3add29809d072e3addef2e6b3beaa6490efeaf33d27708cb1429e7f3b1928c86ee50924d4dde2d1ad8fcca1fb3df5be01b9ee85d8761f453c3b85552402459d95acb95b7f585edc92af998b5db9e872763a26bfc798caf7634ee3991d3cd0b352c433e69cd94e86e5564ee2601fe6c031a3c3d9b93e91b3a6af71226f9bd89d9e41a667b1ffe6a54b9c517a0662ed46b5fb3f95c3d01a255e023e6b35d214ba9bf1d0134f4b2e2956fd21ff91c35a8e1256d1d533dc49e4dbcb99a1580ce0e09862700285b6fc6a08978ef4ebf2d6a795a92aaec4f2c5de9e64e447357fa43297b05987736ed9932e02216ae5f45b5eb3dd012e8a1c43624c46f6da9fd537d1a27e40bfed8b658159d77bbea0c3ca2f4bc1d6b892481fae82d0040b3b43d1b2e2ca55c7472610064aa3f3e3d22685fc09907131c4f7d6b11922b42bbee0d96a5df4ccb1a02043baa25ccf1a50818fe62e379dfdd9affe1bbacaf85df226c1c9f017b778b0ea2dd8daf0e6f3ff28289c0d91c7bcf034589cdc6502754a6c8329e9a6c82eff6a358bf841b286c33680f512dd5790862010d742c8910fc950765ace9ec493074a639d4681e217f5cc7549930ef6ede4d1bf6801561458eff4606cfb510c5bcf603d334d7397db8c0b3b63d8690aac2693f207a925e7f2383b55d66dda2023f92f11e4f6be9884a71016c7da626f2d594a6713ff67acf5adf9cc30548e6748d4a1f385f3bda39591c6bc35da6e7a4bf3effe6813db998b2656d7300c71ad1131a00d4328d02e8929f212722e5791facbd9b77839cfd78b483ba32447a36be03fbbbcd2ff7c069c8164af068975b34899d7da76fe56bcd05eee926a88d9d478bf1f4573569d7031547e6ea02665bff89425786ce96281da956a15106e0545b771b4af29e499d835f926cd8bf305586002a74cf1d89ebc9c8ff13ed96fc8aba1c896c550d868fb8e64c8e880820b28c5a69e8985bf119e88208234db87ec2918e5b9ae2c4341095bad8b43fe536eb0ba3f272b73b584e65cde1c83dad192470e90029f1e136f93a66026bde19d56fc87c5cc638e573ce3ce4da419b264e829b587ef9df11c5b29db6ad0365ea62637834c850a68a2d7762915e70c9b61c05860696580393c8362b8f647bd950e3f671b97879476264f86f11ba8239123368c8c16b2296701aa2ad3e63edb41e32f564f77eb21164f3b2199276f38f38f1816c6f263a3b2d3cbc8883e548b178ab3bd1f1efab82ccff7a451d1701ef60779380dfa1bb70229bffacc473037b1d965d8a27d3262a2ed2563e3d1679cc895f0212e53bc4ddc37ec0773b5096aa214087f5df5f082efeb77c3c572f38d1cd535d9745e88c59484d0b9cd1fb1b4b2966175ec66e24bbfd05ab21357b2576f782a4e0593313b254b89c08237329c932c33aa84a43ad4c8edc3e95cebf5bc1fab426c4ca503ea0a21a185967686fff98c1591a1b98c218133191d0e822941a9291cd9aa5e1b545128c9f8b9167c979dd7a87731cf3a852fbb97ccd3e36fad09fadfb3136698a7a4b1a0152e3e2177be873f9d13d8a0451c016875d61ef08bceef206102344f8f71d2f082e66bda25a553a1727643b7a2c4bb3909104967a1ebacdb5f20bbb8f12cbdafdd2d7412101192deea61c81493fc65ff9047aed319fd3b56e5d0f367999eda4a7bed60b002d960f8a0b70665e5c5f56a13770b85e701d8c9e5c9b43a5aff7b1ad9c8a54c062c60fa5192f9d1474ae7d444d97fb4dd11ceae784e327ed6bda9f00f1268b0f83b6af4e786ff6bec29554eeebc80d93ef663b007616f8abbf83b7ffd14d6da387b124a1052fab829b8dc2744147ea7bc3fe5f3384927cd12ee6db3d6e4d2f677dc32eb5a61fc1660843cf7b17f8f0eb43bd35974d73225eec10492da529bc76b08c7131dc5832aedd1703fbf037946623df71ced3f6caecea9dc4a639998eeab2e5e1925ace42c49007c090146eb91316fb130c120b2cf739bad7b061e17203a464577a171932b0c4dd7dd258d1b653ccc8090422f6b493a470fc7a7da37b55a59bedfed8182b5dd638d2a9aed7e6390dcec8cf825cebd2d571bf024b005921de1b5e4bd42675b7efa44edf6b7f565aecd0c72eeace9c7e374c277a380163ec96d6829546bce94b73f3b64fa658edfa1c6e0152d5b1a71de26cd8839519d809ba29ea20ceef1337b5fab42ecbed05ad5e695316f5cc85e458cc726f4801394b94f05b0961859c5264c535f55cb4d872baa755cadf2ae48360e2732755e5de0385ac822f91628db181a324fe151e359e37e26ec64a709bad8b5cb5e9a74a01eb4f5039163f678dd1a4cb3727f599fe9cacf11f01911a68568b82e86542e3aa490119b29ecf49128e150ca41982e43538ede18af747080e70f098353eee178c6e23c837a84d2a0608f4360a0c48d38149f4b379b617d2fb4ef7149735e\",\n        \"signing_randomness\": \"31399b0e5640f0e42d5689f41ee99007e2bb2c5efeabea7df83b65319b5ec13b\",\n        \"sha3_256_hash_of_signature\": \"fef7971339606fbd58bf65fefdc58a7d9f9e4f3afd784cda166c21171e28e381\"\n    }\n]"
  },
  {
    "path": "test/libcrux-ml-kem/CMakeLists.txt",
    "content": "# cmake -B build -G \"Ninja Multi-Config\"\n# cmake --build build\n# # For release (benchmarks)\n# cmake --build build --config Release\n\ncmake_minimum_required(VERSION 3.10..4.0)\n\nproject(libcrux-ml-kem\n    VERSION 0.1.0\n    LANGUAGES C CXX\n)\n\nset(CMAKE_C_STANDARD 11)\nset(CMAKE_CXX_STANDARD 20)\nset(CMAKE_OSX_ARCHITECTURES \"x86_64\")\n\nif(NOT MSVC)\n    # TODO: Clean up\n    add_compile_options(\n        -Wall\n\n        # -Wextra\n        # -pedantic\n        # -Wconversion\n        # -Wsign-conversion\n        $<$<CONFIG:DEBUG>:-g>\n        $<$<CONFIG:DEBUG>:-Og>\n        $<$<CONFIG:RELEASE>:-g>\n        $<$<CONFIG:RELEASE>:-O3>\n    )\nendif(NOT MSVC)\n\nset(CMAKE_COLOR_DIAGNOSTICS \"ON\")\n\nset(EURYDICE_ROOT \"../..\")\nset(OUT_DIR \"../../out/test-libcrux-ml-kem\")\n\n# For LSP-based editors\nset(CMAKE_EXPORT_COMPILE_COMMANDS 1)\ninclude_directories(\n    ${PROJECT_SOURCE_DIR}\n    ${PROJECT_SOURCE_DIR}/intrinsics\n    ${OUT_DIR}\n    ${OUT_DIR}/internal\n    ${EURYDICE_ROOT}/include\n    ${EURYDICE_ROOT}/karamel/include\n)\nfile(GLOB SOURCES\n    ${OUT_DIR}/libcrux_core.c\n    ${OUT_DIR}/libcrux_platform.c\n    ${OUT_DIR}/libcrux_sha3_portable.c\n    ${OUT_DIR}/libcrux_mlkem512.c\n    ${OUT_DIR}/libcrux_mlkem768.c\n    ${OUT_DIR}/libcrux_mlkem1024.c\n    ${OUT_DIR}/libcrux_mlkem_portable.c\n    ${OUT_DIR}/libcrux_mlkem512_portable.c\n    ${OUT_DIR}/libcrux_mlkem768_portable.c\n    ${OUT_DIR}/libcrux_mlkem1024_portable.c\n)\nfile(GLOB SOURCES_vec128\n    ${OUT_DIR}/libcrux_mlkem_neon.c\n    ${OUT_DIR}/libcrux_mlkem512_neon.c\n    ${OUT_DIR}/libcrux_mlkem768_neon.c\n    ${OUT_DIR}/libcrux_mlkem1024_neon.c\n    ${OUT_DIR}/libcrux_sha3_neon.c\n)\nfile(GLOB SOURCES_vec256\n    ${OUT_DIR}/libcrux_mlkem_avx2.c\n    ${OUT_DIR}/libcrux_mlkem512_avx2.c\n    ${OUT_DIR}/libcrux_mlkem768_avx2.c\n    ${OUT_DIR}/libcrux_mlkem1024_avx2.c\n    ${OUT_DIR}/libcrux_sha3_avx2.c\n)\n\nif(${CMAKE_SYSTEM_NAME} MATCHES Linux)\n    add_compile_options(\n        -fPIC\n    )\nendif(${CMAKE_SYSTEM_NAME} MATCHES Linux)\n\n# if(${CMAKE_SYSTEM_NAME} MATCHES Linux AND CMAKE_BUILD_TYPE MATCHES \"Release\")\n#     add_compile_options(\n#         -flto\n#     )\n#     add_link_options(-flto)\n# endif(${CMAKE_SYSTEM_NAME} MATCHES Linux AND CMAKE_BUILD_TYPE MATCHES \"Release\")\n\nadd_library(ml_kem SHARED ${SOURCES})\nadd_library(ml_kem_static STATIC ${SOURCES})\n\n# This is only for local testing and we assume avx2 on x64.\nif(CMAKE_SYSTEM_PROCESSOR MATCHES \"x86_64|amd64|AMD64\")\n    message(STATUS \"Detected an x64 architecture\")\n    add_compile_definitions(LIBCRUX_X64)\n\n    add_library(ml_kem_vec256 OBJECT ${SOURCES_vec256})\n    target_sources(ml_kem_static PRIVATE $<TARGET_OBJECTS:ml_kem_vec256>)\n    target_sources(ml_kem PRIVATE $<TARGET_OBJECTS:ml_kem_vec256>)\n\n    if(NOT MSVC)\n        target_compile_options(ml_kem_vec256 PRIVATE\n            -mavx\n            -mavx2\n        )\n    endif(NOT MSVC)\nendif()\n\n# This is only for local testing and we assume neon on arm64.\nif(CMAKE_SYSTEM_PROCESSOR MATCHES \"aarch64|arm64|arm64v8\" AND DEFINED ENV{LIBCRUX_NEON})\n    message(STATUS \"Detected an arm64 architecture\")\n    add_compile_definitions(LIBCRUX_AARCH64)\n\n    add_library(ml_kem_vec128 OBJECT ${SOURCES_vec128})\n    target_sources(ml_kem_static PRIVATE $<TARGET_OBJECTS:ml_kem_vec128>)\n    target_sources(ml_kem PRIVATE $<TARGET_OBJECTS:ml_kem_vec128>)\nendif()\n\n# --- Tests\nif(DEFINED ENV{LIBCRUX_UNPACKED})\n    add_compile_definitions(LIBCRUX_UNPACKED)\nendif(DEFINED ENV{LIBCRUX_UNPACKED})\n\n# Get gtests\ninclude(FetchContent)\nFetchContent_Declare(googletest\n    GIT_REPOSITORY https://github.com/google/googletest.git\n    GIT_TAG v1.17.0\n)\n\n# For Windows: Prevent overriding the parent project's compiler/linker settings\nset(gtest_force_shared_crt ON CACHE BOOL \"\" FORCE)\nFetchContent_MakeAvailable(googletest)\n\n# Get nlohmann json\nFetchContent_Declare(json\n    GIT_REPOSITORY https://github.com/nlohmann/json.git\n    GIT_TAG v3.11.3\n)\nFetchContent_MakeAvailable(json)\n\nadd_executable(ml_kem_test\n    ${PROJECT_SOURCE_DIR}/tests/mlkem768.cc\n)\ntarget_link_libraries(ml_kem_test PRIVATE\n    ml_kem_static\n    gtest_main\n    nlohmann_json::nlohmann_json\n)\n\nadd_executable(sha3_test\n    ${PROJECT_SOURCE_DIR}/tests/sha3.cc\n)\ntarget_link_libraries(sha3_test PRIVATE\n    ml_kem_static\n    gtest_main\n    nlohmann_json::nlohmann_json\n)\n\n# --- Benchmarks\nif(DEFINED ENV{LIBCRUX_BENCHMARKS})\n    FetchContent_Declare(benchmark\n        GIT_REPOSITORY https://github.com/google/benchmark.git\n        GIT_TAG v1.9.2\n    )\n    FetchContent_MakeAvailable(benchmark)\n\n    add_executable(ml_kem_bench\n        ${PROJECT_SOURCE_DIR}/benches/mlkem768.cc\n    )\n    target_link_libraries(ml_kem_bench PRIVATE\n        ml_kem_static\n        benchmark::benchmark\n    )\n\n    if(DEFINED ENV{SYMCRYPT_PATH})\n        message(\"Symcrypt path: $ENV{SYMCRYPT_PATH}\")\n        add_compile_definitions(LIBCRUX_SYMCRYPT)\n        target_include_directories(ml_kem_bench PRIVATE $ENV{SYMCRYPT_PATH})\n        target_link_directories(ml_kem_bench PRIVATE $ENV{SYMCRYPT_PATH}/bin/lib)\n        target_link_libraries(ml_kem_bench PRIVATE symcrypt)\n    endif(DEFINED ENV{SYMCRYPT_PATH})\n\n    add_executable(ml_kem_keygen\n        ${PROJECT_SOURCE_DIR}/benches/mlkem768_keygen.cc\n    )\n    target_link_libraries(ml_kem_keygen PRIVATE\n        ml_kem_static\n        benchmark::benchmark\n    )\n\n    add_executable(ml_kem_encaps\n        ${PROJECT_SOURCE_DIR}/benches/mlkem768_encaps.cc\n    )\n    target_link_libraries(ml_kem_encaps PRIVATE\n        ml_kem_static\n        benchmark::benchmark\n    )\n\n    if(NOT MSVC)\n        # We benchmark internal functions here that are inlined and thus not available\n        # in MSVC.\n        add_executable(sha3_bench\n            ${PROJECT_SOURCE_DIR}/benches/sha3.cc\n        )\n        target_link_libraries(sha3_bench PRIVATE\n            ml_kem_static\n            benchmark::benchmark\n        )\n    endif(NOT MSVC)\nendif(DEFINED ENV{LIBCRUX_BENCHMARKS})\n"
  },
  {
    "path": "test/libcrux-ml-kem/c.yaml",
    "content": "files:\n  # INTRINSICS\n\n  - name: libcrux_intrinsics_neon\n    library: true\n    inline_static: true\n    api:\n      - [libcrux_intrinsics, arm64]\n\n  - name: libcrux_intrinsics_avx2\n    library: true\n    inline_static: true\n    api:\n      - [libcrux_intrinsics, avx2]\n\n  # SHA3 (no mention of libcrux_mlkem in this section, please)\n\n  # Keep the per-target seperation idea: each SHA3 variant in its own file\n  - name: libcrux_sha3_neon\n    api:\n      - [libcrux_sha3, neon, \"*\"]\n    private:\n      # When patterns is the only key of private, it is optional, and one may\n      # just specify a list of patterns that are understood to match patterns\n      # (not monomorphizations)\n      patterns:\n        - [libcrux_sha3, neon, \"*\"]\n        - [libcrux_sha3, simd, arm64, \"*\"]\n        - [libcrux_sha3, generic_keccak, simd128, \"*\"]\n      monomorphizations_of:\n        - [libcrux_sha3, neon, \"*\"]\n        - [libcrux_sha3, simd, arm64, \"*\"]\n        - [libcrux_sha3, generic_keccak, simd128, \"*\"]\n      monomorphizations_using:\n        - [libcrux_sha3, neon, \"*\"]\n        - [libcrux_sha3, simd, arm64, \"*\"]\n        - [libcrux_sha3, generic_keccak, simd128, \"*\"]\n      monomorphizations_exact:\n        - [libcrux_sha3, generic_keccak, \"KeccakState_fc\"]\n    include_in_h:\n      - '\"intrinsics/libcrux_intrinsics_arm64.h\"'\n\n  - name: libcrux_sha3_avx2\n    api:\n      - [libcrux_sha3, avx2, \"*\"]\n    private:\n      patterns:\n        - [libcrux_sha3, avx2, \"*\"]\n        - [libcrux_sha3, simd, avx2, \"*\"]\n        - [libcrux_sha3, generic_keccak, simd256, \"*\"]\n      monomorphizations_of:\n        - [libcrux_sha3, avx2, \"*\"]\n        - [libcrux_sha3, simd, avx2, \"*\"]\n        - [libcrux_sha3, generic_keccak, simd256, \"*\"]\n      monomorphizations_using:\n        - [libcrux_sha3, avx2, \"*\"]\n        - [libcrux_sha3, simd, avx2, \"*\"]\n        - [libcrux_sha3, generic_keccak, simd256, \"*\"]\n      monomorphizations_exact:\n        - [libcrux_sha3, generic_keccak, KeccakState_7d]\n        - [Eurydice, arr_c40]\n        - [Eurydice, arr_50]\n    include_in_h:\n      - '\"intrinsics/libcrux_intrinsics_avx2.h\"'\n\n  # Portable SHA3\n  - name: libcrux_sha3_portable\n    api:\n      patterns:\n        - [libcrux_sha3, \"*\"]\n        - [libcrux_sha3, simd, portable, \"*\"]\n        - [libcrux_sha3, generic_keccak, portable, \"*\"]\n        - [libcrux_sha3, portable, \"*\"]\n        - [libcrux_sha3, generic_keccak, \"*\"]\n        - [libcrux_sha3, traits, \"*\"]\n        - [libcrux_sha3, generic_keccak, xof, \"*\"] # xof is only portable for now\n      monomorphizations_of:\n        - [libcrux_sha3, simd, portable, \"*\"]\n        - [libcrux_sha3, generic_keccak, portable, \"*\"]\n        - [libcrux_sha3, generic_keccak, \"*\"]\n        - [libcrux_sha3, traits, \"*\"]\n        - [libcrux_sha3, portable, \"*\"]\n        - [libcrux_sha3, generic_keccak, xof, \"*\"]\n      monomorphizations_using:\n        - [libcrux_sha3, simd, portable, \"*\"]\n        - [libcrux_sha3, generic_keccak, portable, \"*\"]\n        - [libcrux_sha3, generic_keccak, \"*\"]\n        - [libcrux_sha3, traits, \"*\"]\n        - [libcrux_sha3, portable, \"*\"]\n        - [libcrux_sha3, generic_keccak, xof, \"*\"]\n\n  # Public API header for SHA3\n  - name: libcrux_sha3\n    inline_static: true\n    api:\n      exact:\n        - [libcrux_sha3, hash]\n        - [libcrux_sha3, sha224]\n        - [libcrux_sha3, sha256]\n        - [libcrux_sha3, sha384]\n        - [libcrux_sha3, sha512]\n        - [libcrux_sha3, keccakx1]\n        - [libcrux_sha3, shake128]\n        - [libcrux_sha3, shake256]\n        - [libcrux_sha3, shake128_ema]\n        - [libcrux_sha3, shake256_ema]\n        - [libcrux_sha3, sha224_ema]\n        - [libcrux_sha3, sha256_ema]\n        - [libcrux_sha3, sha384_ema]\n        - [libcrux_sha3, sha512_ema]\n        - [libcrux_sha3, portable, sha224]\n        - [libcrux_sha3, portable, sha256]\n        - [libcrux_sha3, portable, sha384]\n        - [libcrux_sha3, portable, sha512]\n        - [libcrux_sha3, portable, keccakx1]\n        - [libcrux_sha3, portable, shake128]\n        - [libcrux_sha3, portable, shake256]\n\n  # Common parts of SHA3 (this catches stuff that hasn't matched above). Must\n  # come after the (more precise) patterns above concerning platform-specific hash_functions\n  - name: libcrux_sha3_internal\n    internal:\n      patterns:\n        - [libcrux_sha3, \"*\"]\n      monomorphizations_of:\n        - [libcrux_sha3, \"*\"]\n      monomorphizations_using:\n        - [libcrux_sha3, \"*\"]\n    inline_static: true\n\n  # MLKEM: HASH FUNCTIONS (as used by mlkem)\n\n  - name: libcrux_mlkem_neon\n    api:\n      - [libcrux_ml_kem, vector, neon, \"*\"]\n      - [libcrux_ml_kem, hash_functions, neon, \"*\"]\n    private:\n      monomorphizations_using:\n        - [libcrux_ml_kem, vector, neon, \"*\"]\n        - [libcrux_ml_kem, hash_functions, neon, \"*\"]\n      monomorphizations_of:\n        - [libcrux_ml_kem, vector, neon, \"*\"]\n        - [libcrux_ml_kem, hash_functions, neon, \"*\"]\n    include_in_h:\n      - '\"intrinsics/libcrux_intrinsics_arm64.h\"'\n\n  - name: libcrux_mlkem_avx2\n    api:\n      - [libcrux_ml_kem, vector, avx2, \"*\"]\n      - [libcrux_ml_kem, hash_functions, avx2, \"*\"]\n    private:\n      monomorphizations_using:\n        - [libcrux_ml_kem, vector, avx2, \"*\"]\n        - [libcrux_ml_kem, hash_functions, avx2, \"*\"]\n      monomorphizations_of:\n        - [libcrux_ml_kem, vector, avx2, \"*\"]\n        - [libcrux_ml_kem, hash_functions, avx2, \"*\"]\n    include_in_h:\n      - '\"intrinsics/libcrux_intrinsics_avx2.h\"'\n\n  # This covers slightly more than the two bundles above, but this greatly\n  # simplifies our lives.\n  - name: libcrux_mlkem_portable\n    api:\n      - [libcrux_ml_kem, vector, \"*\"]\n      - [libcrux_ml_kem, hash_functions, portable, \"*\"]\n    private:\n      patterns:\n        - [ libcrux_ml_kem, polynomial, \"*\" ]\n      monomorphizations_using:\n        - [ libcrux_ml_kem, polynomial, \"*\" ]\n        - [ libcrux_ml_kem, vector, \"*\"]\n        - [ libcrux_ml_kem, hash_functions, portable, \"*\"]\n      monomorphizations_of:\n        - [ libcrux_ml_kem, polynomial, \"*\" ]\n        - [ libcrux_ml_kem, vector, \"*\"]\n        - [ libcrux_ml_kem, hash_functions, portable, \"*\"]\n\n  # MLKEM: MISC NON-ARCHITECTURE SPECIFIC HEADERS\n  - name: libcrux_core\n    private:\n      monomorphizations_of:\n        - [ Eurydice, \"*\" ]\n        - [ core, \"*\"]\n        - [ libcrux_secrets, \"*\"]\n        - [ libcrux_ml_kem, types, \"*\"]\n        - [ libcrux_ml_kem, constant_time_ops, \"*\"]\n        - [ libcrux_ml_kem, utils, \"*\" ]\n      monomorphizations_using:\n        - [ Eurydice, \"*\" ]\n        - [ libcrux_ml_kem, types, \"*\"]\n      patterns:\n        - [ core, \"*\"]\n        - [ libcrux_secrets, \"*\"]\n        - [ libcrux_ml_kem, types ]\n        - [ libcrux_ml_kem, constants ]\n        - [ libcrux_ml_kem, constant_time_ops, \"*\"]\n        - [ libcrux_ml_kem, utils, \"*\" ]\n    api:\n      - [Eurydice, \"*\"]\n\n  # MLKEM-512\n\n  - name: libcrux_mlkem512_avx2\n    api:\n      - [libcrux_ml_kem, mlkem512, avx2]\n    internal:\n      - [libcrux_ml_kem, mlkem512, avx2, unpacked]\n\n  - name: libcrux_mlkem512_neon\n    api:\n      - [libcrux_ml_kem, mlkem512, neon]\n    internal:\n      - [libcrux_ml_kem, mlkem512, neon, unpacked]\n\n  - name: libcrux_mlkem512_portable\n    api:\n      - [libcrux_ml_kem, mlkem512, portable]\n    internal:\n      - [libcrux_ml_kem, mlkem512, portable, unpacked]\n\n  # This one contains common definitions like types, etc.\n  - name: libcrux_mlkem512\n    api:\n      - [libcrux_ml_kem, mlkem512]\n\n  # MLKEM-768\n\n  - name: libcrux_mlkem768_avx2\n    api:\n      - [libcrux_ml_kem, mlkem768, avx2]\n    internal:\n      - [libcrux_ml_kem, mlkem768, avx2, unpacked]\n\n  - name: libcrux_mlkem768_neon\n    api:\n      - [libcrux_ml_kem, mlkem768, neon]\n    internal:\n      - [libcrux_ml_kem, mlkem768, neon, unpacked]\n\n  - name: libcrux_mlkem768_portable\n    api:\n      - [libcrux_ml_kem, mlkem768, portable]\n    internal:\n      - [libcrux_ml_kem, mlkem768, portable, unpacked]\n\n  # This one contains common definitions like types, etc.\n  - name: libcrux_mlkem768\n    api:\n      - [libcrux_ml_kem, mlkem768]\n\n  # MLKEM-1024\n\n  - name: libcrux_mlkem1024_avx2\n    api:\n      - [libcrux_ml_kem, mlkem1024, avx2]\n    internal:\n      - [libcrux_ml_kem, mlkem1024, avx2, unpacked]\n\n  - name: libcrux_mlkem1024_neon\n    api:\n      - [libcrux_ml_kem, mlkem1024, neon]\n    internal:\n      - [libcrux_ml_kem, mlkem1024, neon, unpacked]\n\n  - name: libcrux_mlkem1024_portable\n    api:\n      - [libcrux_ml_kem, mlkem1024, portable]\n    internal:\n      - [libcrux_ml_kem, mlkem1024, portable, unpacked]\n\n  # This one contains common definitions like types, etc.\n  - name: libcrux_mlkem1024\n    api:\n      - [libcrux_ml_kem, mlkem1024]\n\n  # We let monomorphization insert things at the right place in each one of the\n  # 9 variants above. Helpers that have not been assigned into any of the\n  # individual libcrux_mlkemXXX files end up in a catch-all.\n  - name: libcrux_mlkem_common\n    private:\n      - [libcrux_ml_kem, \"*\"]\n    inline_static: true\n\nnaming:\n  skip_prefix:\n    - [ core, core_arch, arm_shared, neon ]\n    - [ core, core_arch, x86 ]\n    - [libcrux_intrinsics, arm64]\n    - [libcrux_intrinsics, avx2]\n"
  },
  {
    "path": "test/libcrux-ml-kem/intrinsics/libcrux_intrinsics_avx2.h",
    "content": "/*\n  This file was generated by KaRaMeL <https://github.com/FStarLang/karamel>\n  KaRaMeL invocation:\n  /nix/store/c9m211bm84ncjmaxx27ki9dymd4qkwm2-ocaml4.14.1-eurydice-dirty/eurydice\n  --config ../c.yaml ../../libcrux_ml_kem.llbc F* version: <unknown> KaRaMeL\n  version: <unknown>\n */\n\n#ifndef __libcrux_intrinsics_avx2_H\n#define __libcrux_intrinsics_avx2_H\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#include \"eurydice_glue.h\"\n#include \"immintrin.h\"\n\ntypedef __m128i core_core_arch_x86___m128i;\ntypedef __m256i core_core_arch_x86___m256i;\n\n// Cast and Convert\n\nstatic inline core_core_arch_x86___m128i mm256_castsi256_si128(\n    core_core_arch_x86___m256i a) {\n  return _mm256_castsi256_si128(a);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_cvtepi16_epi32(\n    core_core_arch_x86___m128i a) {\n  return _mm256_cvtepi16_epi32(a);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_castsi128_si256(\n    core_core_arch_x86___m128i a) {\n  return _mm256_castsi128_si256(a);\n}\n\n// Initialize, Load, Store\n\nstatic inline core_core_arch_x86___m256i mm256_setzero_si256(void) {\n  return _mm256_setzero_si256();\n}\n\nstatic inline core_core_arch_x86___m256i mm256_set1_epi16(int16_t a) {\n  return _mm256_set1_epi16(a);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_set1_epi32(int32_t a) {\n  return _mm256_set1_epi32(a);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_set1_epi64x(int64_t a) {\n  return _mm256_set1_epi64x(a);\n}\n\nstatic inline core_core_arch_x86___m128i mm_set1_epi16(int16_t a) {\n  return _mm_set1_epi16(a);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_set_epi16(\n    int16_t x0, int16_t x1, int16_t x2, int16_t x3, int16_t x4, int16_t x5,\n    int16_t x6, int16_t x7, int16_t x8, int16_t x9, int16_t x10, int16_t x11,\n    int16_t x12, int16_t x13, int16_t x14, int16_t x15) {\n  return _mm256_set_epi16(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12,\n                          x13, x14, x15);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_set_epi8(\n    int8_t x0, int8_t x1, int8_t x2, int8_t x3, int8_t x4, int8_t x5, int8_t x6,\n    int8_t x7, int8_t x8, int8_t x9, int8_t x10, int8_t x11, int8_t x12,\n    int8_t x13, int8_t x14, int8_t x15, int8_t x16, int8_t x17, int8_t x18,\n    int8_t x19, int8_t x20, int8_t x21, int8_t x22, int8_t x23, int8_t x24,\n    int8_t x25, int8_t x26, int8_t x27, int8_t x28, int8_t x29, int8_t x30,\n    int8_t x31) {\n  return _mm256_set_epi8(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12,\n                         x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23,\n                         x24, x25, x26, x27, x28, x29, x30, x31);\n}\n\nstatic inline core_core_arch_x86___m128i mm_set_epi8(\n    uint8_t x0, uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4, uint8_t x5,\n    uint8_t x6, uint8_t x7, uint8_t x8, uint8_t x9, uint8_t x10, uint8_t x11,\n    uint8_t x12, uint8_t x13, uint8_t x14, uint8_t x15) {\n  return _mm_set_epi8(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12,\n                      x13, x14, x15);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_set_epi32(int32_t x0, int32_t x1,\n                                                         int32_t x2, int32_t x3,\n                                                         int32_t x4, int32_t x5,\n                                                         int32_t x6,\n                                                         int32_t x7) {\n  return _mm256_set_epi32(x0, x1, x2, x3, x4, x5, x6, x7);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_loadu_si256_i16(\n    Eurydice_borrow_slice_i16 a) {\n  return _mm256_loadu_si256((const __m256i*)a.ptr);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_loadu_si256_u8(\n    Eurydice_borrow_slice_u8 a) {\n  return _mm256_loadu_si256((const __m256i*)a.ptr);\n}\n\nstatic inline core_core_arch_x86___m128i mm_loadu_si128(Eurydice_borrow_slice_u8 a) {\n  return _mm_loadu_si128((const __m128i*)a.ptr);\n}\n\nstatic inline void mm_storeu_bytes_si128(Eurydice_mut_borrow_slice_u8 a,\n                                         core_core_arch_x86___m128i b) {\n  _mm_storeu_si128((__m128i*)a.ptr, b);\n}\n\nstatic inline void mm256_storeu_si256_i16(Eurydice_mut_borrow_slice_i16 a,\n                                          core_core_arch_x86___m256i b) {\n  _mm256_storeu_si256((__m256i*)a.ptr, b);\n}\n\nstatic inline void mm256_storeu_si256_u8(Eurydice_mut_borrow_slice_u8 a,\n                                         core_core_arch_x86___m256i b) {\n  _mm256_storeu_si256((__m256i*)a.ptr, b);\n}\n\nstatic inline void mm_storeu_si128(Eurydice_mut_borrow_slice_i16 a,\n                                   core_core_arch_x86___m128i b) {\n  _mm_storeu_si128((__m128i*)a.ptr, b);\n}\n\n// Arithmetic: Add, Sub\n\nstatic inline core_core_arch_x86___m256i mm256_add_epi16(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_add_epi16(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_add_epi32(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_add_epi32(a, b);\n}\n\nstatic inline core_core_arch_x86___m128i mm_add_epi16(\n    core_core_arch_x86___m128i a, core_core_arch_x86___m128i b) {\n  return _mm_add_epi16(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_sub_epi16(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_sub_epi16(a, b);\n}\n\nstatic inline core_core_arch_x86___m128i mm_sub_epi16(\n    core_core_arch_x86___m128i a, core_core_arch_x86___m128i b) {\n  return _mm_sub_epi16(a, b);\n}\n\n// Arithmetic: Mul low and high, Mul-Add combinations\n\nstatic inline core_core_arch_x86___m256i mm256_mullo_epi16(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_mullo_epi16(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_mulhi_epi16(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_mulhi_epi16(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_mul_epu32(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_mul_epu32(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_mullo_epi32(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_mullo_epi32(a, b);\n}\n\nstatic inline core_core_arch_x86___m128i mm_mullo_epi16(\n    core_core_arch_x86___m128i a, core_core_arch_x86___m128i b) {\n  return _mm_mullo_epi16(a, b);\n}\n\nstatic inline core_core_arch_x86___m128i mm_mulhi_epi16(\n    core_core_arch_x86___m128i a, core_core_arch_x86___m128i b) {\n  return _mm_mulhi_epi16(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_madd_epi16(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_madd_epi16(a, b);\n}\n\n// Comparison\n\nstatic inline core_core_arch_x86___m256i mm256_cmpgt_epi16(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_cmpgt_epi16(a, b);\n}\n\n// Bitwise operations\n\nstatic inline core_core_arch_x86___m256i mm256_and_si256(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_and_si256(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_andnot_si256(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_andnot_si256(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_xor_si256(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_xor_si256(a, b);\n}\n\nstatic inline int32_t mm_movemask_epi8(core_core_arch_x86___m128i a) {\n  return _mm_movemask_epi8(a);\n}\n\n// Shift operations\n#define mm256_srai_epi16(a, b, _) (_mm256_srai_epi16(b, a))\n\n#define mm256_srli_epi16(a, b, _) (_mm256_srli_epi16(b, a))\n\n#define mm256_slli_epi16(a, b, _) (_mm256_slli_epi16(b, a))\n\n#define mm256_slli_epi32(a, b, _) (_mm256_slli_epi32(b, a))\n\nstatic inline core_core_arch_x86___m256i mm256_slli_epi64_(\n    int32_t a, core_core_arch_x86___m256i b) {\n  return _mm256_slli_epi64(b, a);\n}\n\n#define mm256_slli_epi64(a, b, c) (mm256_slli_epi64_(a, b))\n\n#define mm256_srai_epi32(a, b, _) (_mm256_srai_epi32(b, a))\n\n#define mm256_srli_epi32(a, b, _) (_mm256_srli_epi32(b, a))\n\nstatic inline core_core_arch_x86___m256i mm256_sllv_epi32(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_sllv_epi32(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_srli_epi64_(\n    int32_t a, core_core_arch_x86___m256i b) {\n  return _mm256_srli_epi64(b, a);\n}\n\n#define mm256_srli_epi64(a, b, c) (mm256_srli_epi64_(a, b))\n\n// Shuffle and Vector Interleaving\n\nstatic inline core_core_arch_x86___m256i mm256_unpacklo_epi32(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_unpacklo_epi32(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_unpacklo_epi64(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_unpacklo_epi64(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_unpackhi_epi32(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_unpackhi_epi32(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_unpackhi_epi64(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_unpackhi_epi64(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_packs_epi32(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_packs_epi32(a, b);\n}\n\nstatic inline core_core_arch_x86___m128i mm_packs_epi16(\n    core_core_arch_x86___m128i a, core_core_arch_x86___m128i b) {\n  return _mm_packs_epi16(a, b);\n}\n\n#define mm256_shuffle_epi32(a, b, _) (_mm256_shuffle_epi32(b, a))\n\n#define mm256_extracti128_si256(a, b, _) (_mm256_extracti128_si256(b, a))\n\n#define mm256_permute4x64_epi64(a, b, _) (_mm256_permute4x64_epi64(b, a))\n\n#define mm256_permute2x128_si256(a, b, c, d) \\\n  (_mm256_permute2x128_si256(b, c, a))\n\n#define mm256_inserti128_si256(a, b, c, _) (_mm256_inserti128_si256(b, c, a))\n\n#define mm256_blend_epi16(a, b, c, _) (_mm256_blend_epi16(b, c, a))\n\nstatic inline core_core_arch_x86___m256i mm256_shuffle_epi8(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_shuffle_epi8(a, b);\n}\n\nstatic inline core_core_arch_x86___m256i mm256_permutevar8x32_epi32(\n    core_core_arch_x86___m256i a, core_core_arch_x86___m256i b) {\n  return _mm256_permutevar8x32_epi32(a, b);\n}\n\nstatic inline core_core_arch_x86___m128i mm_shuffle_epi8(\n    core_core_arch_x86___m128i a, core_core_arch_x86___m128i b) {\n  return _mm_shuffle_epi8(a, b);\n}\n\n#if defined(__cplusplus)\n}\n#endif\n\n#define __libcrux_intrinsics_avx2_H_DEFINED\n#endif\n"
  },
  {
    "path": "test/libcrux-ml-kem/tests/mlkem768.cc",
    "content": "/*\n *    Copyright 2023 Cryspen Sarl\n *\n *    Licensed under the Apache License, Version 2.0 or MIT.\n *    - http://www.apache.org/licenses/LICENSE-2.0\n *    - http://opensource.org/licenses/MIT\n */\n\n#include <fstream>\n#include <gtest/gtest.h>\n#include <nlohmann/json.hpp>\n\n#include \"libcrux_sha3_portable.h\"\n#include \"libcrux_mlkem768.h\"\n#include \"libcrux_mlkem768_portable.h\"\n#include \"internal/libcrux_core.h\"\n\nusing namespace std;\n\ntypedef vector<uint8_t> bytes;\n\nEurydice_borrow_slice_u8 mk_slice_u8(uint8_t *x, size_t len)\n{\n    Eurydice_borrow_slice_u8 s;\n    s.ptr = x;\n    s.meta = len;\n    return s;\n}\n\n// Not really random\nvoid generate_random(uint8_t *output, uint32_t output_len)\n{\n    for (size_t i = 0; i < output_len; i++)\n    {\n        output[i] = 13;\n    }\n}\n\nvector<uint8_t>\nfrom_hex(const string &hex)\n{\n    if (hex.length() % 2 == 1)\n    {\n        throw invalid_argument(\"Odd-length hex string\");\n    }\n\n    int len = static_cast<int>(hex.length()) / 2;\n    vector<uint8_t> out(len);\n    for (int i = 0; i < len; i += 1)\n    {\n        string byte = hex.substr(2 * i, 2);\n        out[i] = static_cast<uint8_t>(strtol(byte.c_str(), nullptr, 16));\n    }\n\n    return out;\n}\n\nstring\nbytes_to_hex(const vector<uint8_t> &data)\n{\n    stringstream hex(ios_base::out);\n    hex.flags(ios::hex);\n    for (const auto &byte : data)\n    {\n        hex << setw(2) << setfill('0') << int(byte);\n    }\n    return hex.str();\n}\n\nclass KAT\n{\npublic:\n    bytes key_generation_seed;\n    bytes sha3_256_hash_of_public_key;\n    bytes sha3_256_hash_of_secret_key;\n    bytes encapsulation_seed;\n    bytes sha3_256_hash_of_ciphertext;\n    bytes shared_secret;\n};\n\nvector<KAT>\nread_kats(string path)\n{\n    ifstream kat_file(path);\n    nlohmann::json kats_raw;\n    kat_file >> kats_raw;\n\n    vector<KAT> kats;\n\n    // Read test group\n    for (auto &kat_raw : kats_raw.items())\n    {\n        auto kat_raw_value = kat_raw.value();\n\n        kats.push_back(KAT{\n            .key_generation_seed = from_hex(kat_raw_value[\"key_generation_seed\"]),\n            .sha3_256_hash_of_public_key =\n                from_hex(kat_raw_value[\"sha3_256_hash_of_public_key\"]),\n            .sha3_256_hash_of_secret_key =\n                from_hex(kat_raw_value[\"sha3_256_hash_of_secret_key\"]),\n            .encapsulation_seed = from_hex(kat_raw_value[\"encapsulation_seed\"]),\n            .sha3_256_hash_of_ciphertext =\n                from_hex(kat_raw_value[\"sha3_256_hash_of_ciphertext\"]),\n            .shared_secret = from_hex(kat_raw_value[\"shared_secret\"]),\n        });\n    }\n\n    return kats;\n}\n\nvoid modify_ciphertext(uint8_t *ciphertext, size_t ciphertext_size)\n{\n    uint8_t randomness[3];\n    generate_random(randomness, 3);\n\n    uint8_t random_byte = randomness[0];\n    if (random_byte == 0)\n    {\n        random_byte += 1;\n    }\n\n    uint16_t random_u16 = (randomness[2] << 8) | randomness[1];\n\n    uint16_t random_position = random_u16 % ciphertext_size;\n\n    ciphertext[random_position] ^= random_byte;\n}\n\nvoid modify_secret_key(uint8_t *secret_key,\n                       size_t secret_key_size,\n                       bool modify_implicit_rejection_value)\n{\n    uint8_t randomness[3];\n    generate_random(randomness, 3);\n\n    uint8_t random_byte = randomness[0];\n    if (random_byte == 0)\n    {\n        random_byte += 1;\n    }\n\n    uint16_t random_u16 = (randomness[2] << 8) | randomness[1];\n\n    uint16_t random_position = 0;\n\n    if (modify_implicit_rejection_value == true)\n    {\n        random_position = (secret_key_size - 32) + (random_u16 % 32);\n    }\n    else\n    {\n        random_position = random_u16 % (secret_key_size - 32);\n    }\n\n    secret_key[random_position] ^= random_byte;\n}\n\nuint8_t *\ncompute_implicit_rejection_shared_secret(uint8_t *ciphertext,\n                                         size_t ciphertext_size,\n                                         uint8_t *secret_key,\n                                         size_t secret_key_size)\n{\n    uint8_t *hashInput = new uint8_t[32 + ciphertext_size];\n    uint8_t *sharedSecret = new uint8_t[32];\n    Eurydice_mut_borrow_slice_u8 ss;\n    ss.ptr = sharedSecret;\n    ss.meta = 32;\n\n    std::copy(secret_key + (secret_key_size - 32),\n              secret_key + secret_key_size,\n              hashInput);\n    std::copy(ciphertext, ciphertext + ciphertext_size, hashInput + 32);\n\n    libcrux_sha3_portable_shake256(ss, mk_slice_u8(hashInput, 32 + ciphertext_size));\n\n    delete[] hashInput;\n    return sharedSecret;\n}\n\ntypedef Eurydice_arr_c7 libcrux_sha3_Sha3_512Digest;\n\nTEST(MlKem768TestPortable, ConsistencyTest)\n{\n    libcrux_sha3_Sha3_512Digest randomness;\n    for (int i = 0; i < 64; i++)\n    {\n        randomness.data[i] = 13;\n    }\n    auto key_pair = libcrux_ml_kem_mlkem768_portable_generate_key_pair(randomness);\n    //  cout << \"key pair.pk: \" << bytes_to_hex(bytes(key_pair.pk.value, key_pair.pk.value + 16U)) << endl;\n    //  cout << \"key pair.sk: \" << bytes_to_hex(bytes(key_pair.sk.value, key_pair.sk.value + 16U)) << endl;\n\n    Eurydice_arr_ec randomness32;\n    memcpy(randomness32.data, randomness.data, 32);\n    auto ctxt = libcrux_ml_kem_mlkem768_portable_encapsulate(&key_pair.pk, randomness32);\n\n    // cout << \"ctxt: \" << bytes_to_hex(bytes(ctxt.fst.value, ctxt.fst.value + 16U)) << endl;\n\n    Eurydice_arr_ec sharedSecret2 = libcrux_ml_kem_mlkem768_portable_decapsulate(&key_pair.sk, &ctxt.fst);\n\n    EXPECT_EQ(0,\n              memcmp(ctxt.snd.data,\n                     sharedSecret2.data,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n}\n\n#ifdef LIBCRUX_UNPACKED\nTEST(MlKem768TestPortableUnpacked, ConsistencyTest)\n{\n    uint8_t randomness[64];\n    generate_random(randomness, 64);\n    auto key_pair = libcrux_ml_kem_mlkem768_portable_generate_key_pair_unpacked(randomness);\n\n    uint8_t randomness2[32];\n    generate_random(randomness2, 32);\n    auto ctxt = libcrux_ml_kem_mlkem768_portable_encapsulate_unpacked(&key_pair.public_key, randomness2);\n\n    uint8_t sharedSecret2[LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE];\n    libcrux_ml_kem_mlkem768_portable_decapsulate_unpacked(&key_pair, &ctxt.fst, sharedSecret2);\n\n    EXPECT_EQ(0,\n              memcmp(ctxt.snd,\n                     sharedSecret2,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n}\n#endif // #ifdef LIBCRUX_UNPACKED\n\nTEST(Kyber768TestPortable, ModifiedCiphertextTest)\n{\n    libcrux_sha3_Sha3_512Digest randomness;\n    generate_random(randomness.data, 64);\n    auto key_pair = libcrux_ml_kem_mlkem768_portable_generate_key_pair(randomness);\n\n    Eurydice_arr_ec randomness32;\n    generate_random(randomness32.data, 32);\n    auto ctxt = libcrux_ml_kem_mlkem768_portable_encapsulate(&key_pair.pk, randomness32);\n\n    modify_ciphertext(ctxt.fst.data,\n                      LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE);\n    auto sharedSecret2 = libcrux_ml_kem_mlkem768_portable_decapsulate(&key_pair.sk, &ctxt.fst);\n\n    EXPECT_NE(0,\n              memcmp(ctxt.snd.data,\n                     sharedSecret2.data,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n\n    uint8_t *implicitRejectionSharedSecret =\n        compute_implicit_rejection_shared_secret(\n            ctxt.fst.data,\n            LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE,\n            key_pair.sk.data,\n            LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE);\n\n    EXPECT_EQ(0,\n              memcmp(implicitRejectionSharedSecret,\n                     sharedSecret2.data,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n    delete[] implicitRejectionSharedSecret;\n}\n\nTEST(Kyber768TestPortable, ModifiedSecretKeyTest)\n{\n    libcrux_sha3_Sha3_512Digest randomness;\n    generate_random(randomness.data, 64);\n    auto key_pair = libcrux_ml_kem_mlkem768_portable_generate_key_pair(randomness);\n\n    Eurydice_arr_ec randomness32;\n    generate_random(randomness32.data, 32);\n    auto ctxt = libcrux_ml_kem_mlkem768_portable_encapsulate(&key_pair.pk, randomness32);\n\n    modify_secret_key(\n        key_pair.sk.data, LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE, false);\n    auto sharedSecret2 = libcrux_ml_kem_mlkem768_portable_decapsulate(&key_pair.sk, &ctxt.fst);\n\n    EXPECT_NE(0,\n              memcmp(ctxt.snd.data,\n                     sharedSecret2.data,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n\n    modify_secret_key(\n        ctxt.snd.data, LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE, true);\n    sharedSecret2 = libcrux_ml_kem_mlkem768_portable_decapsulate(&key_pair.sk, &ctxt.fst);\n\n    uint8_t *implicitRejectionSharedSecret =\n        compute_implicit_rejection_shared_secret(\n            ctxt.fst.data,\n            LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE,\n            key_pair.sk.data,\n            LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE);\n    EXPECT_EQ(0,\n              memcmp(implicitRejectionSharedSecret,\n                     sharedSecret2.data,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n    delete[] implicitRejectionSharedSecret;\n}\n\nTEST(MlKem768TestPortable, NISTKnownAnswerTest)\n{\n    // XXX: This should be done in a portable way.\n    auto kats = read_kats(\"tests/mlkem768_nistkats.json\");\n\n    for (auto kat : kats)\n    {\n        libcrux_sha3_Sha3_512Digest randomness;\n        memcpy(randomness.data, kat.key_generation_seed.data(), 64);\n        auto key_pair =\n            libcrux_ml_kem_mlkem768_portable_generate_key_pair(randomness);\n\n        auto pk_hash =\n          libcrux_sha3_sha256(\n              mk_slice_u8(key_pair.pk.data,\n                       LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE));\n        EXPECT_EQ(0, memcmp(pk_hash.data, kat.sha3_256_hash_of_public_key.data(), 32));\n\n        auto sk_hash =\n          libcrux_sha3_sha256(\n              mk_slice_u8(key_pair.sk.data, LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE));\n        EXPECT_EQ(0, memcmp(sk_hash.data, kat.sha3_256_hash_of_secret_key.data(), 32));\n\n        Eurydice_arr_ec randomness32;\n        memcpy(randomness32.data, kat.encapsulation_seed.data(), 32);\n        auto ctxt = libcrux_ml_kem_mlkem768_portable_encapsulate(\n            &key_pair.pk, randomness32);\n        auto ct_hash =\n        libcrux_sha3_sha256(\n            mk_slice_u8(ctxt.fst.data,\n                     LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE));\n        EXPECT_EQ(0, memcmp(ct_hash.data, kat.sha3_256_hash_of_ciphertext.data(), 32));\n        EXPECT_EQ(0,\n                  memcmp(ctxt.snd.data,\n                         kat.shared_secret.data(),\n                         LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n\n        auto sharedSecret2 =\n          libcrux_ml_kem_mlkem768_portable_decapsulate(&key_pair.sk, &ctxt.fst);\n\n        EXPECT_EQ(0,\n                  memcmp(ctxt.snd.data,\n                         sharedSecret2.data,\n                         LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n    }\n}\n\n#ifdef LIBCRUX_UNPACKED\nTEST(MlKem768TestPortableUnpacked, NISTKnownAnswerTest)\n{\n    // XXX: This should be done in a portable way.\n    auto kats = read_kats(\"tests/mlkem768_nistkats.json\");\n\n    for (auto kat : kats)\n    {\n        auto key_pair =\n            libcrux_ml_kem_mlkem768_portable_generate_key_pair_unpacked(kat.key_generation_seed.data());\n\n        // We can't check the keys because we don't really have them.\n\n        auto ctxt = libcrux_ml_kem_mlkem768_portable_encapsulate_unpacked(&key_pair.public_key, kat.encapsulation_seed.data());\n\n        uint8_t ct_hash[32];\n        libcrux_sha3_sha256(\n            mk_slice_u8(ctxt.fst.value,\n                     LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE),\n            ct_hash);\n        EXPECT_EQ(0, memcmp(ct_hash, kat.sha3_256_hash_of_ciphertext.data(), 32));\n        EXPECT_EQ(0,\n                  memcmp(ctxt.snd,\n                         kat.shared_secret.data(),\n                         LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n\n        uint8_t sharedSecret2[LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE];\n        libcrux_ml_kem_mlkem768_portable_decapsulate_unpacked(&key_pair, &ctxt.fst, sharedSecret2);\n\n        EXPECT_EQ(0,\n                  memcmp(ctxt.snd,\n                         sharedSecret2,\n                         LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n    }\n}\n#endif // #ifdef LIBCRUX_UNPACKED\n\n#ifdef LIBCRUX_X64\n#include \"libcrux_mlkem768_avx2.h\"\n\nTEST(MlKem768TestAvx2, ConsistencyTest)\n{\n    libcrux_sha3_Sha3_512Digest randomness;\n    for (int i = 0; i < 64; i++)\n    {\n        randomness.data[i] = 13;\n    }\n    auto key_pair = libcrux_ml_kem_mlkem768_avx2_generate_key_pair(randomness);\n    Eurydice_arr_ec randomness32;\n    memcpy(randomness32.data, randomness.data, 32);\n    auto ctxt = libcrux_ml_kem_mlkem768_avx2_encapsulate(&key_pair.pk, randomness32);\n\n    auto sharedSecret2 =\n      libcrux_ml_kem_mlkem768_avx2_decapsulate(&key_pair.sk, &ctxt.fst);\n\n    EXPECT_EQ(0,\n              memcmp(ctxt.snd.data,\n                     sharedSecret2.data,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n}\n\nTEST(Kyber768TestAvx2, ModifiedCiphertextTest)\n{\n    libcrux_sha3_Sha3_512Digest randomness;\n    generate_random(randomness.data, 64);\n    auto key_pair = libcrux_ml_kem_mlkem768_avx2_generate_key_pair(randomness);\n\n    Eurydice_arr_ec randomness32;\n    generate_random(randomness32.data, 32);\n    auto ctxt = libcrux_ml_kem_mlkem768_avx2_encapsulate(&key_pair.pk, randomness32);\n\n    modify_ciphertext(ctxt.fst.data,\n                      LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE);\n    auto sharedSecret2 =\n      libcrux_ml_kem_mlkem768_avx2_decapsulate(&key_pair.sk, &ctxt.fst);\n\n    EXPECT_NE(0,\n              memcmp(ctxt.snd.data,\n                     sharedSecret2.data,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n\n    uint8_t *implicitRejectionSharedSecret =\n        compute_implicit_rejection_shared_secret(\n            ctxt.fst.data,\n            LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE,\n            key_pair.sk.data,\n            LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE);\n\n    EXPECT_EQ(0,\n              memcmp(implicitRejectionSharedSecret,\n                     sharedSecret2.data,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n    delete[] implicitRejectionSharedSecret;\n}\n\nTEST(Kyber768TestAvx2, ModifiedSecretKeyTest)\n{\n    libcrux_sha3_Sha3_512Digest randomness;\n    generate_random(randomness.data, 64);\n    auto key_pair = libcrux_ml_kem_mlkem768_avx2_generate_key_pair(randomness);\n\n    Eurydice_arr_ec randomness32;\n    generate_random(randomness32.data, 32);\n    auto ctxt = libcrux_ml_kem_mlkem768_avx2_encapsulate(&key_pair.pk, randomness32);\n\n    modify_secret_key(\n        key_pair.sk.data, LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE, false);\n    auto sharedSecret2 =\n      libcrux_ml_kem_mlkem768_avx2_decapsulate(&key_pair.sk, &ctxt.fst);\n\n    EXPECT_NE(0,\n              memcmp(ctxt.snd.data,\n                     sharedSecret2.data,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n\n    modify_secret_key(\n        ctxt.snd.data, LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE, true);\n    sharedSecret2 = libcrux_ml_kem_mlkem768_avx2_decapsulate(&key_pair.sk, &ctxt.fst);\n\n    uint8_t *implicitRejectionSharedSecret =\n        compute_implicit_rejection_shared_secret(\n            ctxt.fst.data,\n            LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE,\n            key_pair.sk.data,\n            LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE);\n    EXPECT_EQ(0,\n              memcmp(implicitRejectionSharedSecret,\n                     sharedSecret2.data,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n    delete[] implicitRejectionSharedSecret;\n}\n\nTEST(MlKem768TestAvx2, NISTKnownAnswerTest)\n{\n    // XXX: This should be done in a portable way.\n    auto kats = read_kats(\"tests/mlkem768_nistkats.json\");\n\n    for (auto kat : kats)\n    {\n        libcrux_sha3_Sha3_512Digest randomness;\n        memcpy(randomness.data, kat.key_generation_seed.data(), 64);\n        auto key_pair = libcrux_ml_kem_mlkem768_avx2_generate_key_pair(randomness);\n\n        auto pk_hash =\n          libcrux_sha3_sha256(\n              mk_slice_u8(key_pair.pk.data,\n                       LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE));\n        EXPECT_EQ(0, memcmp(pk_hash.data, kat.sha3_256_hash_of_public_key.data(), 32));\n\n        auto sk_hash =\n          libcrux_sha3_sha256(\n              mk_slice_u8(key_pair.sk.data, LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE));\n        EXPECT_EQ(0, memcmp(sk_hash.data, kat.sha3_256_hash_of_secret_key.data(), 32));\n\n        Eurydice_arr_ec randomness32;\n        memcpy(randomness32.data, kat.encapsulation_seed.data(), 32);\n        auto ctxt = libcrux_ml_kem_mlkem768_avx2_encapsulate(\n            &key_pair.pk, randomness32);\n        auto ct_hash =\n          libcrux_sha3_sha256(\n              mk_slice_u8(ctxt.fst.data,\n                       LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE));\n        EXPECT_EQ(0, memcmp(ct_hash.data, kat.sha3_256_hash_of_ciphertext.data(), 32));\n        EXPECT_EQ(0,\n                  memcmp(ctxt.snd.data,\n                         kat.shared_secret.data(),\n                         LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n\n        auto sharedSecret2 =\n          libcrux_ml_kem_mlkem768_avx2_decapsulate(&key_pair.sk, &ctxt.fst);\n\n        EXPECT_EQ(0,\n                  memcmp(ctxt.snd.data,\n                         sharedSecret2.data,\n                         LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n    }\n}\n\n#ifdef LIBCRUX_UNPACKED\nTEST(MlKem768TestAvx2Unpacked, NISTKnownAnswerTest)\n{\n    // XXX: This should be done in a portable way.\n    auto kats = read_kats(\"tests/mlkem768_nistkats.json\");\n\n    for (auto kat : kats)\n    {\n        auto key_pair =\n            libcrux_ml_kem_mlkem768_avx2_generate_key_pair_unpacked(kat.key_generation_seed.data());\n\n        // We can't check the keys because we don't really have them.\n\n        auto ctxt = libcrux_ml_kem_mlkem768_avx2_encapsulate_unpacked(&key_pair.public_key, kat.encapsulation_seed.data());\n\n        uint8_t ct_hash[32];\n        libcrux_sha3_sha256(\n            mk_slice_u8(ctxt.fst.value,\n                     LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE),\n            ct_hash);\n        EXPECT_EQ(0, memcmp(ct_hash, kat.sha3_256_hash_of_ciphertext.data(), 32));\n        EXPECT_EQ(0,\n                  memcmp(ctxt.snd,\n                         kat.shared_secret.data(),\n                         LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n\n        uint8_t sharedSecret2[LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE];\n        libcrux_ml_kem_mlkem768_avx2_decapsulate_unpacked(&key_pair, &ctxt.fst, sharedSecret2);\n\n        EXPECT_EQ(0,\n                  memcmp(ctxt.snd,\n                         sharedSecret2,\n                         LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n    }\n}\n#endif // #ifdef LIBCRUX_UNPACKED\n\n#endif // LIBCRUX_X64\n\n#ifdef LIBCRUX_AARCH64\n#include \"libcrux_mlkem768_neon.h\"\n\nTEST(MlKem768TestNeon, ConsistencyTest)\n{\n    uint8_t randomness[64];\n    for (int i = 0; i < 64; i++)\n        randomness[i] = 13;\n    auto key_pair = libcrux_ml_kem_mlkem768_neon_generate_key_pair(randomness);\n    auto ctxt = libcrux_ml_kem_mlkem768_neon_encapsulate(&key_pair.pk, randomness);\n\n    uint8_t sharedSecret2[LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE];\n    libcrux_ml_kem_mlkem768_neon_decapsulate(&key_pair.sk, &ctxt.fst, sharedSecret2);\n\n    EXPECT_EQ(0,\n              memcmp(ctxt.snd,\n                     sharedSecret2,\n                     LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n}\n\nTEST(MlKem768TestNeon, NISTKnownAnswerTest)\n{\n    // XXX: This should be done in a portable way.\n    auto kats = read_kats(\"tests/mlkem768_nistkats.json\");\n\n    for (auto kat : kats)\n    {\n        auto key_pair = libcrux_ml_kem_mlkem768_neon_generate_key_pair(kat.key_generation_seed.data());\n\n        uint8_t pk_hash[32];\n        libcrux_sha3_sha256(\n            mk_slice_u8(key_pair.pk.value,\n                     LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE),\n            pk_hash);\n        EXPECT_EQ(0, memcmp(pk_hash, kat.sha3_256_hash_of_public_key.data(), 32));\n\n        uint8_t sk_hash[32];\n        libcrux_sha3_sha256(\n            mk_slice_u8(key_pair.sk.value, LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE), sk_hash);\n        EXPECT_EQ(0, memcmp(sk_hash, kat.sha3_256_hash_of_secret_key.data(), 32));\n\n        auto ctxt = libcrux_ml_kem_mlkem768_neon_encapsulate(\n            &key_pair.pk, kat.encapsulation_seed.data());\n        uint8_t ct_hash[32];\n        libcrux_sha3_sha256(\n            mk_slice_u8(ctxt.fst.value,\n                     LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE),\n            ct_hash);\n        EXPECT_EQ(0, memcmp(ct_hash, kat.sha3_256_hash_of_ciphertext.data(), 32));\n        EXPECT_EQ(0,\n                  memcmp(ctxt.snd,\n                         kat.shared_secret.data(),\n                         LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n\n        uint8_t sharedSecret2[LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE];\n        libcrux_ml_kem_mlkem768_neon_decapsulate(&key_pair.sk, &ctxt.fst, sharedSecret2);\n\n        EXPECT_EQ(0,\n                  memcmp(ctxt.snd,\n                         sharedSecret2,\n                         LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE));\n    }\n}\n#endif // LIBCRUX_AARCH64\n"
  },
  {
    "path": "test/libcrux-ml-kem/tests/mlkem768_nistkats.json",
    "content": "[\n    {\n        \"key_generation_seed\": \"7c9935a0b07694aa0c6d10e4db6b1add2fd81a25ccb148032dcd739936737f2d8626ed79d451140800e03b59b956f8210e556067407d13dc90fa9e8b872bfb8f\",\n        \"sha3_256_hash_of_public_key\": \"f57262661358cde8d3ebf990e5fd1d5b896c992ccfaadb5256b68bbf5943b132\",\n        \"sha3_256_hash_of_secret_key\": \"7deef44965b03d76de543ad6ef9e74a2772fa5a9fa0e761120dac767cf0152ef\",\n        \"encapsulation_seed\": \"147c03f7a5bebba406c8fae1874d7f13c80efe79a3a9a874cc09fe76f6997615\",\n        \"sha3_256_hash_of_ciphertext\": \"6e777e2cf8054659136a971d9e70252f301226930c19c470ee0688163a63c15b\",\n        \"shared_secret\": \"e7184a0975ee3470878d2d159ec83129c8aec253d4ee17b4810311d198cd0368\"\n    },\n    {\n        \"key_generation_seed\": \"d60b93492a1d8c1c7ba6fc0b733137f3406cee8110a93f170e7a78658af326d9003271531cf27285b8721ed5cb46853043b346a66cba6cf765f1b0eaa40bf672\",\n        \"sha3_256_hash_of_public_key\": \"7b00751eb9b1253231213f8a14f06f0fe1b7a4fdb7d1cfe44c161e577e5e8f0a\",\n        \"sha3_256_hash_of_secret_key\": \"3a8c009e8e648ac572d5592e4a92907fae0c1767be41c544b59dc3ffe61f7ded\",\n        \"encapsulation_seed\": \"cde797df8ce67231f6c5d15811843e01eb2ab84c7490931240822adbddd72046\",\n        \"sha3_256_hash_of_ciphertext\": \"bce1bf3450f574130b9561ee11565fa41d599d05d2136f10ad2c013eb5d13ca9\",\n        \"shared_secret\": \"5f0c5d9f39d3e724b5a2bd54e69e360f72ffab5d4d6cc5e572fecba80acd4796\"\n    },\n    {\n        \"key_generation_seed\": \"4b622de1350119c45a9f2e2ef3dc5df50a759d138cdfbd64c81cc7cc2f513345e82fcc97ca60ccb27bf6938c975658aeb8b4d37cffbde25d97e561f36c219ade\",\n        \"sha3_256_hash_of_public_key\": \"9bda55b63cffa9bf953993918b18cd6595ea6433b479e89b5cd3c9339e4468cb\",\n        \"sha3_256_hash_of_secret_key\": \"d5fc96564df6e53622b2db8295a80a44e3bad7147696e2ad1f728639c98791b1\",\n        \"encapsulation_seed\": \"f43f68fbd694f0a6d307297110ecd4739876489fdf07eb9b03364e2ed0ff96e9\",\n        \"sha3_256_hash_of_ciphertext\": \"2a8b5d9bdcac1b7ffb6d655368e15148308eee98ae34f4105eaae87f24a008a2\",\n        \"shared_secret\": \"7f3bcc03a35a0030255264914e5d88a0c93611c7ca21f0609678a88ca42ce1c9\"\n    },\n    {\n        \"key_generation_seed\": \"050d58f9f757edc1e8180e3808b806f5bbb3586db3470b069826d1bb9a4efc2cde950541fd53a8a47aaa8cdfe80d928262a5ef7f8129ec3ef92f78d7cc32ef60\",\n        \"sha3_256_hash_of_public_key\": \"647a81f0f1b3e3dacb6e73e900f7c078cdfaa7119a5ede48c7685fdb7e0fe2f5\",\n        \"sha3_256_hash_of_secret_key\": \"1cf686cb8732c73a38b35d73b0b28fb120bc89cda1554d9f12adedc057862081\",\n        \"encapsulation_seed\": \"ea74fbc3c546500ed684bed6fe3c496d3b86d2d6dfaf223969b942e9a8c95e85\",\n        \"sha3_256_hash_of_ciphertext\": \"1c51c85ce66d80c1f9bb138e5bce84dd75cee4260c8817e06c6f2bd920601530\",\n        \"shared_secret\": \"c630736985fdb7830d7446e18b6b81fa4a707a6058964b99190120de85e7559c\"\n    },\n    {\n        \"key_generation_seed\": \"66b79b844e0c2adad694e0478661ac46fe6b6001f6a71ff8e2f034b1fd8833d3be2d3c64d38269a1ee8660b9a2beaeb9f5ac022e8f0a357feebfd13b06813854\",\n        \"sha3_256_hash_of_public_key\": \"811aea11a24a4b09e428415f82ee836e930c3b77867aafc5e6728149e3f2bd1b\",\n        \"sha3_256_hash_of_secret_key\": \"6a1ff1351c538a5661fc3576c29408c19f42da3688fa16f9ec5ead6a84420db5\",\n        \"encapsulation_seed\": \"64efa87a12cb96f98b9b81a7e5128a959c74e5332aaab0444fca7b4a5e5e0216\",\n        \"sha3_256_hash_of_ciphertext\": \"db4dedc1e4d383acaf974fb50ffbf881bd3938ad196fb9aebeeb1bf1ddc94e10\",\n        \"shared_secret\": \"41e078d0d0c4fe5df5c6683171d5c1c3f1ef152c4945f9cb299f74278ce4cc4f\"\n    },\n    {\n        \"key_generation_seed\": \"7ec408f52c9aa723d0c41d9987682a5f4ce6c9da7cd0215af60bbaf5484ab353a08ccf451b049fd51d7a9ad77ae14a81569df8c9bd3a8f1ebea86fdcfb823082\",\n        \"sha3_256_hash_of_public_key\": \"76c64235d8bd63438f13dcd038f286b9f4242070a5bec4d8990075008667aad3\",\n        \"sha3_256_hash_of_secret_key\": \"fb19a847c01b5bb4bc607ce0c65e50ca6869946a97625baea129c2ba07e00c01\",\n        \"encapsulation_seed\": \"8a95d71228acaa5f9ae6f9d9ca8ae55fde296463b41083a39e833e37c4c90f88\",\n        \"sha3_256_hash_of_ciphertext\": \"c8c63c879a7a803db4e5779ca5acb1f16f5c86c38258f583a9f1e43303ff36d0\",\n        \"shared_secret\": \"7da491b5623a43ae17160a54e45e8328453cfe1acc692a1e300906ebd2a1d9b2\"\n    },\n    {\n        \"key_generation_seed\": \"c121915bfef6abdfc177dae2f5a24218f9abda2559afc6741b08e0e61ab433eb84ef52db5eaa6df8ec3a0bc5ffa730db0dde8c5f38f266d5c680a78d264a7b96\",\n        \"sha3_256_hash_of_public_key\": \"ae654e4412fd220548280b7a6ace9f2f0bc7b059fc103060346e53bc3c3161d8\",\n        \"sha3_256_hash_of_secret_key\": \"9088118150f9137e8ed76eb5e3a706f66f31c570fa7f0dfe75c0e81c4540878e\",\n        \"encapsulation_seed\": \"90d79d75d0bbb8921cf70d46bab497022a8e750efdc99e5f1bae653275441c7b\",\n        \"sha3_256_hash_of_ciphertext\": \"2ce235a49669184efdbff64176f93017127735170c2e1c1b159fc746ef30d18e\",\n        \"shared_secret\": \"eeba3c0571fa453fcd9f7f0d6baeb75d59ec9854c12846089d65bd8dadf9f6b0\"\n    },\n    {\n        \"key_generation_seed\": \"d86634ecf96cc2603761e284c0e36734cedec64e7ff486469e38539c71141c5a99daf37400cfe59841afc412ec97f2929dc84a6f3c36f378ee84ce3e46cd1209\",\n        \"sha3_256_hash_of_public_key\": \"6ecea55c3d5c042d2dca3a3925faaa9112561827dceb0754580814a84be19b87\",\n        \"sha3_256_hash_of_secret_key\": \"33448769334ee9aa43d7ac22a003d9ae89a1ef5a9765deef2946c91fea0a1a5e\",\n        \"encapsulation_seed\": \"be8a32f97b9a8d596382c02fa2a0eeebc15c083e970ddaa4f2622b91d6718663\",\n        \"sha3_256_hash_of_ciphertext\": \"14540bfc038f3eb76f418a8851513054a998e16a06f97c117417ae0a35f90e4f\",\n        \"shared_secret\": \"8bf57e5d1ce24e9942b1b3f456d184d4c0937b9b699e69c6524e93e140f39c90\"\n    },\n    {\n        \"key_generation_seed\": \"0610678ff4dc3128e1619f915dc192c220f8fad94da1943b90aaec401683a492da1804ddb5aa9b1c6a47a98f8505a49bae2affde5fe75e69e828e546a6771004\",\n        \"sha3_256_hash_of_public_key\": \"576cb9d31e5146967756cf7356926f2e20fc7c1fde9954cb2f593d96a80ab860\",\n        \"sha3_256_hash_of_secret_key\": \"2031c133d7d85e616d932c6204d7ec0f3bd0303ec609e3c7c08092e1ea443972\",\n        \"encapsulation_seed\": \"da2cfaf69e25b2a89ff2557bbb6f69e01d8e2e7bb27a7a1ce7e40fead16f33b2\",\n        \"sha3_256_hash_of_ciphertext\": \"20e06ce25d864f8e7a80a19e23cee6830575a072476504fd10e37b296ef8de73\",\n        \"shared_secret\": \"2f714d31bbc778518e2b67d264065d9731c12149cf931211e649addd6daf0b92\"\n    },\n    {\n        \"key_generation_seed\": \"d322d56d8ef067ba1f24c92492b9c56df3a6ef54a304adc1b69913766a1ce69756047447b810cc094d400ab204cf9ae71e3afa68b88586ecb6498c68ac0e51b9\",\n        \"sha3_256_hash_of_public_key\": \"3e9976d61a687df88a8abcc6651446b81b7d136df42bfa03473c84dfd64fdb3b\",\n        \"sha3_256_hash_of_secret_key\": \"5da40cacace6fa3712e49ef6700cd819aeea88264e6dc996681fff43d98c9830\",\n        \"encapsulation_seed\": \"511c2ab40782322c06111e144e505328c4e5bfc890a5980a2bbc44aeda4c738b\",\n        \"sha3_256_hash_of_ciphertext\": \"48ddf3c7cf3f02af111c71607e93922176d0173ec63e890235fe981412824edd\",\n        \"shared_secret\": \"f2c29a0a4782d83f2073c7c37d90556b1a005f072f94063d2db8114430f36c8d\"\n    },\n    {\n        \"key_generation_seed\": \"2f1d8a3bebb34540324b9485fdf3d5be3b858f544abc3fc641b5728cafab03ba8d6c42e7270ee2b77b6045385f3d175984a0e260363166c73b0c70c971644363\",\n        \"sha3_256_hash_of_public_key\": \"c0cfd4113c5edd408adcd03d38b12f0b6ac17525c618d6d151a761a9eebc2635\",\n        \"sha3_256_hash_of_secret_key\": \"2c6ec490ffd55e0a744f3c506a497cf4af575cce6368bdc3b3bdbbae733fe7b4\",\n        \"encapsulation_seed\": \"dca92dbec9b260dd97e8886f876862d6effc3b91fcf3fbc986cf56ab93ae79a2\",\n        \"sha3_256_hash_of_ciphertext\": \"b6ba4dfdae02842f96b915ea0ebd1c97972c170cae975c89c5fbf26cbe9a52d0\",\n        \"shared_secret\": \"13c99ded4db3e6618f5927d58c89afbe83c86a86ac2073421b2560b3f8be5aa3\"\n    },\n    {\n        \"key_generation_seed\": \"31beda3462627f601cbc56f3ddf4424e1529c04737ef0ef2af6d7401f653b8a1812083bfa3b670e3eaf9b443702fb6db16ac1197656bbd61a8e25ed523b8d1e5\",\n        \"sha3_256_hash_of_public_key\": \"71c5534bb819e61a9d8a257ff2eb29598ae92eccfad38abbfc9bccde5ff95a1c\",\n        \"sha3_256_hash_of_secret_key\": \"107c5ef0842d1dfda257138d681ad7e1390e12c697111a2c804d8f014361cb4f\",\n        \"encapsulation_seed\": \"57c170e691d7a914a901b9a11c62b8b569b3806427557a9dbac9faa720ec3641\",\n        \"sha3_256_hash_of_ciphertext\": \"671e3c316d4d8411237db4383fca82f76692867e9f6d15a2b82b17d934392341\",\n        \"shared_secret\": \"83302cab48eb0832bd8df0db3fce81595754772e4c951c444a1b2ee9f58c48c1\"\n    },\n    {\n        \"key_generation_seed\": \"cbdff028766d558af4466ef14043a1a9cf765f7748c63cc09dceb59ab39a4e4d8e9a30597e4b52ffa87a54b83c91d12a5e9c2cd90fcac2c11b3a348240411a4c\",\n        \"sha3_256_hash_of_public_key\": \"4b53b4aec0d9f86a6377c63ff80150e40fc5347714c07591dc71c6beb8daaafc\",\n        \"sha3_256_hash_of_secret_key\": \"ed13d2a9ae5541b3fbfa19891b8c8a9f4f0957d940eb5d08ee0cd18cfb28e7a4\",\n        \"encapsulation_seed\": \"6b5a14e1473abf5a33d44975ca2088bd8fa6fddcb3f80e8fd5c45b9d90c24a5c\",\n        \"sha3_256_hash_of_ciphertext\": \"b83f6022179a08cdadda2660f8cd7cb70df4be0be3ad85bebb090d086079b1d1\",\n        \"shared_secret\": \"93ce6d06568d795c2a28d1196f53cbaa2cb05df1427ac76f44df09d479e14241\"\n    },\n    {\n        \"key_generation_seed\": \"4c04310bea66305c6ca8ba6b8f61ca96257a67663afc11761f13fb5c7b324b6b8aec87a9a79204cee2986867a2906eb851b734b8b22b91d6749b1a5f07c44e3b\",\n        \"sha3_256_hash_of_public_key\": \"c2d52d0c837eb40dac0653a5e862d9fb8b832629cece9eaeb6d5feb48b6ef5da\",\n        \"sha3_256_hash_of_secret_key\": \"73ee0632229d740dd746e3ef7f0f1c29944dbc2d8f39b7860807c41c18bbb3af\",\n        \"encapsulation_seed\": \"40e593754e6eddb7f9cf176ba2d5fd1087c90ad377556d0b0f686537b1a3165e\",\n        \"sha3_256_hash_of_ciphertext\": \"3685126e86797a881f3bbee0eb85b76d755ff03858735c326731b8d802f023b5\",\n        \"shared_secret\": \"071db527a2ee8ce982527cb19355793859bb8557e7cc99dec58a53153eceddf4\"\n    },\n    {\n        \"key_generation_seed\": \"38a0d5f41d7dc1896efd1b45b0485634cef149828751b96087a0a6dd81b4d58aa2acf359556df4a2abaeb9dcee945829beb71185b4d6bd18b76e5668f253383a\",\n        \"sha3_256_hash_of_public_key\": \"4ff02338c9bb711d263140c471409f3c42813f38424698563d9550f85a168f2d\",\n        \"sha3_256_hash_of_secret_key\": \"3c89443dab5ce46f82f6b8260af0293ea52a680f1c4fe5e042f0aefb707526f3\",\n        \"encapsulation_seed\": \"c152523abd8248bed40c3827bcf0f8e8127037a55c780695e2c28ea3e041a44c\",\n        \"sha3_256_hash_of_ciphertext\": \"b20e28f42ee5cf5569f1833af90334952074dd0ea0c2520f03fdf0fb24c17a64\",\n        \"shared_secret\": \"598bd66a4a063652b2a6b25b8d1c3bab0251682ce6c362a8c680295f47f3d6d9\"\n    },\n    {\n        \"key_generation_seed\": \"97b5665676e59e3538ebadaa8cd50df1f9fda1502d9894c616a946078e56b621df05318b5f655efe36f1b678cf4b875108a18db2fa312261caf839f84bd956c5\",\n        \"sha3_256_hash_of_public_key\": \"bbccdbce67cf49fea044df5c767996681dd2714937d31c822f3c58cc34785aa7\",\n        \"sha3_256_hash_of_secret_key\": \"64fde53d297945ef2a0af6ddd044520cff8ec1388aa471e47ba4299c2cd46da4\",\n        \"encapsulation_seed\": \"ad6466dd59f26b762fb02b19eedf5f79964da68bce0459b91c3a6ee5a7e01183\",\n        \"sha3_256_hash_of_ciphertext\": \"6f4cde00d3775858761742957833fe632e3d3082a9a6180477291bc23b682674\",\n        \"shared_secret\": \"92bd980f79cbb34c67594c6922549b99962e54d388034ea61f892fe250581c4e\"\n    },\n    {\n        \"key_generation_seed\": \"ef99224a03a85a46ef115474ec5b5d620da6795d6efcca4c9135d19958a9de62df7d92dda83e6b2ef4cce08c9134563063068a196d7b1a1a13623e48ae12528e\",\n        \"sha3_256_hash_of_public_key\": \"3ef3581d438af7dec621304e0091f797346ca18a41f39401e9d03200ef48beb6\",\n        \"sha3_256_hash_of_secret_key\": \"299a76e97511d90f7925100db418472a9c3c12d6d48acf03618a6960998ee733\",\n        \"encapsulation_seed\": \"1a4d5dff5847cfb48333e33bb00ca7301b144aa89dcd412ff5a3b1081d775b7f\",\n        \"sha3_256_hash_of_ciphertext\": \"4ede793372276800e22c1893ae554ce0b53e413fbbc3595e69feadb2e1f6d57a\",\n        \"shared_secret\": \"b7325a08fa617e19260264bb02ed6b8ab2081589fd5dcc1e92b9d0d4ebfdb6b6\"\n    },\n    {\n        \"key_generation_seed\": \"b12f6fd965ea9c5b947db80fc60c83d5e232dca82e7263027c19bd62e5a6ff550f6aa3e88f7fa8a96067f8cdaeceeac90c2d0b5e277e56e9c405ec9420c30252\",\n        \"sha3_256_hash_of_public_key\": \"fa06bb0ff42f4d610a7b3df7544d66b97a486967cd9b62ba0142ebb10b8ee4ee\",\n        \"sha3_256_hash_of_secret_key\": \"4dcfc0ce12c4e87f02c616a8fb18c359cae017a2f8d339623a174dfaebfad98f\",\n        \"encapsulation_seed\": \"34f44ec2092eeaf686f2ea170591a98527cbb03a4fa9477a7aef6b41a54feeb2\",\n        \"sha3_256_hash_of_ciphertext\": \"591bf77f74463c50a4ffbe97c892e11f3cf7601813b7ad83b17038a173e21442\",\n        \"shared_secret\": \"b400082a764291666c080ae9ea9f22c383f3c1e87b4cc56775a19c8ec29a4157\"\n    },\n    {\n        \"key_generation_seed\": \"9f52af92ca165fdc38788f2b59ba02e01c8281ff7c1e60504688043a5fe814b04f3029e1be4e1c0258c3a22ff5b50b2674cc094ba7018da2a61569845c17d26f\",\n        \"sha3_256_hash_of_public_key\": \"86538ecdf65b7a485b73a34a72193af1ea3f884d820463601c7f843672bbec7d\",\n        \"sha3_256_hash_of_secret_key\": \"70e91b44585ed93e802868e0bfe88f68995f3c85d25c2a36b0b7d8de7c5e2f8d\",\n        \"encapsulation_seed\": \"6250c81126572eec2da330271db36ee591f060fc7e53eeefe2e1c476c675fa33\",\n        \"sha3_256_hash_of_ciphertext\": \"83754e315ef22788354c1ec632429566929f9bd53e77d1d2cb52005274f64e1e\",\n        \"shared_secret\": \"03c7470224ba22fde280005d9a8f8354c49459e9a168cc282f9d41f4f0d2da2b\"\n    },\n    {\n        \"key_generation_seed\": \"851ea90fd3854cbf28fe39fb81f68e4b14345cf0d6eee7ec4ce772513df8410d1c0ec046899a777655233e4e1b5ca44e9afbdc67964bfd5d5e3dbb45e60d03cf\",\n        \"sha3_256_hash_of_public_key\": \"27757389a4a68c898dab92d0f63c3340dfba51e00312a05e721932b95b11f6da\",\n        \"sha3_256_hash_of_secret_key\": \"b43f88e419ae589b85bb0ec6c9712d4870dbaf35d4c96d06ef0f8b9753b60034\",\n        \"encapsulation_seed\": \"35d470bcc5880872754810dfb3f2796da2fd7f397537146f6488c27804072b34\",\n        \"sha3_256_hash_of_ciphertext\": \"0eb3d2bc103f7801dd8e002c6cc81bbcf11e070f465aba9b0b725fa9454acda7\",\n        \"shared_secret\": \"c31f7372e8c194a9589042477f34da3a60d591ea65e13bcccc07ba59402ede6d\"\n    },\n    {\n        \"key_generation_seed\": \"d304c9389cc973477f169788abcb9d511f843219d246a9b587822f422a70c2386590a2e5c7ed86cf2c5c2a898662bc9a81418720bbb632ef9cf0b845ed052d73\",\n        \"sha3_256_hash_of_public_key\": \"efe6e93d8e755292fa875609f2f63bd194c87e6f04db7c83d8bb1b9d868bb779\",\n        \"sha3_256_hash_of_secret_key\": \"f54233dfd4679cbd6eb6f18c0615745d5b4fc2fefade52d966bffab6f0cc259f\",\n        \"encapsulation_seed\": \"8d667921c5db401a86fe1c35dfcf164a6bb2ab7400fd6a0b67eafd4a0ed11940\",\n        \"sha3_256_hash_of_ciphertext\": \"942f3cd64ed1b2675f9f9823c068d59b2e007e66d38e06a2e4558dcba7f11efd\",\n        \"shared_secret\": \"9dfd08dbf59350ae2308096f935c6767daeddeb2c6997992d4a02c14b0e58c60\"\n    },\n    {\n        \"key_generation_seed\": \"89a6e3be304a3518fb82b18ca730f0b359cd6ba90664a493fb4f8edaf965b9c3b6591121e25d64010c25a18676033e1d7278ac5f2d0b43a31f3a4156ae710465\",\n        \"sha3_256_hash_of_public_key\": \"87ada29bf78a689417b645fe127d124339422be80a993e623d13bc59f3406a6f\",\n        \"sha3_256_hash_of_secret_key\": \"6b8d44a2a71f2901b7ea97bd24df8d46041cd9ad4f0bc5d42ca27ee44981f740\",\n        \"encapsulation_seed\": \"ec750b3939385a3f8df868119dc76f77ca845567ef068de6ada5478a56bc78b6\",\n        \"sha3_256_hash_of_ciphertext\": \"aa86248e7e906ff3072a00647cbd3f6e5d0f3a4ec40efa6deb94b2df901d0097\",\n        \"shared_secret\": \"03952e1a4915d112b87569d1f79a39f5d69a8dc11c96d70c529d2162a6024dd7\"\n    },\n    {\n        \"key_generation_seed\": \"d569b935ce015c85f792f8f7fb0d83c4f53b492959361dd4f75fb764d656450176eae84d11c4528382828f7a689a0d5cff87b8ca0bba97feacb39b935a8788cb\",\n        \"sha3_256_hash_of_public_key\": \"0c87bedd5c16c32cc3867910f734bdcf09869c7604a59ce36660074f561e12da\",\n        \"sha3_256_hash_of_secret_key\": \"a72b7d93adcbfc6d89485fa923a4b1095e3d593916496e521187224efa42ffa5\",\n        \"encapsulation_seed\": \"74f1d52af09b12c36eb062ea7528550cb4c18a3ce8e4f4ea9fac43ae383bc925\",\n        \"sha3_256_hash_of_ciphertext\": \"7a75e486cc2dd3ffab4b1072b4056de9a56b55cf324e58d3f6cfd031a0dda594\",\n        \"shared_secret\": \"6d2e1f456c87d5a3c79456a6d35fda52f3e9cb858f85a5f7931f532fffe26dee\"\n    },\n    {\n        \"key_generation_seed\": \"5cbb141c2763425c274f7404fe530d9116e08c33f9f200a20b011cf563a28990fc9ebbe336dc464489861db8253606971bd0a9008a433ed17752d04023781552\",\n        \"sha3_256_hash_of_public_key\": \"9a9a59f83fc58d7194ccc92bd78a45f97f721a1eb554499d0e4d5b37aefc23a8\",\n        \"sha3_256_hash_of_secret_key\": \"ea5ce3a271f5e46f925259832d187a3c893e8088b76c19c93e0e798e4320d2fd\",\n        \"encapsulation_seed\": \"4b3a70d85f640d1a2a852fb6fe96704af56a7415a8ee4282e9207bc3a2dc116a\",\n        \"sha3_256_hash_of_ciphertext\": \"d71fc29140e8725a4c4e8779d0ad3007990e08b1eb38856cc56f522e3079f601\",\n        \"shared_secret\": \"5c7c5cafe1fd7f3d12431ae93815c03419ff95b132caf568671ec23bdc74381c\"\n    },\n    {\n        \"key_generation_seed\": \"293abb6d1c207927945417cf84883ef010823e11b487ed55239e466e83696d0cff8563038aad865a817cab9ce98846ba75be9363718ecf5fea538aea90b2a558\",\n        \"sha3_256_hash_of_public_key\": \"bda0815dd53b263afcc1f71d2501128c41fb3606af71c5e68f0752c6d3a479c5\",\n        \"sha3_256_hash_of_secret_key\": \"d502e7e6df2d84e46cef88a84c53f1fddd5488accd5e1e43aed5f4f08e16a8a7\",\n        \"encapsulation_seed\": \"26e38ac804fb5b4d59ddf747715e7e6041d875f99c7b638024b4af82d622da60\",\n        \"sha3_256_hash_of_ciphertext\": \"8d4b1f3ee23ceecf073d6576609767401286da5189a1b267bff30a710a69e67a\",\n        \"shared_secret\": \"1427c322f72898a0fffd13f674719c9288d524bdd19e6a362533c1108e3a6d2c\"\n    },\n    {\n        \"key_generation_seed\": \"74d87c7556f2671f2d666854a4d6e073e69f35421e6e1a428cccea49c37f972ce1fb7456ac0aa1b97068f452cba64ebdc138bcf5d36b0a0fada2a3b374141eb9\",\n        \"sha3_256_hash_of_public_key\": \"e3e96e658787ba3f6ffb47de56322541a2c81f68e2825c74cb75ab01d4b719d6\",\n        \"sha3_256_hash_of_secret_key\": \"17f821aae147fa517cf35169f9d0b59a30ffdd0ff8f46c1c9bfffe6791392f18\",\n        \"encapsulation_seed\": \"a319d2b8f114f1acd866478bcdeba6fd164dc4e37b0adfa8d8034afb3e197376\",\n        \"sha3_256_hash_of_ciphertext\": \"7638e455aa855489cedd385a58cad62c49ee25f60be02bbcca6d7c3c383d27af\",\n        \"shared_secret\": \"d399b5ff0756707f8d1a1c2a683465c9ad4899788420643d59edf78f79b28dc1\"\n    },\n    {\n        \"key_generation_seed\": \"013bab0212d04ecd54b478daf72748003a25e2cb060ba6cc50bf95c292b8206b9da0c5da5f195b80fbb99c2e8b06926074f3f604b3f6195b5a5b9737876bba72\",\n        \"sha3_256_hash_of_public_key\": \"eb3fdfcc0b171aa975028f96cd47fdba421ac08e29a0044cedc29fce35eb8510\",\n        \"sha3_256_hash_of_secret_key\": \"d1266b01cdbc6774ff0edbe64a593a110c462d07071077faa86faa9a0aa2365d\",\n        \"encapsulation_seed\": \"ff646071b2509e6b75790917e08e4f0b0d9f0116ec6291c0b59eaa4b583ad830\",\n        \"sha3_256_hash_of_ciphertext\": \"0ed3b8be821742190f88bce0d86f834dec2a829496c5eb5bf51bab1a8419064c\",\n        \"shared_secret\": \"1a0ad65924728c415ee9c92d0dcd91396665a24c59cba878050390acf2eb44dd\"\n    },\n    {\n        \"key_generation_seed\": \"ccb073c4b90be0ad746e26fb093b60c70110bd1dcbcddb566a8cffb7b3caf80e71600a8982c350df524cde514431ded7aec23576530894bcbf0ec0bfef0bb64f\",\n        \"sha3_256_hash_of_public_key\": \"d046d93317dc6d0ff28990721c3f94a93024ce01b01c0ca55d634c191c4280fa\",\n        \"sha3_256_hash_of_secret_key\": \"bdf5539c63b463c3dfefb7978bc44a46803117ccf066475bd17d5c82fcb49c0b\",\n        \"encapsulation_seed\": \"0584270ec26f3b9818e4af074d17b2d51037cc8dfdcbe3b140fa4fed5deebc54\",\n        \"sha3_256_hash_of_ciphertext\": \"b0cd3d31583e15ee8a55d85cd770cc6d64ab83429aebefdb55674f382b605c80\",\n        \"shared_secret\": \"9104061d3dbfac187f3a9eed801545a52f1fb0c3979ca8315aa31f67775d1036\"\n    },\n    {\n        \"key_generation_seed\": \"2e889f44e28901e9ac7ca6b2fffcb124c8979401b17064d7e1d51a7e3c3adbfa0e145e44aae52cfc609e6f47fd7a6f6af877190ff52256d0ac5b05b89c3f449f\",\n        \"sha3_256_hash_of_public_key\": \"21b12640bf755e94ba06204982458a9be11e1da542ece4f3d284886800fc8e8e\",\n        \"sha3_256_hash_of_secret_key\": \"4e3947282ebe9f8cd652343c30dfec9a5123c237af2fbb25aca522b6bb6bc4a9\",\n        \"encapsulation_seed\": \"51e05c7b4ca3079781e8293f4eccebeeb2f8c8b4c59468eddb62a21bcb4ab8a3\",\n        \"sha3_256_hash_of_ciphertext\": \"43c21d2fc350a9682e8105ed680b36a04d02579ebab292d0a05db185021dcb44\",\n        \"shared_secret\": \"ca249f10d39267ec3725f56b90eb2e22cf8b577116af350f3d3c1e2cf090ff73\"\n    },\n    {\n        \"key_generation_seed\": \"174aaa36410566dc15a5e62874218d7abdde0b2c0f30d877bb80b1abd5f5a0a450a7a2354f7e5cefa6f4a4e9a1c411eb9364506e9e1204a8acb3cb77fbd2c4ed\",\n        \"sha3_256_hash_of_public_key\": \"95d9e5b9151d87fed52e287992acb897a07b10ada1dd83409a5ccddabf9d7cfa\",\n        \"sha3_256_hash_of_secret_key\": \"79e973da94d9166321c476a28a98a8d03ce079c9a99d6e4f55d2e2b4de936123\",\n        \"encapsulation_seed\": \"9eca0fe36c80fc5eba171c3ae66a5b1c923faa50b4521bb055e7bf51005c93df\",\n        \"sha3_256_hash_of_ciphertext\": \"18ccc37804b42db21ae4d7e238fedf4594f3d55303dc80c0e51c748ff4906ac0\",\n        \"shared_secret\": \"82a3856ca48c5dc582ac25605ab0c675ad646ee19acbaaab4ccb5350a3881b49\"\n    },\n    {\n        \"key_generation_seed\": \"351fe4313e2da7fac83d509f3103caf7b4c64a4d458fefdf636785ac361a1390f072d9b5a99f9c7a0a011e4dc10f6b600d611f40bba75071e7bee61d23fd5eda\",\n        \"sha3_256_hash_of_public_key\": \"3a7acfc3d283541d985e0abd85eba5315a17d6c4a7e4f248673da60c341c29fe\",\n        \"sha3_256_hash_of_secret_key\": \"2fda122953c3d9db88caa36cb8d5621663fec1dd0e19a274a5d85bea7a126076\",\n        \"encapsulation_seed\": \"0c5719261caab51ae66b8c32e21c34e6d86ee4aa127d1b0195663c066497b2e9\",\n        \"sha3_256_hash_of_ciphertext\": \"024ade86d89c33d9d38face3b92986e72c699467402fe9c5aaca0904c5f5737a\",\n        \"shared_secret\": \"f1e13731a14d39f474806b8c177e23e4e2301a3b839539fef9591a71e4f67d29\"\n    },\n    {\n        \"key_generation_seed\": \"9bc5315580207c6c16dcf3a30c48daf278de12e8c27df6733e62f799068ad23d5a4d0a8a41c4f666854e9b13673071ceb2fd61def9a850c211e7c50071b1ddad\",\n        \"sha3_256_hash_of_public_key\": \"21916dfe025b78fc6d4dd1d1541b51cd3eecca90ae52177431b33c708faf17b5\",\n        \"sha3_256_hash_of_secret_key\": \"c98bada554f301506c532ec774ee112106358d0b320407fb34051a604777f030\",\n        \"encapsulation_seed\": \"0e59f6f9047c784c1f00b24454aa4f1bd32c92ae7e626549972f86fab90e7e89\",\n        \"sha3_256_hash_of_ciphertext\": \"b2737a0bd104c46a5f861914855f498287a33076c32a4241a46cf9690181ee98\",\n        \"shared_secret\": \"79c5817a4ba25295cfdc817cd303f3465852b93c0c908fc4a79e88c45f3b81f6\"\n    },\n    {\n        \"key_generation_seed\": \"d8b907b34d152ff8603b73051f772daa71eb902c47b7e2f070508269d757e02e36b817736cbc5f7b1dd6eef5fe6332fb1a598f3871e5470d440fd2ea631da28a\",\n        \"sha3_256_hash_of_public_key\": \"8f62011fbd5a1c10713d42a00a79ae7672e5e321872971f24ff71ed754178d63\",\n        \"sha3_256_hash_of_secret_key\": \"57d13f22524022911276023bff4af90abdf04885e2a598b04fa789123295835a\",\n        \"encapsulation_seed\": \"a3963ade17d69debbc358dda82c7bebe2c39d25b36813058e7a161542e3f8c2b\",\n        \"sha3_256_hash_of_ciphertext\": \"70dfcd3fb0d525cde1e38e158f6a4234006821031941efe3f9b4fa1e70c8bb36\",\n        \"shared_secret\": \"d92f866a744d0af51c8c2ba7b1fdf816e0334bff45182cabdfc722d75f8140c4\"\n    },\n    {\n        \"key_generation_seed\": \"684a29e4e5480a5f2533e1526b5fac8cdf5927f3d85087c71f928c59690eb56575d12195ec32a8686d0600e45d4a7f54219b0d7a3826d193a51b9156ecf2edd6\",\n        \"sha3_256_hash_of_public_key\": \"ed3d1dd05854a6542b24090a680b9aa9d6c65ef31cf1f4f5708affafeb2e3989\",\n        \"sha3_256_hash_of_secret_key\": \"d5bbcdd1c2fd57524e7926d071f71114a62b95f0579b62ac0f92ccaaac4e9dad\",\n        \"encapsulation_seed\": \"97beafabf2c8575586487c7a80e8af5fc50f94b6051c1bc66a5ae9f66be3cea7\",\n        \"sha3_256_hash_of_ciphertext\": \"c54e484b3b05c6bb40bef10662de29ecda288b9374dcef8f89220d1bff2d09cd\",\n        \"shared_secret\": \"53b3b4ce1e75cfe52d22450bfa763d07985dbc585166b4781a7e6542f9bc03e3\"\n    },\n    {\n        \"key_generation_seed\": \"d76b3573f596eb286ab5231feec7499686b13021be36cb126c7ebeb9d7030daf248c0a21ea0bb6d6f56f12300e8584d8e9a34e0e6f52227281151ae4c305fb8f\",\n        \"sha3_256_hash_of_public_key\": \"6fe12a1e2d742dcaf56c585651ed6edce4f410aca0fc83275b5acb19daeb149d\",\n        \"sha3_256_hash_of_secret_key\": \"b9e5eb23d136e49d2b5b7964430a1f98c78cd3526f97b1fa0ffb8fb0ea9ffd79\",\n        \"encapsulation_seed\": \"75461decd34c50d6a094b4a64fb75e5e9479f8f9250d82bb7d729dedeb2d4b65\",\n        \"sha3_256_hash_of_ciphertext\": \"763f4d04f8eb62a3599d9d095c77861f122e90a0113fa290b17d500766fe333e\",\n        \"shared_secret\": \"e7165b66834d919f8c8737c7b4df17a0668c57a87b821af78fe68cbea325aab6\"\n    },\n    {\n        \"key_generation_seed\": \"b87439fde81c9e39eebe7cf741c685785532c1dd23e8ef868b9ce7a541010f3d1646460817a0fce5836bdfe124a7448e7adf7b8ecc2652ac6d280e986682df71\",\n        \"sha3_256_hash_of_public_key\": \"30c784bb2ca3538979b24246c2644907484719c531ea39f13c5a34046f8e5cc3\",\n        \"sha3_256_hash_of_secret_key\": \"ff96c20a150142ec36186277a6f7b15e4fb93e9648385ef23186fbef674f1600\",\n        \"encapsulation_seed\": \"2607dcf4fd6ca1c614c21b5e37c24981c32b91c8c3e6955777da8a3f5d9c9335\",\n        \"sha3_256_hash_of_ciphertext\": \"edee28e97f72a1798809668a1b9b9b3dc05d794d69af6cb476f524e6acad3d8d\",\n        \"shared_secret\": \"19599e218264837d06839b6cb9a09af3bc4cdc78f7d9c00fe030ee92ba3bd54c\"\n    },\n    {\n        \"key_generation_seed\": \"056661b38038da4fdd7426f32a81576c73ed84843b305168a374f934e27a4e1b79238a80dcfd7c992d84b2dffa67493e669243d4fa38c46b090bdf86bc548411\",\n        \"sha3_256_hash_of_public_key\": \"b30fe432c2e9744430805aef6b75cf3011ff387e323558212b9d71ed71f044f7\",\n        \"sha3_256_hash_of_secret_key\": \"2c4c6d6ed6fd6cf8b53a352a038b9fea6648a9521604140f54268381dfaa1144\",\n        \"encapsulation_seed\": \"38c89bbe7145c29e9a831c11431eb9929cb24fb4992db20737e4687d397fd732\",\n        \"sha3_256_hash_of_ciphertext\": \"b536c56ac5b187bf7372e726bef28c7a46b51e2bb3bbbcb3cab014c6f5999061\",\n        \"shared_secret\": \"dc5f3931026bcedd2f57b65601f683895c365862d28a65356e94049773de2ae0\"\n    },\n    {\n        \"key_generation_seed\": \"a1b52d871612a1c611ae0944f9e71858f35d3bd14f20e96a931720668bdf0a6b1f135cf64b6403e103afae34da038613e2853bbfc36baafa3c6a95347193f37c\",\n        \"sha3_256_hash_of_public_key\": \"ab02b962b6350a9e1314baaa272b6b13db3d1edc9f09d3addf07f6826a3556bf\",\n        \"sha3_256_hash_of_secret_key\": \"abf4653476aae658e4603990ddddad56c09da5fab6b9a3e328b9fcd670547652\",\n        \"encapsulation_seed\": \"b2c35e33c72d90182791f0e12a0324f5b216efcab2c8da1bee025dfbe13f4152\",\n        \"sha3_256_hash_of_ciphertext\": \"fc2394d4ed9b1e2b073d73d02eb4ef8ab3633932e58641a58507d7c977b62c04\",\n        \"shared_secret\": \"7dbfce1fc7d937884e7b3fa7c8eaadb37e1663f77d7c8659b8f43abadf16cba8\"\n    },\n    {\n        \"key_generation_seed\": \"952b49c803d6d6fba69f4375adce8594847a00bcae2179da49af2aed0423250262d7033947ae42ca53522a65fbafe18d3bc3e0cb66164e9a094fe4b44d8977ed\",\n        \"sha3_256_hash_of_public_key\": \"c153354b0187e658306a0c860b1fe6ed14686ca77d37b7c82d66ff62149406b7\",\n        \"sha3_256_hash_of_secret_key\": \"bc48868d03fb12ad5a98d35a739388b66e17b589aeb6ad4335d2d2e0c933910f\",\n        \"encapsulation_seed\": \"afb7d6dc2b7eb6d84acc080c1be63c98afe7b07786b5801f716444a3e8e64800\",\n        \"sha3_256_hash_of_ciphertext\": \"0fdc0a9a35e5cdcdea8d39e95086e35db8f4ec92f13a7d9afad49adb5faf1e70\",\n        \"shared_secret\": \"09f64cee1af4d8738ab149d34a106ea7b19ac43e5a2536defe689824409050ba\"\n    },\n    {\n        \"key_generation_seed\": \"3c815e57e9233e975fa1630208aab206b71ae0db37a7a8789ac683d9f9b2d29801c8e376fdb140ee343106c093af7cb149b316ba79446ceb4e5e0cedb9b164f9\",\n        \"sha3_256_hash_of_public_key\": \"2ab47ca9355ece6cc643c3274c46efbd6e927b8b4d11ae8f80b5345b487a5c71\",\n        \"sha3_256_hash_of_secret_key\": \"9f65505a34f12eee3e5f6ba1cc622dc0024c4be87dc0648ff9e1edf9ffca943a\",\n        \"encapsulation_seed\": \"28f5e9dbda122b2cf8f3754fe9e0c73a84ad4b0c093522e0b62cf815d60bbc3c\",\n        \"sha3_256_hash_of_ciphertext\": \"5c7bfaf193010937498fafd5f4eb4665996c6a963ba25368439dbe05c56bd99c\",\n        \"shared_secret\": \"7104fe381d6d7995b4d550278a66a719b9e79d9bdc38fb0bb60212c4355cc520\"\n    },\n    {\n        \"key_generation_seed\": \"588760826dcfbd36d9abe6ae44a669bb3ebba6a218eab69e30f18a3bd536576e0e860576285483bb5fd36e2f944d32c4317bebc1e441470c1372046a790d79d4\",\n        \"sha3_256_hash_of_public_key\": \"3ab27768ce397a94bb7d29f5dad97d54054915eb66be41023e5d7052a10ed1e6\",\n        \"sha3_256_hash_of_secret_key\": \"2b091ca0237c155627226a58c1ea9a049127e7e30e397307ae20343e21408dbe\",\n        \"encapsulation_seed\": \"b0d713cbef0bb1df70cbb425d1e9373e9f7790fdc7980cc96a240dfc53f1e8e2\",\n        \"sha3_256_hash_of_ciphertext\": \"1987dbb44cd3fcd1b3fded283f54d82a2dd146508124282d59a8f862be82a2a0\",\n        \"shared_secret\": \"79b1ce19715dd0a74ada36d31f63f3242716890a66d6348232c914c8e5c4c499\"\n    },\n    {\n        \"key_generation_seed\": \"47550e9edacb6ddce3d9ab81f6b61080dd4f2693854acb05e0ccc7a4fb6390fbf89d7d99d5c3e0d10d6ef9af054d842375f695abb28e3b8eb495100f04306e92\",\n        \"sha3_256_hash_of_public_key\": \"4c20aa5a85b2e43c56e051698c75bfc27bb9b1722501a6502d1c0dac0aa7f1b0\",\n        \"sha3_256_hash_of_secret_key\": \"684968be82e153d8eafea3ad507544b512bc1b0768775fa5732a12ec2b3b22c6\",\n        \"encapsulation_seed\": \"32bdcdb7059fe27f6409901980c080308951ffd90deffa8317b4d213a5f04495\",\n        \"sha3_256_hash_of_ciphertext\": \"5a1273ac88362d6933e9f8e203af5df0ce809b23e125abfbea3f72bc386f17b6\",\n        \"shared_secret\": \"66e872a4b3baa42bc3e8e4ee787ebe070a094f05d2a0792ae2ae60f8bd0ee0e7\"\n    },\n    {\n        \"key_generation_seed\": \"610afb64be8cc1df288cfb016ee2f44c6c07113de7f6fee071fe0c3fe31c6215cd292e4c5f9e1a55e0489bceffb204d672a6215f4f3980a646d9f880817c52dd\",\n        \"sha3_256_hash_of_public_key\": \"72c30933b8e50425fefbf58d711f58cbf9fd8ebd2835a1b55469a2a1b993eace\",\n        \"sha3_256_hash_of_secret_key\": \"f156a8742efc92c7a7c5e07116d139872ec520aad1fdb146cbcff70c350a45a6\",\n        \"encapsulation_seed\": \"4ed7c92d83bd03b2a25b567f17ae55542e2f6a4308ec0f3fe69f8ba5ae24331b\",\n        \"sha3_256_hash_of_ciphertext\": \"c3c80130ce1ccb69036c753567b55e2e93df33496228735300b7640f2993c09b\",\n        \"shared_secret\": \"56551e57abc7b80a842db9ee65aaf6e65b7c4ca10fc297e9bb0a6364e6255bdb\"\n    },\n    {\n        \"key_generation_seed\": \"e1953800acaa85ac02a906c72cb8e8d704e8d27820345f88f71e89c1f549afcc8c64c049c6dfc0f1476cffd520b055756162f7ec94243de6b14ac0b9e5fb366c\",\n        \"sha3_256_hash_of_public_key\": \"bce58a5d05a4840f835b8ce39703f77bb31f20b9ee4fd3795c2e326244208b28\",\n        \"sha3_256_hash_of_secret_key\": \"abc33aecf69474343f3848633db85e595a465bcbd408472257e00be338664ecc\",\n        \"encapsulation_seed\": \"060ea5d2ed1dd88144a9885e79278590821c22917b55a48920f96b53ebe0e689\",\n        \"sha3_256_hash_of_ciphertext\": \"a500aa79a567933c2cb80ea580fff3298a345398243052f2ac292591810328b4\",\n        \"shared_secret\": \"30abe054c82a82299e7edd52870f461ff6048daab627b6c848a9d4f1c4641a0f\"\n    },\n    {\n        \"key_generation_seed\": \"c719f9b2d16399b7326ce4eca30dabefe8fdaab18e9f6df888b0a134ef355570e40771856eb77e4633504899fcb86c6a3d433d0b8d60e26f07bd61f1d4ed69bd\",\n        \"sha3_256_hash_of_public_key\": \"0293675aaefa1219f8794d114bbb004463f9c631729734cb430f26f38886537e\",\n        \"sha3_256_hash_of_secret_key\": \"b25401df9f852f7383fc87fa7cbd267b9de2e80bb37946e9fa8d040134a9e31d\",\n        \"encapsulation_seed\": \"10ef9426f8c4a13b52325c5bb4ead4596ecf2c6b5bd2d37d8350e90d4164fdd9\",\n        \"sha3_256_hash_of_ciphertext\": \"3e0e87ded530c595b63064109c6d64c78253f3bbac5f3bcba552539fa7daa004\",\n        \"shared_secret\": \"4b525f467ee0d96c1f4b899a114936343ec21c74738b05555b2bab9a5d0b5513\"\n    },\n    {\n        \"key_generation_seed\": \"e9acbb774be970206c3a738e243b420805a509fa59fa902044be2f0d013650d2ded5edaec5de3bf5b4d7c2f2e18e87f499c1968993eff196753db8045e2c8ba8\",\n        \"sha3_256_hash_of_public_key\": \"cadbc64e263f1afdcddf2ad63f2fcd19799a0a8f43ec867477e249ed5fe716f8\",\n        \"sha3_256_hash_of_secret_key\": \"ae483cd66ace708eb15d06b55b1414e1ca1cd440d8867932261fe16a41eab8dd\",\n        \"encapsulation_seed\": \"a4bd30a64cbf29a4e290fa1cc1dfb99e68348713041e4409a1af23c5d80c15c4\",\n        \"sha3_256_hash_of_ciphertext\": \"b4c90f9d9595c242112c963a6f24b6023083a0751e341522eb4460a0eed65f25\",\n        \"shared_secret\": \"6cba1b31809b333ea40f2f67bad438226d91bd61b08860357a840cbcc8fabfc5\"\n    },\n    {\n        \"key_generation_seed\": \"c1b3cbffad4b306f9af0cdd3028876486dbe858875c9b6497fe20172a986c82b1c96249919cedc2369d8d739ab125e0d2ccb82dfebcd90240a545cdfe07511f2\",\n        \"sha3_256_hash_of_public_key\": \"5ca1708c7c6e354b69720b4b4a0c358fe9a6ad3febe78bb2a71691658acae21a\",\n        \"sha3_256_hash_of_secret_key\": \"eb002a4709c8b95bf166e0942d47453c32b93e32e4273aef846c296d1590d58a\",\n        \"encapsulation_seed\": \"f4b66a7d3b65b896dfe100b2cad24b175a1168cfd2ae11fd704b835f6bcd311a\",\n        \"sha3_256_hash_of_ciphertext\": \"3d21fa1e7c4b9e5b3f68f956afe6fac216d42fd9a3707b7a61932c8ebb5103b3\",\n        \"shared_secret\": \"8087b456d37e6aff785a0ca104cb03ef71fa2d6652c52dcd86220cacf878afeb\"\n    },\n    {\n        \"key_generation_seed\": \"ff7495b8575b5a98e4fd21fb4c3e58cbb60f14bef21aa74cf8802e3153f14807bdc370460375a778d1a31d01c42b66367ed8d9e8f84551002f552f0e52102b5d\",\n        \"sha3_256_hash_of_public_key\": \"04f0066489947b572f76e1dfc2e24297b210ed0aaf228788a0b349d11689e064\",\n        \"sha3_256_hash_of_secret_key\": \"656696013b36db5535aa376104d5e2beb2c9a708282aa6a5f0ed42cbeefcf98c\",\n        \"encapsulation_seed\": \"1d7b03d3c5eefb8ae5799dc569aa668f1bcb8c86607b089d3530cf61d6380147\",\n        \"sha3_256_hash_of_ciphertext\": \"a29dc0e0107aed03c698c2448cba21940bf9923c2098225ea3421bdb474a8ecd\",\n        \"shared_secret\": \"6799d393f4000857868049c19a102e5c04c55a6bfe3a41abeb4fb6d5228cda97\"\n    },\n    {\n        \"key_generation_seed\": \"bdc3fba1c32751139fc45bacffb3ea97f26573d804a5f27a459293d95190ed8efd5a08f656a6eb8cd20679930a31caa6a6331c4b133a6838c223ef9f769f6246\",\n        \"sha3_256_hash_of_public_key\": \"67ce6c8abcf3ec4d93505d3be02c039e5a12538e5e59adb5a5d709b9b342938d\",\n        \"sha3_256_hash_of_secret_key\": \"b68d06399932cb2d32b2a2aaf12e68568f160092efac36ade3536cfe6fc88d45\",\n        \"encapsulation_seed\": \"554f3385b382f4a46314de37ee3885addfc5332bd4038785094e0a832e9e8c2c\",\n        \"sha3_256_hash_of_ciphertext\": \"93a08f27c7cd6ba3d5e6c8b6c833d8c65f05edb2cfd7eaf5bd392cd1563552ca\",\n        \"shared_secret\": \"dbbe6f3b6f5a35789697792e209428ba1f53d1b98ac2c0d1893cfee641e40375\"\n    },\n    {\n        \"key_generation_seed\": \"447f6076a627bbc5ad7773fbfeb14b4ba9ac43a0f8b99fb6dcd5e452aa3c47ec20a7237801f470fcc2bd9fd7bea8322859b850f7882d362947432913dd068c01\",\n        \"sha3_256_hash_of_public_key\": \"7fe853da745a27a1462668bb66c4348b7f4bf25c70527b360b2fd104cda48fe5\",\n        \"sha3_256_hash_of_secret_key\": \"85a7c0a52f7898df5e3ba9ee378057b9e354dc2108c5f8c60a10fc20c9eda749\",\n        \"encapsulation_seed\": \"38bf0033b779edf5367d9ebc01c988af90904c560970815837380650e4749eea\",\n        \"sha3_256_hash_of_ciphertext\": \"23e8b844258ff739aceecb17073a7f2be2f89030ba7ca699470e4add6f55321b\",\n        \"shared_secret\": \"494550faf270431de90c96d2ddcb7c19249d5e85305b3b43626386c30b7aba5f\"\n    },\n    {\n        \"key_generation_seed\": \"2d5df64d62cb07fe630310bb801c658dbf3d97993e68626745de39d37fbfc2b27b534537addaba4ecf14f02ab317d36cb9f0f50222ced7cf029dff8a0d3d2fd9\",\n        \"sha3_256_hash_of_public_key\": \"65297f711f12a5ff123e6de59d1f16878e93a31612015fb961bc572f3e999cea\",\n        \"sha3_256_hash_of_secret_key\": \"f80261900b053c4d1c5e3b445588f1aca6a9959b969b6a60df08f1a12da1b661\",\n        \"encapsulation_seed\": \"048ea516d0ebbd9f709b47eaac66f344c571cf50f0d01c9466aa061a50b66a24\",\n        \"sha3_256_hash_of_ciphertext\": \"7c4f753d71b67d7a6691db0e7d9bf2c2a13f9f48a0d9602be60e080262bf50f1\",\n        \"shared_secret\": \"eec9e658edcad5a8a705644ccd35aa3d785cc258666ff749bdbbafae6700f1b9\"\n    },\n    {\n        \"key_generation_seed\": \"25056d1b8113bb362dd979d98643d7a7ac9c4f95994c0ba060609b6d07002ff3f48a9254dd40b117941fa35a66bb50296327b725525deef70e128ca8045ec451\",\n        \"sha3_256_hash_of_public_key\": \"51634cb33a2bc3fc22ff47b58d7879d703bdd661ad3c290a6d812485ef0ce8ff\",\n        \"sha3_256_hash_of_secret_key\": \"e9d2895dabc85514f2f1a543440ac0de41d49cf21686327bcc6066d21a2b93a0\",\n        \"encapsulation_seed\": \"686c921c9db1263e78ae753b1c9c2e7936b8229dca48c0942c56c6bca4f10917\",\n        \"sha3_256_hash_of_ciphertext\": \"8d971865b1ec760640db6e480ed27fcac239bb1c36e72054afc530d957672c27\",\n        \"shared_secret\": \"d5c5e6657d310b0ccef250c9664a02c846ecb241f2404ca851d8219f93cb0d27\"\n    },\n    {\n        \"key_generation_seed\": \"e4d34e12982aeeb1d62fd488d9b9e28557ed3429292239fb4f76fa9098009acae6c45c7fc62329b13c8d29844405db8ff6860de474bf727ecd19e54e6e1a141b\",\n        \"sha3_256_hash_of_public_key\": \"45cccc2997b502ed631257065214ab9afed11f00ca5c18c92c4d6b917165fd1c\",\n        \"sha3_256_hash_of_secret_key\": \"3a0f0c13760dfc8bf1bf79bdb1b4f94aa33989529be306bb826b07e089105b47\",\n        \"encapsulation_seed\": \"2387772e50059cabda53cb93ba24b19ae529496c03b36584169451525c4a0e7e\",\n        \"sha3_256_hash_of_ciphertext\": \"c60ba523dc75a1c9f8dd617f1cc775f6d1cee0fd7614da1a5366eee5950b6f10\",\n        \"shared_secret\": \"f62460025ebbb273f00207758a1215c3a8053d2ac66cee11c6760aeef7e35d24\"\n    },\n    {\n        \"key_generation_seed\": \"cd6a99396eb3539ca663a51e42063a3a262cc1c5a5fce1566f0597b52ad9fa325a3407f591791a5db4578b5972093a95bec3b8e70c1d542c9b5c9789729f8922\",\n        \"sha3_256_hash_of_public_key\": \"89560d4e598328f6302a9762bda2b0f29fa8ee34fe48dc4847810fc6f44cc198\",\n        \"sha3_256_hash_of_secret_key\": \"30f40a1a6f4adda2a9e73f3a881f3d10414031a0f5fc0f70ffa4966b29bb1a7f\",\n        \"encapsulation_seed\": \"155c29c5f0378df0cd0e847a80a07143cf7522fcd880c9229eb9feb1ce340cd2\",\n        \"sha3_256_hash_of_ciphertext\": \"932a09da1c6de03fddf0b45ca31f2446c5c2a3d47af171cde29149167e735cd6\",\n        \"shared_secret\": \"74efee46e7b26f5022416ae9bf4a52a3940966b37fab0c3ee2e8fbb24ded6bf8\"\n    },\n    {\n        \"key_generation_seed\": \"6c8c53ed6f65e6b2e324b84364e10de42d1c26a106d4d1c99eee79c78586fb55b9402bf02481ce4b27a52e87feb92c4399c7f2988d40e942e7496ad15ad2aa88\",\n        \"sha3_256_hash_of_public_key\": \"878025deeed7dab8e62d43c3d2096e4682692537c70ebab9e1561cba88b05ec0\",\n        \"sha3_256_hash_of_secret_key\": \"5469881eca81b37faa66f4d9f63c20ecf61fa8337a095410fc19eeacd774b863\",\n        \"encapsulation_seed\": \"a9cb9a61a3324b1ea5afe693b32784e2871096b2ca14a11acc9577c52359a241\",\n        \"sha3_256_hash_of_ciphertext\": \"0407bedaefe91d921a6442f34fe88c04e62389fc63dafe78a1a2b93723786a10\",\n        \"shared_secret\": \"92fd1bb6ea9f1a0a195b3ca29e457f4b3f401fb4521842196d9471f50f5c7249\"\n    },\n    {\n        \"key_generation_seed\": \"2107204cd995f1df14314d5381f8c5440f09a347502e161cffc0a2ec3dcfbc7324c3da70fe850e80aa818301d60c70f3038153866dcd5d179e22db59b8991bb4\",\n        \"sha3_256_hash_of_public_key\": \"7d30385f988dc748b843b7b7f569e58ccc9215503e1bc2f28f5019fc72fe6d33\",\n        \"sha3_256_hash_of_secret_key\": \"5b425d514afec91db185ec5e84bfd545453da4f3acfef398e7b3548c63f713f9\",\n        \"encapsulation_seed\": \"e99fbae8a024ebbbdcef32ce213f6aa942e3eca925e5da4c09975d773b33a175\",\n        \"sha3_256_hash_of_ciphertext\": \"886a86759ae6a21a6dabe37a4b4443bdd358502f0719b5b9178dbb6b9f7e27e6\",\n        \"shared_secret\": \"e1a195eb1093af69edf107980f94adb3058378cb79dc807684c26c4ee1308533\"\n    },\n    {\n        \"key_generation_seed\": \"63a925685a8ac5bbd918faa33ac397d1ffbcf99135d9da7c3d6ff7aa4c50af3d3afdb8a246a56ee71465591831c371f2eb87467b0559dedd776ba063ee6d2f93\",\n        \"sha3_256_hash_of_public_key\": \"0697d2f9e047e603b8845c9ecb168576f9d8bc7f3c831b6ec15c5fa4f744315d\",\n        \"sha3_256_hash_of_secret_key\": \"8b634d3c1e118577cc095a8bc53d05bc8c869f2001f3ef591dffd8cffffea969\",\n        \"encapsulation_seed\": \"67a216f37d67f5e74f782f1badbce1cc8c80a6130aec305b421899a4faa0a6c3\",\n        \"sha3_256_hash_of_ciphertext\": \"a9c68747a9697af9d9442e3d5341161afcd1977777bb40dfd8642807d96f3ccb\",\n        \"shared_secret\": \"fa8721164f599caeb949141b24a124f2d576b3b58c1914af2b05da26b09bee30\"\n    },\n    {\n        \"key_generation_seed\": \"6a1aee5e708c1b47f02bdacce4f56c860f74fc7cfec1ef3b58285b1c8ad7fec2230e05b7114ff0395cc6634db1eae8258072d09c09f291e92d6620b177dc50d7\",\n        \"sha3_256_hash_of_public_key\": \"d49e426ae85eaa6c911c4dca80caba6e28e5f645a54d8c016de51a2b98241a29\",\n        \"sha3_256_hash_of_secret_key\": \"cb272fd45a2a27a517bbe1d77d99c027b8664d596bd77d18c4e861ab9900b0fe\",\n        \"encapsulation_seed\": \"52b19fea232c9154a3e431e9d69cda40013cf2d485c3cd027ad24e645420420b\",\n        \"sha3_256_hash_of_ciphertext\": \"a569fc93ed9b0342e4090782e82b576632dfef108ece59234c783f80e1862de8\",\n        \"shared_secret\": \"d479c2f5e622cf848d921a7155cbbade062d0fb3ce7535d1859eb03e18ac64f1\"\n    },\n    {\n        \"key_generation_seed\": \"6396b328b100e4c7f4bcae69875edea1a1982421558c608c13c592bf7b5d0fef1100ced48add211a5c937b8d6079d8e271af3f949edc61f70e60453aef20dea9\",\n        \"sha3_256_hash_of_public_key\": \"903d69da169d8f3f65eec290acf30078fe51bcbd1aeaf412dfe2d31c7b10157c\",\n        \"sha3_256_hash_of_secret_key\": \"87b236ca8da0c7a9d38d7714e7ac16e6dad2fb5282a04b846afedbbc0449b395\",\n        \"encapsulation_seed\": \"64440adb05db3308b189bf999f9ee16e8ee3a6ccbe11eebf0d3ae4b172da7d2f\",\n        \"sha3_256_hash_of_ciphertext\": \"d74122c64015ba74b20c9a675bf688952d42ea421aa5c7b6c82eb6dcf0cdc092\",\n        \"shared_secret\": \"0dc813eb106eb0d4864ffc38432937a1db0d27745788775a8299e93d1c808f18\"\n    },\n    {\n        \"key_generation_seed\": \"a453bcacdd2b0d4646009e5ed451c3c45f08fb827ef733db3c517a9dc1af93e67a3cc8aa3239d4c52ce4c95afdeff6efbfacac10d294edc0e7cf4535059bfdba\",\n        \"sha3_256_hash_of_public_key\": \"08cff1967030a528e748b708b0fb783577f249c04ea5536d2da034fd0d15fbac\",\n        \"sha3_256_hash_of_secret_key\": \"de3ea809c8eaa873e0aaef44d481d8ae72799a0b746c5847f3d412865871bf63\",\n        \"encapsulation_seed\": \"c8bb46b3a7344ad170c2052fb042b5a3b62e0590562ee82577b1081f6f114d16\",\n        \"sha3_256_hash_of_ciphertext\": \"f0cbdd82f5731bf4177a14a3abfdaaef5fbe94a71ff3f1b7852a010b1d4d7eff\",\n        \"shared_secret\": \"c71d65ecbae83e06c622e28a4eff43c10041539d851149dbdf295eb121550d5e\"\n    },\n    {\n        \"key_generation_seed\": \"47ca2b77c5b717f423222c2730ca5cb9c856bc951d01b2b2c80bd76ccb5539b78f1481d7cab000e33fa07de8dc9627a85e76fabb4428a3376e66300cf12a0787\",\n        \"sha3_256_hash_of_public_key\": \"b5ed4c3fb678a44d92486cf091333c7f035541614729496d5dd45ce580f0d263\",\n        \"sha3_256_hash_of_secret_key\": \"c313fdffb08de4e928bf32e08a8d0310ea94f9713381f81cdd494a3d4af09553\",\n        \"encapsulation_seed\": \"2e2b70609f3fe029a14d09d5d659871ac776ce2797a0355f16e2eb68f5613fd1\",\n        \"sha3_256_hash_of_ciphertext\": \"5c266d232b038abc42ac484a721f63094ce50740008e0be68571018d8355099f\",\n        \"shared_secret\": \"82360ffb5455f6dfdfc6bfc1a3999eb7453365ca311a0077c9d74968ed27b7a1\"\n    },\n    {\n        \"key_generation_seed\": \"aaf6eb40e596a5e3e8218871e708b089240dcbe7fd3641f0e5e41e071ce49107e2f8d320ac3cb0c52efdc753282f092bc39baf4a18783a48ea031a191865eb78\",\n        \"sha3_256_hash_of_public_key\": \"e9037042553968ff3007cdb135e368ecf440e4187e554af9d0ff272911ced339\",\n        \"sha3_256_hash_of_secret_key\": \"21dc6c39559081b2ca594cee9e9825ff973158cce0d11b38a51b503952daa372\",\n        \"encapsulation_seed\": \"4725dd8fb314bfd8ee23731c2341dbe114606d9abe6434c471b5573e7df193bb\",\n        \"sha3_256_hash_of_ciphertext\": \"525a66ef29f0c8a0f989dae8592e9e00cb7f347915217d53f08a7699c2b912ed\",\n        \"shared_secret\": \"77ef6dc5a6c8ff657070e418fdb3eb272c8784a9c38bbef950c8ac1de5ec5578\"\n    },\n    {\n        \"key_generation_seed\": \"6500f32c93415cfdbc0bd31d78d5be95cb9060c8cfa2013955b56f8b6868b322393308641a9a4647f230201e1389624a296b55192a9819fcb19ab77c25f95445\",\n        \"sha3_256_hash_of_public_key\": \"806aea6700e293f433a97e4b2c8485e6b4ac19ad493c4c16a10a2a884d58f5ee\",\n        \"sha3_256_hash_of_secret_key\": \"f446ecefbf4c63e8897a89123ff38bee2aece076fc7b268b6379c996999085ac\",\n        \"encapsulation_seed\": \"818d3bb8ebfb32bf464775f7139bac0a5bddce80ec5798595992f9403002cd5d\",\n        \"sha3_256_hash_of_ciphertext\": \"c7c82e2b3d0d3bcb73c5d9203ca3acc94ae8818794afc7610cf48a21e830c450\",\n        \"shared_secret\": \"b0978add3085e1c972bfaf86655a287946f3853cfb372f6fa5813a11b6c4e103\"\n    },\n    {\n        \"key_generation_seed\": \"7643cef2d62cc5aaeecf754653ea62294cd2208e5bf3ddeea209e3dc45373d49eac9d531a532770837a854b4f5531f6e0c8d6c10183b30d3435498c2dd142951\",\n        \"sha3_256_hash_of_public_key\": \"33df23b37987c6b557e4c0f8fa9e466312f19e7e90cd0a67abe6a145cbca9d44\",\n        \"sha3_256_hash_of_secret_key\": \"039031ac6171ad5fa8734fa3d60cc5b6590574c09ae0c02564c1907ebc772d3c\",\n        \"encapsulation_seed\": \"c92aa5fb91c980d9cade9ce99d4c75b2ffa7d6a6ff9bd59def1aa701f2a0992b\",\n        \"sha3_256_hash_of_ciphertext\": \"6fc3012eab242c5a3dcf99b82c5e5230fb8a4d45902afc7bb82648298d8a00b3\",\n        \"shared_secret\": \"b888ef3a969e162edab17c3d3de9ca682de60a0fd6ac97e1b5a54171dba12a3f\"\n    },\n    {\n        \"key_generation_seed\": \"f8ee95521060c03bb8dacc79f7eb7db640f545f315613a35d447a09e504cb4e13fc3d8392cb53f36ed647364a04e37278a0e0a45b720f4a75c580c9920eba98d\",\n        \"sha3_256_hash_of_public_key\": \"30a5771b76066feb7f606a82cce122964da1be0b6872ee319832214ec677738c\",\n        \"sha3_256_hash_of_secret_key\": \"644983542c87680786b41fb07f959451f1507165353080a3789810fdf557f961\",\n        \"encapsulation_seed\": \"7e8086a01dc5b3bb9eda25bcc45d27f99874841b97237968495800e007696ac5\",\n        \"sha3_256_hash_of_ciphertext\": \"6d468584c0336dad723a1c3ea970d53837373372287371eeed8e08ca06e010cc\",\n        \"shared_secret\": \"2fc09a1852f458bc7afb58baea4d6e318bf6801e7804b98cfc250b0a1470c598\"\n    },\n    {\n        \"key_generation_seed\": \"b8bd0493a882e3a49b4e0f6256fb1fea0912562fd9ba26ec3d6c9cc12c8973abd7e4b5d8021c486b9c3114d7cbbeb7cd49eba8a61bc2bcae1f1bef30a1daf76d\",\n        \"sha3_256_hash_of_public_key\": \"31fcd120f19fe976236711e58b4ad172d25ce01eb88bc9d6d051c56564a0db11\",\n        \"sha3_256_hash_of_secret_key\": \"1502619da09b1bb5e418004fb0263c8f067cb9317053ed502c501c5b5ba4d331\",\n        \"encapsulation_seed\": \"bb321ef14d44d8698df879fd52450567657f52a2df8d111185dcd7d4f30a72d4\",\n        \"sha3_256_hash_of_ciphertext\": \"369203e0da6ebef7ae651a3111e67303f89f568b9897ae4c24497b3180e0bcf2\",\n        \"shared_secret\": \"930131d3145d5485f06c16a9420a612330843e6524dd74654a85c383e28f2cc1\"\n    },\n    {\n        \"key_generation_seed\": \"c0407e41ddf48d333978b89bcf2db01e4613425b456249e76a6f25b8a2827bf5b2dca81e3f5f748d23c9d356a2209f6b2d60247b2e45c9808de497f64f124643\",\n        \"sha3_256_hash_of_public_key\": \"42f75d6e3755c28f3081ecc9db44f6cc7cec9891756d74093716697781fc8cb5\",\n        \"sha3_256_hash_of_secret_key\": \"21b9bc0035097cb2b892a3f4ad5660b160b18973b735181beec815eaf5ba5286\",\n        \"encapsulation_seed\": \"210a423dadd899b810f011794b79aa7f860823ac1962370e791287d3a1afa384\",\n        \"sha3_256_hash_of_ciphertext\": \"c6d1d905150eb6586eea72b13f7210d9830e8e689f9da7d9c04fa7705f21cf01\",\n        \"shared_secret\": \"b276a4fb4cf77eab502dfdf56eae9f8a8ff5e7f5df3f6cfc80614b193c87f08d\"\n    },\n    {\n        \"key_generation_seed\": \"334382d39164d1989696a2ff77b25a28af8bead9883b5365eb6fcca7c1781cc9aba5068af837be962f439f233593d193ce5e08f7d66efb3389885927b89d2523\",\n        \"sha3_256_hash_of_public_key\": \"43d6c8562cdec0e87d00c8ca8060da3f031ab663ddb43148eebd67969b7fd490\",\n        \"sha3_256_hash_of_secret_key\": \"d3c172cde1f249c0a7fdb003ecc0a189776b616378b188744e407ccc601fea7f\",\n        \"encapsulation_seed\": \"bc856afe24213e3d14c3d6f9b89223bbcfb2c890722d770fa3492c1e46d1c302\",\n        \"sha3_256_hash_of_ciphertext\": \"353cdb064a37df87524874d3f60afdf4077be0ad96e1ab61a9ff1745d1e6e5a3\",\n        \"shared_secret\": \"f4924920e64013fae72cfdd1e94b217eebd55a011f6b7542958abb297e4fd180\"\n    },\n    {\n        \"key_generation_seed\": \"6995143e8eb8a6e93840f76eec844f67d2b5f75b1839a5040337e61f9806764a0f4dff8e56f68440836a072412a30d851ace2c7c6f02d60e7a8420001a63e6c6\",\n        \"sha3_256_hash_of_public_key\": \"3cabf1c47e7aaada59ded4fa8ce378ce1d9eba621ebfe8cc96a111aaedc4b6cf\",\n        \"sha3_256_hash_of_secret_key\": \"225563503590841152fcf47d4665b7cfc76e2b9de23c0e24b527395549f9f7ff\",\n        \"encapsulation_seed\": \"5fc00f89563e44b24cd67d0ce684effe5731619fd08e7d72e2406eb016afb66b\",\n        \"sha3_256_hash_of_ciphertext\": \"f11aa37ffca654d11cb5f9aa294ab734302851b434b57e0f5bb811bb5bafc177\",\n        \"shared_secret\": \"412bafc716efe4ff928d9a86ea4665dd841e2f102a8363b994a0faad63251eda\"\n    },\n    {\n        \"key_generation_seed\": \"995eff7e0d195c6d0533f3dc194d47e60f9ad14696144cde694d60a95f3e96b4b28f7e7a15a005f92400ce33db073d49b53871594a88fc45e0f94207b5f0f2dc\",\n        \"sha3_256_hash_of_public_key\": \"2853cbbda86e7039b635d4cc850f494d42b240acb54ab2316791e9ef5b45f1d2\",\n        \"sha3_256_hash_of_secret_key\": \"87ffcfe7a504e0dca284d8cf509a92a24f82ed7c46a8c1604d9a2d6d14b1cd11\",\n        \"encapsulation_seed\": \"ea22a76065db4b565ee1807fbd813b43bde72b0e08407fb867c6a18995025e50\",\n        \"sha3_256_hash_of_ciphertext\": \"ae8fb4bcfc08f8daa486b185540b501680e511f46fe8a628b8fe449d5a51590a\",\n        \"shared_secret\": \"c514d4086428200e118c1c297ce5ed865d7452cd7770363961bbb834f56c564a\"\n    },\n    {\n        \"key_generation_seed\": \"3e809ec8dd0fec0d911a4e3fac20f70fbb128c5de94dc7184ca7310ae9157a98d8128601c28b1def8d393a0db283229f7c7383152a814e7cefe8ef9d9768c473\",\n        \"sha3_256_hash_of_public_key\": \"2d5680b483287bbd3e61a91839cca9e761429186176b7bc64034ad43f16f65e9\",\n        \"sha3_256_hash_of_secret_key\": \"bed74aff196e7ec7bbb4dcaac39ee1a79cfb35140cf4c400b6ef2fdfc53afc6f\",\n        \"encapsulation_seed\": \"e9602b34fe73ad57f4bf6ead99743d645641553a5b9b9bf2e7016629e3e9bd76\",\n        \"sha3_256_hash_of_ciphertext\": \"d46f403ce5a0dd92937acc508501305da6bcd32b56ff5d986fd6a07e713ab92c\",\n        \"shared_secret\": \"a175feba4c1bab576085bb12683d2bc44e98c75f543cee714c75391c559450ce\"\n    },\n    {\n        \"key_generation_seed\": \"dbf1c465fff3d9f783bd9ee61a573715e45691147b8904439b5ffaa64f94ff7bb6d75eac6c76ced1b0a025b40a55440712ad8424672e761e9bc400d63812006f\",\n        \"sha3_256_hash_of_public_key\": \"38635cec71b814aaac223f748d13158dbe8eb902d9125fdc22202c4d59251cbc\",\n        \"sha3_256_hash_of_secret_key\": \"f3b87926951408dbb27fc2a4a6c14c40fedc8a1cf5c34ab398d91d554eae344f\",\n        \"encapsulation_seed\": \"f72b9080a6c051bbdb9b0abc1949034be0f89a9f73fe277ec4d4740c78d04a83\",\n        \"sha3_256_hash_of_ciphertext\": \"50350977c400c1318bac5e32925d0f575dd3559587f42d025f4e71648e697218\",\n        \"shared_secret\": \"9781578191ebf49b162aa768d093a332b9c849c11e240187cec2ee969d4b3860\"\n    },\n    {\n        \"key_generation_seed\": \"1f7cfd2b70863154e8a69d1758532e86c20cfc763d67c758bd10a13b24e759b5273b38bddc18488024ec90e62a4110129a42a16d2a93c45439888e76008604c6\",\n        \"sha3_256_hash_of_public_key\": \"af97825a77f2f4b6a45ec1a579f9f83e89c025d8d6876db26874f38348604293\",\n        \"sha3_256_hash_of_secret_key\": \"b2f08250a2681bbbd3c355e2dc61bda33cfe39f3dbbd2a3f3c41ee2266084cc8\",\n        \"encapsulation_seed\": \"f1e5542190db8ecf4b8d617a04fd3783ad0df78bf8dab749afb57db8321d151b\",\n        \"sha3_256_hash_of_ciphertext\": \"33acafd1de1d8d8c7a9ff9a6cd69fd013b46b79e74a9180e99d5fa87805dc0de\",\n        \"shared_secret\": \"515dc87c21e6b134a577e4eeccf43a982ba7eac1224d701cf099ad07fee77cb7\"\n    },\n    {\n        \"key_generation_seed\": \"3a19577908efd37697b8edc7fdaf47d1bd3ad01a1b77faf794bee5b9c3192a6fa3729672816f3eba84c9638a79676eeac0f22c8a48e0c5d50a26ff0844c66b99\",\n        \"sha3_256_hash_of_public_key\": \"8517ab7585926764ec7acff3c747479e837831429b97b7cf49ac3763bd9ebbe0\",\n        \"sha3_256_hash_of_secret_key\": \"7e5684a04d59f9166f6b408dbc8ae5daf3ec6678cf5eec1e5a9016392cd6c8db\",\n        \"encapsulation_seed\": \"74efa414ae171bf60b6f884cb7e5ce12028f49365daccfa23e845d551711660b\",\n        \"sha3_256_hash_of_ciphertext\": \"0515c19fb395ed94194a60a6f7883d6351fa61ff18060be4cfe2eb9f81ec0024\",\n        \"shared_secret\": \"edc2c0314c7c5b2b071b85e373c06b31fa54dc499168d4b43b15f1d05b8b7ea9\"\n    },\n    {\n        \"key_generation_seed\": \"ae0f65e29f38804a6759f70f4d01e2aaff7fe1c91ebc4f892dd0de3ab2e68ea5e03ff73e02a217659f53d8c47556bf3d8c94040f630d63605e2d0f923579370c\",\n        \"sha3_256_hash_of_public_key\": \"1bb014bb0d6489c14f5411051f9667aabce54da7a8deb73b627e3873d9390a35\",\n        \"sha3_256_hash_of_secret_key\": \"b890e330079934f2aac63e5f8d236054fabc8d6a6e057672a7a20150ae08a9a0\",\n        \"encapsulation_seed\": \"0b4c3cffb2ba4380ead13dc0d8acad2356b448a810da1df29f264c44aab6d24f\",\n        \"sha3_256_hash_of_ciphertext\": \"79018c9e998deaec058d73d702b669e10c89dd8285f431aa6e422a948a39cce2\",\n        \"shared_secret\": \"b3363e6e6dba3e41ac2c63895c461765bc8a0250880d3dd6e8a4479a7fd3921c\"\n    },\n    {\n        \"key_generation_seed\": \"6084a235f79dd093ef6d185b54e69df33dacee73a9bf2f379004421a10e3a79d9f684fb055ece19459eb464e91e126a7a6e3ed11ccee0046da234d964c985110\",\n        \"sha3_256_hash_of_public_key\": \"c9a546b5c0a567855039f6c1bca60414684e7bd1f8eeb7913f3a1795ba4bad4c\",\n        \"sha3_256_hash_of_secret_key\": \"be5fc57b3efd80d7e82b23f62123814ce04e83ce5c998ba42e7bb978dc70469a\",\n        \"encapsulation_seed\": \"1c82471dcdfca3a6942061ab4f3d5bf0d197321437c706d9cccccce449447002\",\n        \"sha3_256_hash_of_ciphertext\": \"6c1b69d56c493f6f313d3c996336b8f84b76fac2d5ab5a3d795613b27eb10912\",\n        \"shared_secret\": \"8e648593c8f6f6f7a97ce7a2d151ada30fbbc7f3c4fc517d8cbadd71e6a17476\"\n    },\n    {\n        \"key_generation_seed\": \"acd1c0217fad5caa4235544dd9de153ab1880ccf4c76f16f236fae4e4bfda04cf03a8abb0a5010f400ae5722a75bdf5a2f6d5b546b34d73857cb1bfc7e587aa7\",\n        \"sha3_256_hash_of_public_key\": \"8f7bfdde2a7116ff4010cf829cbb18512f7cf44237c02241a1f75fe3ba8d22bf\",\n        \"sha3_256_hash_of_secret_key\": \"3f53a0acb384db89ca83d031bf210b072860adcaceecd79c36b4669407c1c227\",\n        \"encapsulation_seed\": \"46fe60a18124125ab93e0c578f1c02f1bd1301595013001c7f3c2fa56cde294e\",\n        \"sha3_256_hash_of_ciphertext\": \"cc25f35631396f01cc366e019a7f15034cb2341d6c00924b538d25a227ed181b\",\n        \"shared_secret\": \"bcdd6f0d744d2a35147323a4a0451fbfb7d60d73c161c1f8c6a2b5e9f4239c65\"\n    },\n    {\n        \"key_generation_seed\": \"241191401a63afa750f05662e354dddbc683c776ce3222beb83e3cf913d7ed7ca59b3bd23b49a95bc1fad20070fec930b6060bd827d742b077092e422268e15d\",\n        \"sha3_256_hash_of_public_key\": \"27b1b921723cedf55fe756ff5fb67d555296c6185d171ed8ba01393d1a735018\",\n        \"sha3_256_hash_of_secret_key\": \"40db89fcd941566546d554db0342237611e5ef6fdf8c790f03357091af0648ee\",\n        \"encapsulation_seed\": \"52fb7cb6a633fd2e83f2892bd9441b48fe59ecee6d026f5246fa7f2a5e55ee3b\",\n        \"sha3_256_hash_of_ciphertext\": \"c5b4844dd10ecf508ea6ed2d96d2328d3f14df6a2a16093bf88ca1283e30f41f\",\n        \"shared_secret\": \"072551e254959ce9f2c67657b41122d8a98cde044bb2f60955bdc6e5dbe55277\"\n    },\n    {\n        \"key_generation_seed\": \"b9a6b0c05677e957d41a34ba03bd06f2a9092e31f63389397d7e70fde6409d18e99c0e7b82be89bc3c1eaee6680aa4efd394e40c2b3f30523c8117f7c26a8969\",\n        \"sha3_256_hash_of_public_key\": \"32a2a1197d78798bbeb13ce2e92cd7ed94b410adc37b1b31dc060af11fec8a8b\",\n        \"sha3_256_hash_of_secret_key\": \"602bedde695713681a96c94a9a6d35308102ae18d3f3beb92a981e4a3b7704f3\",\n        \"encapsulation_seed\": \"0f81a5f97082121244403da3feeb734f6084b314b8d94beb11627aa6ad1914e9\",\n        \"sha3_256_hash_of_ciphertext\": \"e4631748f7cba566889ca2c5d90c47bba17000a0d934c4242a9a3d6dfac039e8\",\n        \"shared_secret\": \"88c0c1e22b68cd65e1eedd6d6208c36492fb674e26ba4e0d4e55f831a1affc96\"\n    },\n    {\n        \"key_generation_seed\": \"28a96c71577ba00c94f99fe965bc595a26db2b3ca6ab5cf8e443cdd8462b17929c35d165453e5fcdc6f9df64526d9de698f2bd3e6bac6c7fdd86601b9ba5f4a5\",\n        \"sha3_256_hash_of_public_key\": \"7cc3f47f319f88da508f841e536a056625f206fe499387d27307257682237f96\",\n        \"sha3_256_hash_of_secret_key\": \"064bf50ddc823a97adfc93d52ecbff03a0fd5d94ab38874a5abaedbdaba67309\",\n        \"encapsulation_seed\": \"31af9345365549ea0360169ed57daf98cc5444799d4c75d9f1f5d615e9df8a91\",\n        \"sha3_256_hash_of_ciphertext\": \"b34a0a91afbc9599ae00e67ba4ebf0d8308b3e06efcfa148aed519b0f073ddc8\",\n        \"shared_secret\": \"56f717e4baddc2250873d667f73a442b05ca2f8714d4dc4d295f899217c92c9e\"\n    },\n    {\n        \"key_generation_seed\": \"c08ba2ef8c3a0a043afad931652d7a19e6e8cb670f840de5f1fa03309b2ca9ec5fe6141a25f7ab9f875f79e0a82d6ea5cde5a017ab637d5fdb7c42646a1d71df\",\n        \"sha3_256_hash_of_public_key\": \"beaeb6ff178f3228defdd117e6ba75a34abb70e86f31fdb16d74d91e6c1b47a7\",\n        \"sha3_256_hash_of_secret_key\": \"9cf056be85f240e1ae5b73656c07bfe83ba8ec7212973bac19cffbb80dae7249\",\n        \"encapsulation_seed\": \"774ae54093d694ef40b63b62c73e6c98295f606feb8699807eda1d030ffb996d\",\n        \"sha3_256_hash_of_ciphertext\": \"89243e04aa17615c309cae73fbfe985e0716c7fe3b8283b5e84c3caa67b5ad3f\",\n        \"shared_secret\": \"35f5517999e15ed842904d53d5b4747639d1165014ab77474c0dbc310e586186\"\n    },\n    {\n        \"key_generation_seed\": \"0e3b30e102d707538c2671060f603bb0b8a014103f132d63b09ece07e4a4c75b11eafeca9e810796c34e8cfce9d59342884456007b01ddd12edce6d10ed87e4c\",\n        \"sha3_256_hash_of_public_key\": \"b2b71b8aaccf14842a6d4ecb713612f801a5044147fb9e6987ad3863759de31e\",\n        \"sha3_256_hash_of_secret_key\": \"01158ea58361ef89d935c9f845711c7f581322afddaf14e255f71c1dcc9c0024\",\n        \"encapsulation_seed\": \"9f27a47604ab5146caaf0aafe6d149424f8d66e39ba3baf5e6c73b19221b7e21\",\n        \"sha3_256_hash_of_ciphertext\": \"ddf853fbd339780b3f571de2aefb30f760454f2cc1f0fca009bc829afb1f3f7d\",\n        \"shared_secret\": \"a7159981a68244549b96b27991e1323013c353bdd9c8d6f583897c35923e87a8\"\n    },\n    {\n        \"key_generation_seed\": \"2478f7d3de6041e7e5cd11c5e2ef483d1aa6218eb126444091535f6ae532fa7311136e2681df2ef881b51a092a9badbe72c9772c169808521c47149578621e28\",\n        \"sha3_256_hash_of_public_key\": \"a13cb3f23ccbd9ca6a75823d1ba14ef03664560f397133935103ded2d7480b99\",\n        \"sha3_256_hash_of_secret_key\": \"710b3a8c8d49ee38390cd2776c42ad74a520c8d6ebd39b514f6fbf28c6c74b45\",\n        \"encapsulation_seed\": \"90044031b7597b5e60a4f946b713e8996d0426d2cb013243d9b7d8f8ef159a0f\",\n        \"sha3_256_hash_of_ciphertext\": \"f5c4738d0ac3b25048186a2049668247c04033cb363e9d23b5d1518f8fa7e70f\",\n        \"shared_secret\": \"c4041a29c5b744e9039bf5155cb3ac0b799356829557a7aa3feb4b3585e6cf62\"\n    },\n    {\n        \"key_generation_seed\": \"9d405d3ebdaf35fa8722de431b669722acaaea2fd10b814310b17f78b66147d16ceb14f7662be0c42779459f69a145c0e2ce9f0bd9a0cd1bf32ed5694cc9ae32\",\n        \"sha3_256_hash_of_public_key\": \"68302cc5af214ceda67ff8161b29bc300c4be8e1a4139437aead8a9ede3cd4ca\",\n        \"sha3_256_hash_of_secret_key\": \"5d6904a6478f0632ec56477321a6d6ec5ccdf299bed0b6ee9f4b32c6b5effec3\",\n        \"encapsulation_seed\": \"a7a31e140891ea37d2b6424b59b1f84f89220f32dcb73e037eb912b389d34a48\",\n        \"sha3_256_hash_of_ciphertext\": \"b4ddaeac7b4080e5e9bccdd2cbec4395a1393e61e038bedae9542db78769b923\",\n        \"shared_secret\": \"b8441852349193321f466ccbd3afa48bafe903288108312de26e9bf0de9f680c\"\n    },\n    {\n        \"key_generation_seed\": \"9a86490f0615f3edf789cb0654066e9ee339cc59f968281f3b89213f83c692edfaeb2ef44d2f608621e831187ce79b2d2f4a20f1568bbe76b0d3d5af36111714\",\n        \"sha3_256_hash_of_public_key\": \"149ca4d94813f81c792060502e09a88ea694c5de863ce6a50516cacb1c3f44bc\",\n        \"sha3_256_hash_of_secret_key\": \"8e69c68f8a7a0ad82b033a0bdc94d253d3e7e8516d67e86bb95d219a1090529c\",\n        \"encapsulation_seed\": \"70eb3f791faa91f1f982fa477dbcddeb2c55691c07f93b04cd31b37544c94b42\",\n        \"sha3_256_hash_of_ciphertext\": \"5fbbb17b2c8ecbb8c74f2cf6259404cb9e0cadd393174e49e88298c6b7a34a22\",\n        \"shared_secret\": \"9d0d9ba501da1b46775258f5c0904721906b237c3461da6c31d70da8575fac37\"\n    },\n    {\n        \"key_generation_seed\": \"6dfd9b575872560c7bdc2732c4a28dac4db04e535eb8e402c3dffd145c09ce47a2985c1c4d203778597947d710dec806e36b0cd949fe460ef141213bfc525e5b\",\n        \"sha3_256_hash_of_public_key\": \"e5c52e639e5acd0fb97c7eb44df56df5250c6de7d171c467ce6887eaa4ee3d61\",\n        \"sha3_256_hash_of_secret_key\": \"6b452ca57379b09ea36746b5b55be3b73df4faf809d7899c5368a51eb4b18cab\",\n        \"encapsulation_seed\": \"30f4095015ba88b6d969672ca3f438c395dacf7d476ea7a9e805ce932d270a13\",\n        \"sha3_256_hash_of_ciphertext\": \"9ec7acd421fd05aeb4440720890cb1ebfba0f0ba3d9b57268b583ea10720a32d\",\n        \"shared_secret\": \"188aa07faa2b7a19b6b7bfbd4cbb1ad829a7415d601fdc3b635528db136cac52\"\n    },\n    {\n        \"key_generation_seed\": \"6fca9f4e384d8418075cc064c70730801bdb8249899d456a77130d5beeb3662cce7683f8a03d3cf04e46970ff7d6a12494ae12558346dfc8fd9370bf944a0102\",\n        \"sha3_256_hash_of_public_key\": \"9a350302631bd506be010a3f42112ae4ea731d515d80c3a21fcce60cc4d945ab\",\n        \"sha3_256_hash_of_secret_key\": \"985f528fdd675f3efdbe95a03e071f28e2dd16b425c51651a1e645f6b87eb25e\",\n        \"encapsulation_seed\": \"cf31220f44de862e1719570e1b26e897790159366a385452334fe24cdcae28ba\",\n        \"sha3_256_hash_of_ciphertext\": \"df8cc2e78b5df8a43e7ae87566452a5df656f13f93a22566116a84c30b786f8c\",\n        \"shared_secret\": \"70df7eeecb6ad19b54498071e0840f4957e935a62feba82fe29531f79c2c1651\"\n    },\n    {\n        \"key_generation_seed\": \"e58f71bf175c0550a67e00e0f7b3b7fc36bc2707bf0c93044a492626de36301a7f7054814869cf7625e45647bc1547aff288dbb90699b2ad84893f3b755d9722\",\n        \"sha3_256_hash_of_public_key\": \"866573e536b4017c02e31c8ed7455c841a5ccdb795fc200acaf1da2fb936bb59\",\n        \"sha3_256_hash_of_secret_key\": \"e8a4ede82799c3a425b82912df460d5d1e78757b4a917177489839abb92029f2\",\n        \"encapsulation_seed\": \"bb5e65669a44e5d5c709bafa98c16ccba6ac2c4ae923334f69a11543eda64f5d\",\n        \"sha3_256_hash_of_ciphertext\": \"99d967e7c92a7d7e2ed54b1339472d8780e0a7671aa9afb8fa2f19cf96353821\",\n        \"shared_secret\": \"8baaf439867c9761e78a64652a383e21682969d18f84dbae0d3a63095948863d\"\n    },\n    {\n        \"key_generation_seed\": \"e3fc575ed51513e62aba655d24cd9c8f1c6c848aaffa946c49a53ac3ea59e474d82c2f1bf2e6aebde5660fa73356982e12999d8fdafbb3cb186341d0386dead0\",\n        \"sha3_256_hash_of_public_key\": \"b33387825115cba8b0ae7da0d1aada1ce4ab05bc2479b360b6c56dfa870ca825\",\n        \"sha3_256_hash_of_secret_key\": \"7c35640775e31eaba8a119a8e89e1e2180177a55e54391c3fa6675829d721b01\",\n        \"encapsulation_seed\": \"9ddb3aa9c7905d1a438c93bcf78e3e321813580371ab4e1289e2dbf3701972c2\",\n        \"sha3_256_hash_of_ciphertext\": \"d42759ad66725175d4d8d3cb6519e9074d6c13d4d183863f1695f0e3b831a10a\",\n        \"shared_secret\": \"60b466221ec831f91a91b76ec6bbc29726f65ebcacc96f9e191f57a1399be186\"\n    },\n    {\n        \"key_generation_seed\": \"470b4943f0fe7fd0d8ec5185aba0d1db09d112934e4fb4787e2bbc6b88466e7b8b2809fd40008be70a6b184981101724bc3d5ec5e1956b510b82fd5ad0668a5a\",\n        \"sha3_256_hash_of_public_key\": \"720fd4f96ab2cac1be382907e8cba0702018ca27b28ea8f93cc19c4809885a3b\",\n        \"sha3_256_hash_of_secret_key\": \"c1ec32b739485e2437a6b4dbed289f0cb7dea0ed3b2add99d4c49a3eeda1b0fe\",\n        \"encapsulation_seed\": \"26d90b190a6c3d0d9a86cf66005154e7086749e966e7187c249ccb9329fd3b8b\",\n        \"sha3_256_hash_of_ciphertext\": \"5fae7a10471d5303e5f6ee5d1e34013528af4945de811ffa1828648986607299\",\n        \"shared_secret\": \"6a302778f406082fa285c5ee299d78b048e837c5012f42f9a80e8659b10defda\"\n    },\n    {\n        \"key_generation_seed\": \"6df4385db978d27b27d2aa5e452e4152b36f097503d9581ac3390105c5727e7dc95fa08ed106ce84660e8a4c90bd2b22634e40769aa0090a101c5dddad45edc5\",\n        \"sha3_256_hash_of_public_key\": \"bfa4b55c7baf2651415d3f28d221b291b175340a07843b299a46e02e22657634\",\n        \"sha3_256_hash_of_secret_key\": \"605c4a98f3775c9678804fd5795946c1657311d123b5c7d1544192a205c043d3\",\n        \"encapsulation_seed\": \"7db6d1a129d6123f1f805b79ad3b413012ea86aed42a05e98e7b1f32f9fbbdec\",\n        \"sha3_256_hash_of_ciphertext\": \"39e07846b4ca91147a0b680f5411c75db937a6855f08939f746ea3d5f9a11d51\",\n        \"shared_secret\": \"88a46d35cf07e48c6528b95016aa0c414344e090ee897fd80f26b67bc0451c7f\"\n    },\n    {\n        \"key_generation_seed\": \"dbacba825728444921b227cdba54446b3f6881b47be9cd02832f78b023b1bee0e15274a8e2bc08fe818b117ba28c5dfae74d54fcdf6f20052f79be333edc8dde\",\n        \"sha3_256_hash_of_public_key\": \"9675fc6d1e3cc4e0eb62d31b6b4f10022d373d2718f3d20ee1cc00ef6892d9a0\",\n        \"sha3_256_hash_of_secret_key\": \"c463b8ab9069814e5308cf9742c6ab6e08c355fa34c0d2e65df1962589eba56e\",\n        \"encapsulation_seed\": \"1d129b27be7384c359d04311fe5c44917d1fde4bfb57314f483ac617edd5ac49\",\n        \"sha3_256_hash_of_ciphertext\": \"5c7ef87c49f71d3098fe3d33b22bc8191f440bcdf1d04a46f293c5e6b16af12f\",\n        \"shared_secret\": \"f3c5586476f4814a2d3728a6f0ceed7d19d076b790d3675e48611c4b8df9702e\"\n    },\n    {\n        \"key_generation_seed\": \"690eb71fd7052b906eaec09937a8ed374e0b02afa27c2f14399932be5839fad281c38c2cb5cfafac81b96a810ab749b61806b6d54c9f8cf4bf1be0192423288f\",\n        \"sha3_256_hash_of_public_key\": \"9d162fce2f019205a2106acc8e3e3465b6fa3912a06c764e625cbe3b95dea6c8\",\n        \"sha3_256_hash_of_secret_key\": \"eeb3bd9d8636b55722f42b3342e415b23df96d1c9b2c5b9c1c2a3e619348ba6f\",\n        \"encapsulation_seed\": \"bbc773ebd2df42c36ae05952d6a64c63a5dfb82ceb3ef4f8d4df3a30ec8c0467\",\n        \"sha3_256_hash_of_ciphertext\": \"d482f25e93fd142aa009f2f2569427ebcf04b87aca2bef5e022bcbc1e5972ed1\",\n        \"shared_secret\": \"a828fc1446ff04a950e4f551e442aeba279f44de0ec5296fd981bcbe6ee90d8e\"\n    },\n    {\n        \"key_generation_seed\": \"32e0ea9089fa928482c0770da545af1bb871a03ce38604138b0d08ea2a10ca2bc06c5bef7b6508409daf847a64c8d30d0974fd3ba7476dc76c46b458a036d884\",\n        \"sha3_256_hash_of_public_key\": \"3e834e34f198ab5a3504cfa0c6af6ab78de3a3ef5667e6065e084cf5d2a5bb32\",\n        \"sha3_256_hash_of_secret_key\": \"d74767e217cfaaf75adc92927107c76d7267b1d7b3b76f2f8ae5a9044aa290f2\",\n        \"encapsulation_seed\": \"5b17a6adad541efcbf5ae4b0c0452cd2ce32e4f0f8701801c5b63e197c1fcbf4\",\n        \"sha3_256_hash_of_ciphertext\": \"3a41b6054d918e9613e8d4eab83628f7c82b6ef447ecdacd0a74cc21be6b47aa\",\n        \"shared_secret\": \"d98b18f7b6717b8f6b3e331d6d8f9d3633eb70f54133a78e2345138420edf89d\"\n    },\n    {\n        \"key_generation_seed\": \"6fb2ec719f2a0dea152bf3f64b9d148f8ab8ba88f64e61f5db53e12d59f525574f797c007e4061f95c7d56cfc7ee5c49e849dde3fea8f25e7876df2a18515c34\",\n        \"sha3_256_hash_of_public_key\": \"c5e157ff4357d3c26b7c4b45315f0689f135c85d952a64648b0a8cec03741fe0\",\n        \"sha3_256_hash_of_secret_key\": \"edc6b8e2036f9ce7ef87dc58d4866ad9f320ffab1aa22371b7b56ec727f77531\",\n        \"encapsulation_seed\": \"61ab87659525de9656af41246f20e1dbe85c24e335e7ecf9493f46168bc14e94\",\n        \"sha3_256_hash_of_ciphertext\": \"7324a073d06af373494ecfc7960cfb81484e9ae64bc16e13651b015cdfb73668\",\n        \"shared_secret\": \"b7d5919f0bab0e2715a97cab993656831bc8a3dc86c3bd32e64ccb4762f70499\"\n    },\n    {\n        \"key_generation_seed\": \"527fb88c8bd9a4d6031dad15e63878abd2b559e7e08d61f69e8e78fca964ee6ae32d432b4f9f751bde0496c580a181ffed762aa35454a02d3f1f47ee0394c89c\",\n        \"sha3_256_hash_of_public_key\": \"f5cedd022077b1a6a052f5287219393cd2e0366d0f5531b2f7ea8704d2900ce5\",\n        \"sha3_256_hash_of_secret_key\": \"882916ad7b7707feae2885f13bdf19d36931886c4bfd188fd46b6b6adeeb8d78\",\n        \"encapsulation_seed\": \"eca2adc3da1fb15f34033405ec08ef2f46163df4bfcccf8842c600ce0bc2026c\",\n        \"sha3_256_hash_of_ciphertext\": \"84e4fab74ef96f7b3ec50d7afdf69445b4326fe3ad695efcbf56426c0a6df6c8\",\n        \"shared_secret\": \"149e4e38a07d18c0b08edf9c47e425b56f7da87b2b9c855bedd29f6f0a8fe5fa\"\n    },\n    {\n        \"key_generation_seed\": \"ac6fcfaeeef795b6ef9e062f02bf42975fa01e7d91ba832f74e05269a72684d05aeda108ea4d6c6bc0fb958286850422bc357ca67b83c986048e0d0087fa11ec\",\n        \"sha3_256_hash_of_public_key\": \"a53a20ea03e400a843c8cf4d04bfe0c0a3ce63dde01045e2669f7ae5da790577\",\n        \"sha3_256_hash_of_secret_key\": \"9d1e4432908352535074efbfa7cde3e6738e073fd512e04e9601380fb40b7614\",\n        \"encapsulation_seed\": \"c4f15bec2d7701339d0ade4835193bea3632edcf89e74992620d9eb623a0d0d4\",\n        \"sha3_256_hash_of_ciphertext\": \"071204e26ed00e7a1f226d4e971cfb2d9502e17da99f5479235763cb7723ac5d\",\n        \"shared_secret\": \"38a1fcaf302905e18940605e49e5f44c747b06e789acc9c395211823598ef516\"\n    },\n    {\n        \"key_generation_seed\": \"ba2fb9318d4dbe7488057c33e95e6f054583a2800c41bb83083c330a914a12cfe63f8ffda3565c2424c89b20974b748a65a5aba75133fcb3156dfb6626a83bab\",\n        \"sha3_256_hash_of_public_key\": \"cacca228846450ebb8f04a2a5ef2d919dfa47c4aa265f4cedd10cf74eef3ecc1\",\n        \"sha3_256_hash_of_secret_key\": \"a01db77c5983b2472e616dfc04666a2112924dda5ffbf00a989cf1a48578898b\",\n        \"encapsulation_seed\": \"28878249e2ac2b6263422993923a0c8bd05ce56e385ed13c943b03d226856947\",\n        \"sha3_256_hash_of_ciphertext\": \"dd0b438cb7dcda28762d06e61f1765baef8003d0d86ff48cd4f9788cae8e8618\",\n        \"shared_secret\": \"403543b0f8e519ba4ab878c40ab5aed412ea06bfeb2b864baa5ef4b81a42c454\"\n    },\n    {\n        \"key_generation_seed\": \"aa6dd1e5799cdf7af9c4fc632b3eb9d51d66e85c8e0a21ec98664fc51ab63c7dfda268813efab5204efa60f78bf81d320d01ac09ac06244f7afbd2d80fd356d9\",\n        \"sha3_256_hash_of_public_key\": \"4126f5151d1b086e26a88bd9f20710ef06aa0f834722b801f6b79c031f1f9213\",\n        \"sha3_256_hash_of_secret_key\": \"9a6c24b5ae556241f3e6b07a7576971173ecfe474be9c6b09fd12ddef8b5f75e\",\n        \"encapsulation_seed\": \"17fc65f7fbd7c75ceec421dee84dff5a8cb22764a182db17e0ebe857f54d60eb\",\n        \"sha3_256_hash_of_ciphertext\": \"7c2b9cd82c349fdc534ac30eaa18bf83afd0736b17a4320963571c109451a5b6\",\n        \"shared_secret\": \"f7a280462f93b619888b5a72da3749556e53ef4f4440df728c8db1edcc86cea4\"\n    },\n    {\n        \"key_generation_seed\": \"195d6c86a3df4c21e3007d7f2768b43c74cb3060e0eca77f0a5d3271542b9a84ae77e0f9f21eabd8c0c6eea7767f4e10fde5c2d79b8400bf96b19014b457ec21\",\n        \"sha3_256_hash_of_public_key\": \"b6f12914ed31f14f79c652eed4db478de7ebd263fe27052509fee10b50f2d053\",\n        \"sha3_256_hash_of_secret_key\": \"1a4de442c4c6db97bfa12227c4423237a869c93154e2c5ca49cacbd0ef730485\",\n        \"encapsulation_seed\": \"fa0489f3730100609488e951e6aaa15c0f193bc1dbcfcd013bc418d6c507b176\",\n        \"sha3_256_hash_of_ciphertext\": \"41d75dd4690637576652071cb46987cc26321a07bb47a1cfb07f30d2153920c5\",\n        \"shared_secret\": \"fef3730b905431d14aa7aa7bb1d253cd912335c590b8d7de1e7aa4e0ff76be04\"\n    }\n]"
  },
  {
    "path": "test/libcrux-ml-kem/tests/sha3.cc",
    "content": "\n#include <gtest/gtest.h>\n#include <nlohmann/json.hpp>\n\n#include \"libcrux_sha3_portable.h\"\n#include \"libcrux_mlkem768.h\"\n\nusing namespace std;\n\ntypedef vector<uint8_t> bytes;\n\nvector<uint8_t>\nfrom_hex(const string& hex)\n{\n  if (hex.length() % 2 == 1) {\n    throw invalid_argument(\"Odd-length hex string\");\n  }\n\n  int len = static_cast<int>(hex.length()) / 2;\n  vector<uint8_t> out(len);\n  for (int i = 0; i < len; i += 1) {\n    string byte = hex.substr(2 * i, 2);\n    out[i] = static_cast<uint8_t>(strtol(byte.c_str(), nullptr, 16));\n  }\n\n  return out;\n}\n\nstring\nbytes_to_hex(const vector<uint8_t>& data)\n{\n  stringstream hex(ios_base::out);\n  hex.flags(ios::hex);\n  for (const auto& byte : data) {\n    hex << setw(2) << setfill('0') << int(byte);\n  }\n  return hex.str();\n}\n\nTEST(Sha3Test, ConsistencyTest)\n{\n    const char* message = \"Hello, World!\";\n    uint32_t message_size = strlen(message);\n\n    Eurydice_borrow_slice_u8 input;\n    input.ptr = (uint8_t*) message;\n    input.meta = message_size;\n\n    auto digest = libcrux_sha3_sha256(input);\n\n    bytes expected_digest = from_hex(\n      \"1af17a664e3fa8e419b8ba05c2a173169df76162a5a286e0c405b460d478f7ef\");\n\n    EXPECT_EQ(strncmp((char*)digest.data,\n                      (char*)expected_digest.data(),\n                      32),\n              0);\n}\n"
  },
  {
    "path": "test/lvalue.rs",
    "content": "enum Struct {\n  A(Vec<u8>),\n  B(Box<i32>),\n  C\n}\nenum ThreeWays {\n  Middle(i32),\n  Left(Vec<u8>),\n  Right(Box<f64>),\n}\nfn use_struct(s: ThreeWays) -> Struct {\n  match s {\n    ThreeWays::Middle(i) => Struct::B(Box::new(i)),\n    ThreeWays::Left(st) => Struct::A(st),\n    _ => Struct::C,\n  }\n}\nfn main() { }\n\n"
  },
  {
    "path": "test/main.c",
    "content": "#include \"__NAME__.h\"\n#include \"eurydice_glue.h\"\n\nint main() {\n  __NAME___main();\n  return 0;\n}\n"
  },
  {
    "path": "test/mismatch.rs",
    "content": "pub trait Operations: Clone + Copy {\n    fn zero() -> Self;\n}\npub struct MlKemKeyPairUnpacked<const K: usize, Vector: Operations> {\n    x: [Vector; K],\n}\n\nimpl<const K: usize, Vector: Operations> MlKemKeyPairUnpacked<K, Vector> {\n    #[inline(always)]\n    pub(crate) fn default() -> Self {\n        Self {\n            x: core::array::from_fn(|_| Vector::zero()),\n        }\n    }\n}\n\nfn main() {\n}\n"
  },
  {
    "path": "test/more_dst.rs",
    "content": "struct S<U: ?Sized> {\n    foo: u32,\n    data: U,\n}\n\ntype T1 = S<[u32]>;\ntype TS1 = S<[u32; 4]>;\n\ntype T2 = S<T1>;\ntype TS2 = S<TS1>;\n\ntype T3 = S<T2>;\ntype TS3 = S<TS2>;\n\nfn main() {\n    let x1 = TS1 { foo: 0, data: [0; 4]};\n    let y1 : &T1 = &x1;\n    assert_eq!(y1.data[1],0);\n\n    let x2 = TS2 { foo: 0, data: x1};\n    let y2 : &T2 = &x2;\n    assert_eq!(y2.data.data[2],0);\n\n    let x3 = TS3 { foo: 0, data: x2};\n    let y3 : &T3 = &x3;\n    assert_eq!(y3.data.data.data[3],0);\n}\n"
  },
  {
    "path": "test/more_primitive_types.rs",
    "content": "struct MorePrimitiveTypes {\n    int128: i128,\n    uint128: u128,\n    c : char\n}\n\nfn match_u128(p : &MorePrimitiveTypes) -> i32 {\n    match p.uint128 {\n        0xffff | 0xffffffff => 3,\n        0xffff_ffff_ffff_ffff_ffff_ffff_ffff => 4,\n        0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffff => 5,\n        _ => 1\n    }\n}\n\nfn match_i128(p : &MorePrimitiveTypes) -> i32 {\n    match p.int128 {\n        -0xffff | -0xffffffff => 3,\n        -0xffff_ffff_ffff_ffff => 4,\n        -0xffff_ffff_ffff_ffff_ffff_ffff_fff => 5,\n        _ => 1\n    }\n}\n\nfn int128_operations(p : &mut MorePrimitiveTypes) -> i32 {\n    p.int128 = p.int128 & 0xffff_ffff_1 - 0x1ff_ffff_ffff_ffff * 0x1 << 10;\n    p.uint128 = p.uint128 & 0xffff_ffff_1 - 0x1f;\n    let x = 1u128 >> p.uint128 << p.int128;\n    x as i32\n}\n\nfn more_operations(p : &mut MorePrimitiveTypes) -> i32 {\n    let mut result = 0;\n\n    // Add\n    result += (p.int128 + 1) as i32;\n    result += (p.uint128 + 1) as i32;\n\n    // Sub\n    result += (p.int128 - 1) as i32;\n    result += (p.uint128 - 1) as i32;\n\n    // Mult\n    result += (p.int128 * 2) as i32;\n    result += (p.uint128 * 2) as i32;\n\n    // Div\n    result += (p.int128 / 2) as i32;\n    result += (p.uint128 / 2) as i32;\n\n    // Mod\n    result += (p.int128 % 3) as i32;\n    result += (p.uint128 % 3) as i32;\n\n    // BShiftL\n    result += (p.int128 << 1) as i32;\n    result += (p.uint128 << 1) as i32;\n\n    // BShiftR\n    result += (p.int128 >> 1) as i32;\n    result += (p.uint128 >> 1) as i32;\n\n    // BAnd\n    result += (p.int128 & 0xff) as i32;\n    result += (p.uint128 & 0xff) as i32;\n\n    // BOr\n    result += (p.int128 | 0xff) as i32;\n    result += (p.uint128 | 0xff) as i32;\n\n    // BXor\n    result += (p.int128 ^ 0xff) as i32;\n    result += (p.uint128 ^ 0xff) as i32;\n\n    // Eq\n    if p.int128 == 0 {\n        result += 1;\n    }\n    if p.uint128 == 0 {\n        result += 1;\n    }\n\n    // Neq\n    if p.int128 != 0 {\n        result += 1;\n    }\n    if p.uint128 != 0 {\n        result += 1;\n    }\n\n    // Lt\n    if p.int128 < 0 {\n        result += 1;\n    }\n    if p.uint128 < 1 {\n        result += 1;\n    }\n\n    // Lte\n    if p.int128 <= 0 {\n        result += 1;\n    }\n    if p.uint128 <= 1 {\n        result += 1;\n    }\n\n    // Gt\n    if p.int128 > 0 {\n        result += 1;\n    }\n    if p.uint128 > 1 {\n        result += 1;\n    }\n\n    // Gte\n    if p.int128 >= 0 {\n        result += 1;\n    }\n    if p.uint128 >= 1 {\n        result += 1;\n    }\n\n    // Neg\n    result += (-p.int128) as i32;\n\n    // BNot\n    result += (!p.int128) as i32;\n    result += (!p.uint128) as i32;\n\n    result\n}\n\nfn use_more_primitive_types() {\n    let s = b\"ahello\";\n    let p = MorePrimitiveTypes {\n        int128: -0xffff_ffff_ffff_ffff_ffff_ffff_fff,\n        uint128: 0xffff_ffff_ffff_ffff_ffff_ffff_ffff,\n        c: 'a'\n    };\n    match_u128(&p);\n    match_i128(&p);\n    assert!(p.c == s[0] as char);\n}\n\nfn main() {\n    use_more_primitive_types();\n}"
  },
  {
    "path": "test/more_primitive_types.yaml",
    "content": "files:\n  - name: more_primitive_types\n    include_in_h: [ \"\\\"eurydice/int128.h\\\"\" ]\n    api:\n      - [ more_primitive_types ]\n    private:\n      - [ \"*\" ]\n"
  },
  {
    "path": "test/more_str.rs",
    "content": "// This file describes the usage of multiple UTF-8 strings in Rust.\n\nfn use_str(s: &str) {\n  // This function takes a string slice and does trivial operations on it.\n  assert!(s.len() > 2);\n}\n\nfn main() {\n  // various UTF-8 strings\n  let eng = \"Hello, world!\";\n  let chn = \"你好，世界！\";\n  let jpn = \"こんにちは世界！\";\n  let mix = \"Hello, 你好，こんにちは世界！123Hi\";\n  use_str(eng);\n  use_str(chn);\n  use_str(jpn);\n  use_str(mix);\n}\n"
  },
  {
    "path": "test/mutable_slice_range.rs",
    "content": "fn test(x: &mut [u8]) -> u8 {\n    x[0]\n}\n\nfn main() {\n    let mut x = [ 0; 8 ];\n    let result = test(&mut x[..]);\n    let expected = 0;\n    assert_eq!(result, expected);\n}\n"
  },
  {
    "path": "test/names.rs",
    "content": "struct Foo { x: u32, y: u32 }\nenum Baz { Foo(u32, u32), Bar(u32) }\nstruct Type {\n  switch : i32,\n  class : i32,\n}\nfn f(r#struct: u32){ let r#class = 0; }\nfn main() {}\n"
  },
  {
    "path": "test/nested_arrays.rs",
    "content": "type Key = [ u32; 8 ];\nconst ZERO: Key = [ 0, 1, 2, 3, 4, 5, 6, 7 ];\n\nfn test() -> [[u8; 200]; 4] {\n    let mut out0 = [0u8; 200];\n    let mut out1 = [0u8; 200];\n    let mut out2 = [0u8; 200];\n    let mut out3 = [0u8; 200];\n    [out0, out1, out2, out3]\n}\n\nfn main() {\n    let keys = [ [ ZERO; 3 ]; 3 ];\n    for i in 0..3 {\n        for j in 0..3 {\n            for k in 0..8 {\n                let actual = keys[i][j][k];\n                let expected = k as u32;\n                assert_eq!(actual, expected);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "test/nested_arrays2.rs",
    "content": "const TABLE: [[u8; 1]; 1] = [[1]];\n\nfn main() {\n}\n"
  },
  {
    "path": "test/option.rs",
    "content": "type Val = [u8; 16];\nstruct S {\n    v: Option<Val>,\n}\nimpl S {\n    fn option_ref(&self) -> Option<&Val> {\n        self.v.as_ref()\n    }\n}\n\nfn main(){}\n"
  },
  {
    "path": "test/parentparent.rs",
    "content": "trait A: B {\n}\n\ntrait B: C {\n}\n\ntrait C {\n    fn foo(&mut self);\n}\n\nfn f<U: A> (mut x: U) {\n    x.foo()\n}\n\nfn main() {}\n"
  },
  {
    "path": "test/partial_eq.rs",
    "content": "#[derive(PartialEq, Debug)]\n#[repr(u32)]\npub enum Enum { A = 0 }\n\nfn main() {\n    let expected = Enum::A;\n    assert_eq!(expected, expected);\n    assert_eq!(&expected, &expected);\n}\n"
  },
  {
    "path": "test/partial_eq_stubs.c",
    "content": "#include \"partial_eq.h\"\n\nextern core_result_Result_10\ncore_fmt__core__fmt__Formatter__a___write_str(core_fmt_Formatter *x0, Eurydice_dst_ref_shared_0d x1) {\n  return core_result_Ok;\n}\n"
  },
  {
    "path": "test/println.rs",
    "content": "fn main() {\n    println!(\"What is up\");\n    let x = [0; 4];\n    println!(\"x[0] is: {}\", x[0]);\n}\n"
  },
  {
    "path": "test/raw_pointers.rs",
    "content": "fn main() {\n    let mut x = 0u8;\n    let mut px = &mut x as *mut u8 as *const u8;\n    unsafe {\n        assert_eq!(0u8, *px);\n    }\n}\n"
  },
  {
    "path": "test/reborrow.rs",
    "content": "fn main() {\n  let mut x = 0u8;\n  let mut px = &mut x as *mut u8 as *const u8;\n  unsafe {\n    assert_eq!(0u8, *px);\n    // Reborrow the pointer\n    let py = &*px;\n    assert_eq!(0u8, *py);\n  }\n\n  let val = 0u8;\n  let b = Box::new(val);\n  let pb = &*b;\n  unsafe {\n    assert_eq!(0u8, *pb);\n    // Reborrow the pointer\n    let pb2 = &*pb;\n    assert_eq!(0u8, *pb2);\n  }\n}"
  },
  {
    "path": "test/recursion.rs",
    "content": "fn is_odd(y: i32) -> bool {\n   if y < 0 { return is_odd(-y); }\n   match y {\n       0 => false,\n       1 => true,\n       y => is_odd(y - 2)\n   }\n}\n\nfn main() {\n    assert!(is_odd(5));\n}\n"
  },
  {
    "path": "test/repeat.rs",
    "content": "const C1: [u32; 1] = [0u32; 1];\nconst C2: [[u32; 1]; 1] = [[0u32; 1]; 1];\n\nconst REJECTION_SAMPLE_SHUFFLE_TABLE: [[u8; 16]; 256] = [\n    [\n        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n        0xff,\n    ],\n    [\n        0, 1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 6, 7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0xff, 0xff, 0xff, 0xff],\n    [\n        12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 6, 7, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 0xff, 0xff, 0xff, 0xff],\n    [\n        10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0xff, 0xff],\n    [\n        14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 6, 7, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 14, 15, 0xff, 0xff, 0xff, 0xff],\n    [\n        10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 0xff, 0xff],\n    [\n        12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 6, 7, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 0xff, 0xff],\n    [\n        10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        6, 7, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 6, 7, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 0xff, 0xff],\n    [\n        8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [0, 1, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff],\n    [\n        6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        0, 1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [\n        2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff],\n    [\n        4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff, 0xff, 0xff,\n    ],\n    [0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff],\n    [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0xff, 0xff],\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n];\n\nfn main() { if C1[0] + C2[0][0] + REJECTION_SAMPLE_SHUFFLE_TABLE[255][0] as u32 != 0 { panic!(\"oh noes\") } }\n"
  },
  {
    "path": "test/result.rs",
    "content": "enum S {\n    S1 { x1: u32, y1: u32 },\n    S2 { x2: u32, y2: u32  }\n}\n\nfn mk1(x: u32, y: u32) -> S {\n    S::S1 { x1: x, y1: y }\n}\n\nfn ident(x: S) -> S { x }\n\nfn main() {\n    match mk1(0, 0) {\n        S::S1 { x1 : 0, y1 : 0 } => (),\n        _ => panic!(\"oh noes\")\n    };\n    match ident(S::S2 { x2: 0, y2: 0 }) {\n        S::S2 { x2 : 0, y2 : 0 } => (),\n        _ => panic!(\"oh noes\")\n    }\n}\n"
  },
  {
    "path": "test/signed_wrapping.rs",
    "content": "fn main() {\n    // i8 wrapping operations\n    assert_eq!(100i8.wrapping_add(27), 127);\n    assert_eq!(100i8.wrapping_add(100), -56);\n    assert_eq!((-128i8).wrapping_add(-1), 127);\n\n    assert_eq!(10i8.wrapping_sub(20), -10);\n    assert_eq!((-128i8).wrapping_sub(1), 127);\n    assert_eq!(127i8.wrapping_sub(-1), -128);\n\n    assert_eq!(10i8.wrapping_mul(5), 50);\n    assert_eq!(100i8.wrapping_mul(2), -56);\n    assert_eq!((-128i8).wrapping_mul(-1), -128);\n\n    assert_eq!(5i8.wrapping_neg(), -5);\n    assert_eq!((-128i8).wrapping_neg(), -128);\n\n    // i16 wrapping operations\n    assert_eq!(30000i16.wrapping_add(2768), -32768);\n    assert_eq!((-32768i16).wrapping_add(-1), 32767);\n\n    assert_eq!((-32768i16).wrapping_sub(1), 32767);\n    assert_eq!(32767i16.wrapping_sub(-1), -32768);\n\n    assert_eq!(200i16.wrapping_mul(200), -25536);\n    assert_eq!((-32768i16).wrapping_mul(-1), -32768);\n\n    assert_eq!(5i16.wrapping_neg(), -5);\n    assert_eq!((-32768i16).wrapping_neg(), -32768);\n\n    // i32 wrapping operations\n    assert_eq!(2_000_000_000i32.wrapping_add(2_000_000_000), -294967296);\n    assert_eq!((-2_147_483_648i32).wrapping_add(-1), 2_147_483_647);\n\n    assert_eq!((-2_147_483_648i32).wrapping_sub(1), 2_147_483_647);\n    assert_eq!(2_147_483_647i32.wrapping_sub(-1), -2_147_483_648);\n\n    assert_eq!(100_000i32.wrapping_mul(100_000), 1_410_065_408);\n    assert_eq!((-2_147_483_648i32).wrapping_mul(-1), -2_147_483_648);\n\n    assert_eq!(5i32.wrapping_neg(), -5);\n    assert_eq!((-2_147_483_648i32).wrapping_neg(), -2_147_483_648);\n\n    // i64 wrapping operations\n    assert_eq!(\n        5_000_000_000_000_000_000i64.wrapping_add(5_000_000_000_000_000_000),\n        -8_446_744_073_709_551_616\n    );\n    assert_eq!((-9_223_372_036_854_775_808i64).wrapping_add(-1), 9_223_372_036_854_775_807);\n\n    assert_eq!((-9_223_372_036_854_775_808i64).wrapping_sub(1), 9_223_372_036_854_775_807);\n    assert_eq!(9_223_372_036_854_775_807i64.wrapping_sub(-1), -9_223_372_036_854_775_808);\n\n    assert_eq!(\n        3_000_000_000i64.wrapping_mul(3_000_000_000),\n        9_000_000_000_000_000_000\n    );\n    assert_eq!((-9_223_372_036_854_775_808i64).wrapping_mul(-1), -9_223_372_036_854_775_808);\n\n    assert_eq!(5i64.wrapping_neg(), -5);\n    assert_eq!((-9_223_372_036_854_775_808i64).wrapping_neg(), -9_223_372_036_854_775_808);\n}\n"
  },
  {
    "path": "test/slice_array.rs",
    "content": "fn f1() {\n    let mut x = [[0u8; 4]; 4];\n    let (y0, _y1) = x.split_at_mut(2);\n    y0[0][0] = 1;\n    let actual = x[0][0];\n    let expected = 1;\n    assert_eq!(actual, expected);\n}\n\nfn f4<const K: usize>() {\n    let mut x = [[0u8; K]; K];\n    let (y0, _y1) = x.split_at_mut(2);\n    y0[0][0] = 1;\n    let actual = x[0][0];\n    let expected = 1;\n    assert_eq!(actual, expected);\n}\n\nfn f2() {\n    let mut x = [[0u8; 4]; 4];\n    let (y0, _y1) = x.split_at_mut(2);\n    // generates a copy\n    let mut z = y0[0];\n    z[0] = 1;\n    let actual = x[0][0];\n    let expected = 0;\n    assert_eq!(actual, expected);\n    assert_eq!(z[0],1);\n}\n\nuse std::convert::TryInto;\nfn f3() {\n    let x1 : &[u8] = &[0u8;4];\n    let y1 : [u8;4] = x1.try_into().unwrap();\n    \n    let x2 : &[u8] = &[0u8;4];\n    let y2 : &[u8;4] = x2.try_into().unwrap();\n    \n    let x3 : &mut [u8] = &mut [0u8;4];\n    let y3 : [u8;4] = x3.try_into().unwrap();\n    \n    assert_eq!(y1[0],y2[0]);\n    assert_eq!(y1[0],y3[0]);\n}\n\nfn f5<const K:usize>() {\n    let x1 : &[u8] = &[0u8;K];\n    let y1 : [u8;K] = x1.try_into().unwrap();\n    \n    let x2 : &[u8] = [0u8;K].as_slice();\n    let y2 : &[u8;K] = x2.try_into().unwrap();\n    \n    assert_eq!(y1[0],y2[0]);\n}\n\nfn main() {\n    f1();\n    f2();\n    f3();\n    f4::<4>();\n    f5::<4>();\n}\n"
  },
  {
    "path": "test/step_by.rs",
    "content": "fn bar() {\n    let mut i = 0;\n    for j in (0..24).step_by(6) {\n        i = i + j;\n    }\n    assert_eq!(i, 36);\n}\n\nfn main1() {\n    bar();\n    let mut i = 0;\n    for j in (0..24).step_by(6) {\n        i = i + j;\n    }\n    for j in (0..24).step_by(6) {\n        i = i + j;\n    }\n}\n\nfn main2() {\n    main1();\n    for j in (0..24).step_by(6) {\n    }\n    for j in (0..24).step_by(6) {\n    }\n}\n\nfn main() {\n    main2();\n    for j in 0..24 {\n    }\n    for j in 0..24 {\n    }\n}\n"
  },
  {
    "path": "test/substr.rs",
    "content": "fn main() {\n  let str = \"abc\";\n  let take = &str[1..];\n  assert!(take.len() == 2);\n}\n"
  },
  {
    "path": "test/substr.yaml",
    "content": "files:\n  - name: substr\n    include_in_h: [ \"\\\"substr_stubs.h\\\"\" ]\n    api:\n      patterns:\n        - [ substr, \"*\" ]\n      exact:\n        - [ core, str, \"{str}\", len ]\n    private:\n      - [ \"*\" ]\n\n"
  },
  {
    "path": "test/substr_impl.c",
    "content": "#include \"substr.h\"\n\nsize_t core_str__str__len(Eurydice_dst_ref_shared_0d x0) {\n  return x0.meta;\n}\n"
  },
  {
    "path": "test/substr_stubs.h",
    "content": "#define core_str_traits__core__ops__index__Index_I__Clause1_Output__for_str__index(_0, _1, _2, _3, _4, _5, str, start, _t0, _t1, t) \\\n  ((t){ .ptr = str.ptr + start, .meta = str.meta - start })\n"
  },
  {
    "path": "test/symcrust.rs",
    "content": "#[allow(non_snake_case)]\n#[no_mangle]\npub fn SymCrustMlKemPolyElementCompressAndEncode(\n    coeffs:              &[u16; 256],\n    nBitsPerCoefficient: u32,\n    dst:                 &mut [u8] )\n{\n    let SYMCRYPT_MLKEM_COMPRESS_MULCONSTANT : u64 = 0x9d7dbb;\n    let SYMCRYPT_MLKEM_COMPRESS_SHIFTCONSTANT : u32 = 35;\n    let mut multiplication: u64;\n    let mut coefficient: u32;\n    let mut nBitsInCoefficient: u32;\n    let mut bitsToEncode: u32;\n    let mut nBitsToEncode: u32;\n    let mut cbDstWritten: usize = 0;\n    let mut accumulator: u32 = 0;\n    let mut nBitsInAccumulator: u32 = 0;\n\n    assert!(nBitsPerCoefficient > 0);\n    assert!(nBitsPerCoefficient <= 12);\n    assert!( dst.len() as u64 == (256*u64::from(nBitsPerCoefficient) / 8) );\n\n    for i in 0..256\n    {\n        nBitsInCoefficient = nBitsPerCoefficient;\n        coefficient = u32::from(coeffs[i]); // in range [0, Q-1]\n\n        // first compress the coefficient\n        // when nBitsPerCoefficient < 12 we compress per Compress_d in draft FIPS 203;\n        if nBitsPerCoefficient < 12\n        {\n            // Multiply by 2^(nBitsPerCoefficient+1) / Q by multiplying by constant and shifting right\n            multiplication = u64::from(coefficient) * SYMCRYPT_MLKEM_COMPRESS_MULCONSTANT;\n            coefficient = (multiplication >> (SYMCRYPT_MLKEM_COMPRESS_SHIFTCONSTANT-(nBitsPerCoefficient+1))) as u32;\n\n            // add \"half\" to round to nearest integer\n            coefficient += 1;\n\n            // final divide by two to get multiplication by 2^nBitsPerCoefficient / Q\n            coefficient >>= 1;                              // in range [0, 2^nBitsPerCoefficient]\n\n            // modular reduction by masking\n            coefficient &= (1u32<<nBitsPerCoefficient)-1;    // in range [0, 2^nBitsPerCoefficient - 1]\n        }\n\n        // encode the coefficient\n        // simple loop to add bits to accumulator and write accumulator to output\n        while nBitsInCoefficient > 0\n        {\n            nBitsToEncode = nBitsInCoefficient.min(32-nBitsInAccumulator);\n\n            bitsToEncode = coefficient & ((1u32<<nBitsToEncode)-1);\n            coefficient >>= nBitsToEncode;\n            nBitsInCoefficient -= nBitsToEncode;\n\n            accumulator |= bitsToEncode << nBitsInAccumulator;\n            nBitsInAccumulator += nBitsToEncode;\n            if nBitsInAccumulator == 32\n            {\n                dst[cbDstWritten..cbDstWritten+4].copy_from_slice( &accumulator.to_le_bytes() );\n                cbDstWritten += 4;\n                accumulator = 0;\n                nBitsInAccumulator = 0;\n            }\n        }\n    }\n}\n\nfn main() {\n    // let mut dst = [0; 256];\n    // SymCrustMlKemPolyElementCompressAndEncode(&[0; 256], 1, &mut dst);\n}\n"
  },
  {
    "path": "test/trait_generics.rs",
    "content": "struct Foo<const K: usize>;\n\ntrait MyFnOnce {\n    fn call_once(self) -> u32;\n}\n\nimpl<const K: usize> MyFnOnce for Foo<K> {\n    fn call_once(self) -> u32 {\n        0\n    }\n}\n\nfn from_fn<F>(f: F)\nwhere\n    F: MyFnOnce,\n{\n    f.call_once();\n}\n\nfn main() {\n    from_fn(Foo::<10>);\n}\n"
  },
  {
    "path": "test/traits.rs",
    "content": "enum Foo { Foo1, Foo2 }\n\ntrait ToInt {\n    fn to_int(&self) -> u32;\n}\n\nimpl ToInt for Foo {\n    fn to_int(&self) -> u32 {\n        match self {\n          | Foo::Foo1 => 1,\n          | Foo::Foo2 => 2\n        }\n    }\n}\n\nimpl ToInt for &[Foo] {\n    fn to_int(&self) -> u32 {\n        self[0].to_int() * self[1].to_int()\n    }\n}\n\nfn main() {\n    let foos = [Foo::Foo1, Foo::Foo2];\n    // TODO: [..] (full range)\n    // TODO: assert_eq -- interesting pattern where some intermediary computations need to be\n    // allocated\n    // assert_eq!((&foos[0..2]).to_int(), 2u32);\n    if (&foos[0..2]).to_int() != 2u32 {\n        panic!();\n    }\n}\n"
  },
  {
    "path": "test/traits2.rs",
    "content": "pub trait Operations: Copy + Clone {\n    fn zero() -> Self;\n    fn from_i16_array(array: &[i16]) -> Self;\n}\n\npub(crate) struct PolynomialRingElement<Vector: Operations> {\n    pub(crate) coefficients: [Vector; 16],\n}\n\nfn re_zero<Vector: Operations>() -> PolynomialRingElement<Vector> {\n    PolynomialRingElement {\n        coefficients: [Vector::zero(); 16],\n    }\n}\n\nfn re_from_i16_array<Vector: Operations>(a: &[i16]) -> PolynomialRingElement<Vector> {\n    let mut result = re_zero();\n    for i in 0..16 {\n        result.coefficients[i] = Vector::from_i16_array(&a[i * 16..(i + 1) * 16]);\n    }\n    result\n}\n\nimpl<Vector: Operations> PolynomialRingElement<Vector> {\n    pub(crate) fn zero() -> Self {\n        re_zero()\n    }\n    pub fn from_i16_array(a: &[i16]) -> Self {\n        re_from_i16_array(a)\n    }\n}\n\nfn sample_from_xof<const K: usize, Vector: Operations>() -> [PolynomialRingElement<Vector>; K] {\n\n    let mut out: [[i16; 272]; K] = [[0; 272]; K];\n    out.map(|s| PolynomialRingElement::<Vector>::from_i16_array(&s[0..256]))\n}\n\nfn main() {}\n"
  },
  {
    "path": "test/traits3.rs",
    "content": "pub trait KeccakStateItem<const N: usize>: internal::KeccakItem<N> {}\n\nimpl<const N: usize, T: internal::KeccakItem<N>> KeccakStateItem<N> for T {}\n\npub(crate) mod internal {\n    /// A trait for multiplexing implementations.\n    pub trait KeccakItem<const N: usize>: Clone + Copy {\n        fn zero() -> Self;\n    }\n}\n\npub(crate) fn keccak<const N: usize, T: KeccakStateItem<N>>(\n) {\n}\n\ntype uint64x2_t = (u64,u64);\n\nimpl internal::KeccakItem<2> for uint64x2_t {\n    fn zero() -> Self {\n        (0, 0)\n    }\n}\n\nfn keccakx2() {\n    keccak::<2, uint64x2_t>()\n}\n\nfn main() {}\n"
  },
  {
    "path": "test/we_need_charon_monomorphization.rs",
    "content": "fn use_ref<T : ?Sized>(_t : &T) { }\nfn supply_ref(s: &[i32]) { use_ref(s) }\nfn main() { supply_ref(&[1,2,3]) }\n"
  },
  {
    "path": "test/where_clauses.rs",
    "content": "trait Mul2 {\n    fn mul2 (x: Self) -> Self;\n    fn add (x: Self, y: Self) -> Self;\n}\n\ntrait MyImpl<T: Mul2> {\n    fn mul4 (x: T, y: T) -> T {\n        T::add(T::mul2(x), T::mul2(y))\n    }\n}\n\nstruct Foo { }\n\nimpl Mul2 for u64 {\n    fn mul2(x: u64) -> u64 { x << 2 }\n    fn add(x: u64, y: u64) -> u64 { x + y }\n}\n\nimpl MyImpl<u64> for Foo {\n}\n\nfn main() {\n    let x = Foo::mul4(0u64, 0u64);\n    assert_eq!(x, 0u64);\n}\n"
  },
  {
    "path": "test/where_clauses_closures.rs",
    "content": "trait Ops<const K: usize> {\n    fn zero() -> Self;\n    fn of_usize(x: usize) -> Self;\n}\n\nimpl Ops<1> for usize {\n    fn zero() -> Self { 0 }\n    fn of_usize(x: usize) -> Self { x.into() }\n}\n\nfn test<const K:usize, T: Ops<K>+Copy>() -> (T, T) {\n    let x: [ T; 1 ] = core::array::from_fn(|i| T::of_usize(i));\n    let y = T::zero();\n    (x[0], y)\n}\n\nfn main() { let (x, y) = test::<1,usize>(); assert_eq!(x, y); }\n"
  },
  {
    "path": "test/where_clauses_fncg.rs",
    "content": "trait Foo<const K: usize> {\n    fn bar<const L: usize>(x: [[u8; L]; K], y: [[u8; K]; L]) -> Self;\n}\n\nimpl<const K: usize> Foo<K> for u64 {\n    fn bar<const L: usize>(x: [[u8; L]; K], _: [[u8; K]; L]) -> Self {\n        x[0][0].into()\n    }\n}\n\nfn f<const K: usize, const L: usize, const M: usize, T: Foo<L>>() -> T {\n    T::bar([[0; 4]; L], [[0; L]; 4])\n}\n\ntrait UseFoo {\n    fn method_foo<const K: usize, T: Foo<K>>() -> T;\n}\n\nimpl UseFoo for () {\n    fn method_foo<const K: usize, T: Foo<K>>() -> T {\n        T::bar([[0; 4]; K], [[0; K]; 4])\n    }\n}\n\nfn g<Scheme: UseFoo>() -> u64 {\n    Scheme::method_foo::<12, u64>()\n}\n\nfn main() {\n    let r = f::<6, 8, 10, u64>();\n    assert_eq!(r, 0);\n\n    let r = g::<()>();\n    assert_eq!(r, 0);\n}\n"
  },
  {
    "path": "test/where_clauses_simple.rs",
    "content": "// The difficulty with implementing traits as dictionaries is the mismatch in terms of const\n// generics (types are less of an issue somewhat).\n\n// In this trait decl, method signatures (as found in the trait_decl) are all parametric over K\ntrait Ops<const K: usize> {\n    // usize -> Self -> Self -> Self\n    fn add (x: [u16; K], y: Self) -> Self;\n    // usize -> u16 -> Self\n    fn of_u16 (x: u16) -> Self;\n}\n\n// Here, however, the signatures in this trait impl are NOT parametric over K\nimpl Ops<1> for u64 {\n    // [u16; 1] -> u64 -> u64\n    fn add (x: [u16; 1], y: u64) -> u64 { Into::<u64>::into(x[0]) + y }\n    // u16 -> u64\n    fn of_u16 (x: u16) -> u64 { x.into() }\n}\n\nimpl<const K: usize> Ops<K> for usize {\n    // usize -> [u16; 1] -> usize -> usize\n    fn add (x: [u16; K], y: usize) -> usize { Into::<usize>::into(x[0]) + y + K }\n    // usize -> u16 -> usize\n    fn of_u16 (x: u16) -> usize { x.into() }\n}\n\nfn fn_k<const K: usize, T: Ops<K>>() -> T {\n    // NO CONST GENERICS PROVIDED AT THIS CALL-SITE\n    // The call sites only have the the method-level const generics.\n    let x = T::of_u16(0);\n    T::add([0; K], x)\n}\n\nfn fn_1<T: Ops<1>+Copy>() -> T {\n    // NO CONST GENERICS PROVIDED AT THIS CALL-SITE\n    let x = T::of_u16(0);\n    T::add([0; 1], x)\n}\n\nfn k_calls_k() {\n    // fn_k receives an add function that starts with size_t -> ... (for the impl-level const\n    // generic)\n    let r = fn_k::<3, usize>();\n    let r_expected = 3;\n    assert_eq!(r, r_expected);\n}\n\nfn k_calls_one() {\n    // fn_k receives an add function that DOES NOT start with size_t -> ...\n    let r = fn_k::<1, u64>();\n    let r_expected = 0;\n    assert_eq!(r, r_expected);\n}\n\nfn one_calls_k() {\n    let r = fn_1::<usize>();\n    let r_expected = 1;\n    assert_eq!(r, r_expected);\n}\n\nfn one_calls_one() {\n    let r = fn_1::<u64>();\n    let r_expected = 0;\n    assert_eq!(r, r_expected);\n}\n\nfn double<T: Ops<1> + Copy, U: Ops<1>+Copy> (x: T, y: U) -> (T, U) {\n    (T::add([0; 1], x), U::add([0; 1], y))\n}\n\nfn double_k<const K: usize, T: Ops<K> + Copy, U: Ops<1>+Copy> (x: T, y: U) -> (T, U) {\n    (T::add([0; K], x), U::add([0; 1], y))\n}\n\nfn main() {\n    // The four common situations with const generics in bounds.\n    k_calls_k();\n    k_calls_one();\n    one_calls_k();\n    one_calls_one();\n\n    // Slightly more involved tests.\n    let x = double(1u64, 1usize);\n    let y = double_k::<3usize, usize, u64>(1usize, 1u64);\n    let x_0 = 1u64;\n    let x_1 = 2usize;\n    assert_eq!(x.0, x_0);\n    assert_eq!(x.1, x_1);\n    let y_0 = 4usize;\n    let y_1 = 1u64;\n    assert_eq!(y.0, y_0);\n    assert_eq!(y.1, y_1);\n}\n"
  }
]